スキップしてコンテンツを表示

CloudFormation で Amazon ECS ブルー/グリーンデプロイを構成する際に発生するエラーの解決方法を教えてください。

所要時間2分
0

AWS CloudFormation で Amazon Elastic Container Service (Amazon ECS) ブルー/グリーンデプロイを構成する際に、エラーが発生します。

解決策

CloudFormation で AWS::CodeDeploy::BlueGreen フックを使用すると、エラーメッセージが表示される場合があります。エラーをトラブルシューティングするには、各エラーに対応する解決策セクションの手順を実行します。

Failure to parse エラー

権限が付与されていない場合、またはテンプレートに Weight プロパティが含まれない場合、AWS CodeDeploy は指定されたテンプレートの Hooks セクションを解釈できません。次のエラーメッセージが表示される可能性があります。

"'CodeDeployBlueGreenHook' of type AWS::CodeDeploy::BlueGreen failed with message: Internal Failure"

ブルー/グリーンデプロイを有効にする変更セットを作成する際は、CloudFormation スタックに CloudFormation サービスの AWS Identity and Access Management (IAM) ロールをアタッチする必要があります。このエラーを解決するには、スタック操作を実行する権限をサービスロールに付与します。

注: CodeDeploy がスタックを作成した後は、スタックからサービスロールを削除することはできません。

DefaultAction の定義に ForwardConfig プロパティが含まれているものの、リソースタイプ AWS::ElasticLoadBalancingV2::ListenerWeight プロパティが含まれていない場合、CodeDeploy フックは失敗します。このエラーを解決するには、リソースタイプに Weight プロパティが含まれていることを確認します。

Additional resource エラー

同じスタック更新内に、グリーンデプロイを開始するリソースに対する更新と、その他のリソースに対する更新が含まれている場合、次のエラーが発生します。

"Additional resource diff other than Amazon ECS application related resource update is detected,CodeDeploy can't perform BlueGreen style update properly.Diff resource logical Ids: []"

このエラーを解決するには、次の手順を実行します。

  1. 2 つのスタック更新操作を別々に実行します。
    注: 一方のスタック更新には、グリーンデプロイを開始するリソースの更新版のみを含める必要があります (AWS::ECS::TaskDefinitionAWS::ECS::TaskSet)。2 番目のスタック更新には、他のリソースに対する変更を含める必要があります。
  2. CloudFormation テンプレートから Transform セクションと Hooks セクションを削除した後、スタック更新を実行します。注: この場合、CloudFormation はグリーンデプロイを実行しません。

Not supported エラー

CloudFormation テンプレートでは、構成のインポートとエクスポートはサポートされません。Amazon ECS のブルー/グリーンデプロイを定義するテンプレートにおいて、他のスタックから値をインポートするために Outputs を宣言した場合、または Fn::ImportValue を使用した場合、次のエラーが発生します。

"Imports and exports are currently not supported on templates using hooks"

このエラーを解決するには、テンプレートではインポートとエクスポートの使用を避けてください。

CodeDeploy は、動的参照を使用してサードパーティから値を取得するパラメータや、グリーンデプロイ時に NoEcho 属性定義が存在しないパラメータを更新できません。動的参照を使用した場合、次のエラーが発生する可能性があります。

"'CodeDeployBlueGreenHook' of type AWS::CodeDeploy::BlueGreen failed with message: NoEcho parameter Dynamic references is not supported in template when using AWS::CodeDeploy::BlueGreen Hook"

このエラーを解決するには、テンプレートでは動的参照の使用を避けます。

Test listener エラー

既にグリーンのターゲットグループを指すテストリスナーを指定した場合、CodeDeploy フックは失敗し、次のエラーが発生します。

"'CodeDeployBlueGreenHook' of type AWS::CodeDeploy::BlueGreen failed with message: Replacement target group [ALBTargetGroupGreen] is already serving traffic behind listener [ALBListenerTestTraffic]"

このエラーを解決するには、CloudFormation テンプレートのアップロード時に、Production および Test Listeners の両フィールドに同じ値が含まれていることを確認します。

Transform missing エラー

更新版 CloudFormation テンプレートに Transform セクションが含まれていない場合、Transform は呼び出されません。ブルー/グリーンリソースの論理 ID が変換されなかった場合、次のエラーが発生します。

"'CodeDeployBlueGreenHook' of type AWS::CodeDeploy::BlueGreen failed with message: The submitted template's primary task definition 'BlueTaskDefinition' was never updated.The template's 'AWS::CodeDeployBlueGreen' Transform might be missing or removed"

このエラーを解決するには、CloudFormation を更新する前に、CloudFormation テンプレートに Transform セクションが含まれていることを確認します。

Load Balancer エラー

TrafficRoutingconfig のタイプは、AllAtOnce に設定する必要があります。テンプレートに Network Load Balancer が含まれており、AWS::CodeDeploy::BlueGreen フックが設定されており、TrafficRoutingConfig のタイプが TimeBasedCanary または TimeBasedLinear である場合、次のエラーが発生します。

"'CodeDeployBlueGreenHook' of type AWS::CodeDeploy::BlueGreen failed with message: Only AllAtOnce traffic routing config type is supported for network load balancers." (Network Load Balancer では、トラフィックルーティング構成のタイプには AllAtOnce のみがサポートされます)

このエラーを解決するには、TrafficRoutingConfig のタイプを AllAtOnce に設定したことを確認します。

ロードバランサーの Amazon リソースネーム (ARN) をパラメータとして構成し、!Ref を使用して AWS::ElasticLoadBalancingV2::ListenerLoadBalancerArn プロパティを参照している場合、次のエラーが発生する可能性があります。

"Transform AWS::CodeDeployBlueGreen failed with: Failed to transform template.Could not find AWS::ElasticLoadBalancingV2::LoadBalancer LoadBalancerArn"

このエラーを解決するには、テンプレート内にロードバランサーのリソースを作成し、LoadBalancerArn プロパティで ARN を参照します。または、LoadBalancerArn プロパティにロードバランサーの ARN をハードコードすることも可能です。

Amazon ECS service エラー

単一の Application Load Balancer を共有する、2 つの異なる Amazon ECS サービスのターゲットを Hooks Applications プロパティに追加した場合、次のエラーが発生する可能性があります。

"'CodeDeployBlueGreenHook' of type AWS::CodeDeploy::BlueGreen failed with message: Handler failed: Applications must have at most one application in AWS::CodeDeploy::BlueGreen Hook"

このエラーを解決するには、Application Load Balancer には 1 つの Amazon ECS サービスのみをアタッチします。

AWS公式更新しました 2ヶ月前
コメントはありません

関連するコンテンツ