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
Docker亚马逊集成ECS编写cli部署