说我有一个docker-compose文件,如下所示:
version: '3'
services:
nginx:
image: nginx:latest
ports:
- 80:80
我希望能够理想地将其部署到AWS Fargate(尽管我很沮丧,以至于我不愿意使用ECS或其他任何可行的方法)-现在,我不在乎卷,扩展或其他任何相关内容可能有复杂性,我只追求最低要求,因此我可以开始了解发生了什么。唯一需要注意的是,它需要使用代码-我可以从CI服务器启动自动部署。
CloudFormation是正确的工具吗?我似乎只能找到字面意思是一千行或更多的yaml的示例,它们都不起作用,而且无法调试。
答案 0 :(得分:1)
您可以使用AWS cdk工具将基础结构编写为代码。它基本上是一个用于创建cloudformation模板的元框架。这是一个使用自动缩放将nginx部署到负载平衡的ecs fargate服务的最小示例,但是您可以删除最后一个表达式。当您需要对开始内容进行更多控制时,代码会变得越来越复杂
import cdk = require('@aws-cdk/cdk');
import ec2 = require('@aws-cdk/aws-ec2');
import ecs = require('@aws-cdk/aws-ecs');
import ecr = require('@aws-cdk/aws-ecr');
export class NginxStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const vpc = new ec2.VpcNetwork(this, 'MyApiVpc', {
maxAZs: 1
});
const cluster = new ecs.Cluster(this, 'MyApiEcsCluster', {
vpc: vpc
});
const lbfs = new ecs.LoadBalancedFargateService(this, 'MyApiLoadBalancedFargateService', {
cluster: cluster,
cpu: '256',
desiredCount: 1,
// The tag for the docker image is set dynamically by our CI / CD pipeline
image: ecs.ContainerImage.fromDockerHub("nginx"),
memoryMiB: '512',
publicLoadBalancer: true,
containerPort: 80
});
const scaling = lbfs.service.autoScaleTaskCount({
maxCapacity: 5,
minCapacity: 1
});
scaling.scaleOnCpuUtilization('MyApiCpuScaling', {
targetUtilizationPercent: 10
});
}
}
我将链接添加到了特定的cdk版本,因为文档的最新版本有些破损。
答案 1 :(得分:0)
ECS使用“任务定义”而不是docker-compose。在“任务定义”中,定义要使用的映像和端口。如果我们使用AWS CLI,也可以使用docker-compose。但是我还没有尝试过。
因此,您可以首先创建基于ECS Fargate的集群,然后使用任务定义创建任务或服务。这将在Fargate中弹出容器。