繁体   English   中英

CloudFormation模板-通过参数选择设置容器镜像

[英]CloudFormation Template - Setting Container Image by Parameter Selection

希望根据参数的选择设置指定的容器镜像; 说如果选择是“接受”容器图像将指向接受分支图像,或者“部署”将指向部署等。

这是我尝试过的一种尝试,但不确定这是否是最佳路径或允许的路径。 创建堆栈后,我收到错误消息:

ECSTaskDefinition CREATE_FAILED Invalid request provided: Create TaskDefinition: Container.name should not be null or empty. (Service: AmazonECS; Status Code: 400; Error Code: ClientException; Request ID: b679c7be-ad3e-4791-b388-d2cb87332b94; Proxy: null)
Parameters:
    Branch:
    Type: String
    AllowedValues:
        - acceptance
        - canary
        - deploy
Mappings:
BranchSelection:
    acceptance:
        BranchType: "${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com/acceptance"
    canary:
        BranchType: "${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com/canary"
    deploy:
        BranchType: "${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com/deploy"

ECSTaskDefinition:
        Type: "AWS::ECS::TaskDefinition"
        Properties:
            ContainerDefinitions: 
              - 
                Environment: 
                  - 
                    Name: "ACCESS_KEY_ID"
                    Value:
                        !Sub
                            - "{{resolve:ssm:/doorways/${STAGE}/ACCESS_KEY_ID:1}}"
                            - { STAGE: !Ref STAGE }
                  - 
                    Name: "SECRET_ACCESS_KEY"
                    Value:
                        !Sub
                            - "{{resolve:ssm:/doorways/${STAGE}/AWS_SECRET_KEY:1}}"
                            - { STAGE: !Ref STAGE }                  
                  - 
                    Name: "SENDGRID_USERNAME"
                    Value:
                        !Sub
                            - "{{resolve:ssm:/doorways/${STAGE}/SENDGRID_USERNAME:1}}"
                            - { STAGE: !Ref STAGE }
                  - 
                    Name: "SENDGRID_PASSWORD"
                    Value:
                        !Sub
                            - "{{resolve:ssm:/doorways/${STAGE}/SENDGRID_PASSWORD:1}}"
                            - { STAGE: !Ref STAGE }
                  - 
                    Name: "REGION"
                    Value: !Ref AWS::Region                  
              -
                Essential: true                 
                Image: !FindInMap
                  - BranchSelection
                  - !Ref Branch
                  - BranchType
                LogConfiguration: 
                    LogDriver: "awslogs"
                    Options: 
                        awslogs-group: "/ecs/doorways-task-definition"
                        awslogs-region: !Ref AWS::Region
                        awslogs-stream-prefix: "ecs"
                Name:
                    !Sub
                        - 'dw-${FriendlyName}-${SiteId}-${STAGE}'
                        - { FriendlyName: !Ref FriendlyName, SiteId: !Ref SiteId, STAGE: !Ref STAGE }
                PortMappings: 
                  - 
                    ContainerPort: 3000
                    HostPort: 3000
                    Protocol: "tcp"
              - 

有没有人有类似的用例,并可能指出我正确的方向?

环境必须至少有一个:

  Name: String
  Value: String

你没有。 此外,您的FindInMap不会按照您认为的方式工作。 ${AWS::AccountId}${AWS::Region}不会被替换,您最终将得到文字字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM