LoginSignup
0
0

【AWS CF】エラー「 Unable to update task definition on services with a CODE_DEPLOY deployment controller」の原因

Posted at

概要

AWS CloudformationでECSのblue/greenデプロイを構築中、サービスの中身を更新したらUnable to update task definition...というエラーになりました。原因を備忘録として残しておきます。

エラー内容

DesiredCount(希望するタスク数)を変更したく、Parametersで定義したTaskDeployNumWebの数値を0から1に変えて実行しました。
(マネコンからいじってもいいですが、保守性を高めるためにCF更新で行おうと思ったため)

しかし、Cloudformation実行後、以下のエラーになりました。

Resource handler returned message: "Invalid request provided: UpdateService error: Unable to update task definition on services with a CODE_DEPLOY deployment controller. Use AWS CodeDeploy to trigger a new deployment. (Service: AmazonECS; Status Code: 400; Error Code: InvalidParameterException; Request ID: XXXXXXXX; Proxy: null)" (RequestToken: XXXXXXXX, HandlerErrorCode: InvalidRequest)

該当箇所は以下。

 ServiceXXX:
    Type: AWS::ECS::Service
    DependsOn: HttpListenerRuleWebBlue
    Properties: 
      Cluster: !Sub ${rEcsName}
      DesiredCount: !Ref TaskDeployNumWeb # Parametersで数値を割り当てています
      ServiceName: !Sub ${SysTag}
      LaunchType: "EC2"
      PlacementStrategies:
        - Field: "attribute:ecs.availability-zone"
          Type: spread
        - Field: "instanceId"
          Type: spread
      DeploymentController:
        Type: CODE_DEPLOY
      LoadBalancers:
        - TargetGroupArn: !Ref TargetGroupWebBlue
          ContainerPort: 80
          ContainerName: Web
      TaskDefinition: !Ref TaskXXX

原因

エラーメッセージは、まずDeploymentControllerCODE_DEPLOYで設定されている場合、タスク定義の更新が制限されている、ということを示しています。つまり、CODE_DEPLOYデプロイメントコントローラーを使用している場合は、サービスを更新することはできないよ〜ということを言っているのです。

結論、どうすればいいか?というと、CFで行うためにはタスク定義から作り直さないといけないようです。しかもデプロイも必要だ、と...。
うーん、、もうbuildspec.yamlとかで諸々設定していたので、それは面倒だなぁ...となりますた。

ということで、マネジメントコンソールから「サービスの更新」→「必要なタスク」を1にして対応としました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0