ECS集成撰写功能
预计阅读时间:6分钟
撰写-Amazon ECS映射
本文档概述了将Compose文件中定义的应用程序转换为AWS资源。每个服务都映射到项目集群中的ECS服务。
撰写栏位对应
下表列出了受支持的Compose文件字段及其对应的AWS。
传奇:
- ✓:已实施
- n:尚未实施
- x:不适用/没有可用的转换
按键 | 地图 | 笔记 |
---|---|---|
服务 | ✓ | |
service.service.build | X | 忽略了。AWS上没有映像构建支持。 |
service.cap_add,cap_drop | ✓ | 受Fargate限制支持 |
服务命令 | ✓ | |
service.configs | X | |
service.cgroup_parent | X | |
service.container_name | X | |
service.credential_spec | X | |
服务部署 | ✓ | |
service.deploy.endpoint_mode | X | |
service.deploy.mode | X | |
service.deploy.replicas | ✓ | 设置服务初始比例。自动缩放功能启用后将使其动态变化 |
service.deploy.placement | ✓ | 与EC2支持一起使用以选择机器类型和AMI |
service.deploy.update_config | ✓ | |
service.deploy.resources | ✓ | 为配置的内存和cpu选择具有最低实例类型的Fargate资源 |
service.deploy.restart_policy | ✓ | |
service.deploy.labels | ✓ | |
服务设备 | X | |
service.depends_on | ✓ | 使用CloudFormation Depends_on实现 |
service.dns | X | |
service.dns_search | X | |
服务域名 | X | |
service.tmpfs | X | Fargate不支持,请参阅https://github.com/docker/compose-cli/issues/839 |
服务入口点 | ✓ | |
service.env_file | ✓ | |
服务环境 | ✓ | |
service.expose | X | |
service.extends | ✓ | |
service.external_links | X | |
service.extra_hosts | X | |
service.group_add | X | |
服务健康检查 | ✓ | 这将配置ECS控制台上报告的容器级别的运行状况检查。Application Load Balancer还将通过访问/ 并期望HTTP 200状态代码来检查HTTP服务运行状况。 |
service.hostname | X | |
服务图像 | ✓ | 通过将x-aws-pull_policy与用户名+密码秘密的ARN一起传递,可以访问私有图像 |
服务隔离 | X | |
服务标签 | X | |
服务链接 | X | |
服务记录 | ✓ | 可用于自定义CloudWatch Logs配置 |
service.network_mode | X | |
服务网络 | X | 服务之间的通信由应用程序VPC中的安全组实现。 |
service.pid | X | |
服务端口 | ✓ | ECS仅支持对称端口映射。请参阅暴露端口。 |
service.secrets | ✓ | 参见秘密。 |
service.security_opt | X | |
service.stop_grace_period | X | |
service.stop_signal | X | |
service.sysctls | X | |
service.ulimits | ✓ | nofile 由于Fargate的限制,仅支持ulimit |
service.userns_mode | X | |
服务量 | ✓ | 映射到EFS文件系统。请参阅持久卷。 |
服务重启 | X | 替换为service.deployment.restart_policy |
体积 | X | |
司机 | ✓ | 请参阅持久卷。 |
driver_opts | ✓ | |
外部的 | ✓ | name 必须是EFS文件系统ID |
标签 | X | |
秘密 | X | |
外部的 | ✓ | name 必须设置为secret的ARN |
文件 | ✓ | 文件内容将上传到AWS Secret Manager |
设定档 | X | |
日志
可以使用获取容器中的应用程序日志docker compose logs
。Docker ECS集成依靠AWS CloudWatch Logs从所有容器中收集日志。可以logging.driver_opts
通过传递前缀为的配置属性来设置服务来自定义CloudWatch awslogs-
。
test:
image: mycompany/webapp
logging:
driver-opts:
awslogs-datetime-pattern: "some-pattern"
暴露端口
当一个或多个服务公开端口时,将为该应用程序创建负载均衡器。由于所有服务都是通过同一负载均衡器公开的,因此只有一项服务可以公开给定的端口号。组成文件中定义的源端口和目标端口必须相同,因为服务到服务的通信不会通过负载均衡器,并且无法从侦听器抽象中受益来分配不同的已发布端口。
如果Compose文件中的服务仅公开端口80或443,则会创建一个应用程序负载均衡器,否则ECS集成将提供网络负载均衡器。使用不同端口的HTTP服务可以通过x-aws-protocol
在端口声明中声明具有自定义扩展名的http协议来强制使用ALB :
test:
image: mycompany/webapp
ports:
- target: 8080
x-aws-protocol: http
持久卷
Docker卷已映射到EFS文件系统。卷可以是外部卷(name
必须将其设置为文件系统ID),也可以在首次部署应用程序时创建。docker compose down
不会删除文件系统,并且它将在以后运行时重新附加到应用程序。
driver_opts
可用于调整EFS filsystem。
通过将用户和组ID设置为用于写入文件系统,无论用户配置为运行容器如何,都可以自定义卷挂载以解决Posix文件系统权限问题。
services:
myservice:
image: mycompany/webapp
volumes:
- mydata:/mount/testvolumes
volumes:
mydata:
driver_opts:
performance-mode: maxIO
throughput-mode: bursting
uid: 0
gid: 0
机密
机密可以在撰写文件中定义,并且需要在部署时在撰写文件旁边提供机密文件。秘密文件的内容将在选定容器内可用,默认情况下位于/run/secrets/<SECRET_NAME>
。还支持外部机密,name
然后必须将其设置为机密的ARN
services:
nginx:
image: mycompany/webapp
secrets:
- mysecret
secrets:
mysecret:
file: ./my_secret1.txt
集装箱资源
可以在compose中设置CPU和内存限制。这些用于选择与这些限制匹配的最小Fargate大小。
services:
nginx:
image: mycompany/webapp
deploy:
resources:
limits:
cpu: '0.5'
memory: 2Gb