不使用CloudFormation的AWS Change ECS服务任务定义(部署)

时间:2018-12-03 22:18:11

标签: amazon-web-services amazon-cloudformation

缓慢地将我们所有的资源转移到CloudFormation进行管理,到目前为止,该过程相对比较轻松。

我在ECS服务上部署新任务定义(仅暂存环境)有点困难。我认为有些部分无法使用CloudFormation进行管理,因为ECS服务正在引用参数。

当前过程:

  • 在BitBucket上推送到develop分支

  • 然后,
  • BitBucket管道进行处理(简化):

    • 使用标签latest

    • 创建ECR图像
    • 通过aws ecs register-task-definition --cli-input-json $TASK_JSON

    • 创建新的任务定义修订
    • 使用aws ecs update-service --cluster ${ECS_CLUSTER_NAME} --service ${ECS_SERVICE} --task-definition $TASK_DEFINITION

    • 使用新的任务定义更新ECS服务。

一切正常!


通过以下方式将ECS资源管理移至CloudFormation

Parameters:
  TaskDefinition:
    Type: String
    Description: Task Definition ARN

Resources:
  HTTPService:
    Type: AWS::ECS::Service
    DependsOn: ListenerRule
    Properties:
      Cluster: !Ref ECSCluster
    Role: !Ref ServiceRole
    DesiredCount: 1
    HealthCheckGracePeriodSeconds: 120
    TaskDefinition: !Ref TaskDefinition
    LoadBalancers:
      - ContainerName: http
        ContainerPort: 80
        TargetGroupArn: !Ref TargetGroup

TargetGroup:
  Type: AWS::ElasticLoadBalancingV2::TargetGroup
  Properties:
    VpcId: !Ref VPC
    Port: 80
    Protocol: HTTP
    Matcher:
      HttpCode: 200
    HealthCheckIntervalSeconds: 15
    HealthCheckPath: /
    HealthCheckProtocol: HTTP
    HealthCheckTimeoutSeconds: 5
    HealthyThresholdCount: 2

ListenerRule:
  Type: AWS::ElasticLoadBalancingV2::ListenerRule
  Properties:
    ListenerArn: !Ref Listener
    Priority: 2
    Conditions:
      - Field: path-pattern
        Values:
          - /blog
    Actions:
      - TargetGroupArn: !Ref TargetGroup
        Type: forward

如果我现在手动运行aws ecs update-service命令,则CloudFormation堆栈将与ECS服务不同步。

研究一下也许运行aws cloudformation update-stack,但是BitBucket用户的IAM权限变得相当复杂。

也许我已经在这里错误地进行了设置。这里有任何指针/建议吗?

0 个答案:

没有答案