ECSでCodeDeployのInstallイベントが一向に終わる気配がない時はタスクのステータスを確認してみよう

installイベントから一向に終わる気配がないと不安になりますよね。
2022.10.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは!AWS事業本部のおつまみです。

AWSコンテナ初心者の強い味方である「AWSコンテナ設計・構築[本格]入門

みなさんご存知でしょうか?
大変良書のため、持っている方々も多いと思います。

書籍について、弊社ブログでも紹介しています。

こちらの書籍に従ってハンズオンを進めていたのですが、途中CodeDeployによるBule/Grrenデプロイのinstallイベントから一向にデプロイが進まなくなってしまいました。 原因を特定するために時間がかかったため、同じような状態になっている方のお役に立てればと思います!

いきなり結論

ECSクラスターの[タスク]タブで必要なタスクのステータスを[Stopped]にすると、[前回のステータス]欄にDeployに失敗している原因がエラーメッセージとして表示されている。

何が起こったのか?

ECSのFargateでCodeDeployによるBlue/Greenデプロイを設定し、Blue→Greenに切り替えるためECSサービスの更新を行いました。(テキストp.325のECSサービス更新)

1時間後…

う〜ん画面が変わらない。。
デプロイステータスはステップ1のまま、デプロイのライフサイクルイベントはinstallのままで一向に終わる気配がありませんでした。

そのため[デプロイを停止してロールバック]をクリックし、一旦デプロイを停止しました。

原因の特定

結論でお伝えしたように、ECSクラスターの[タスク]タブで必要なタスクのステータスを[Stopped]にします。すると、[前回のステータス]欄にDeployに失敗している原因がエラーメッセージとして表示されていました。

原因のメッセージは下記の通りでした。

STOPPED (ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried 5 time(s): failed to fetch secret from secrets manager: RequestCanceled: request context canceled caused by: context deadline exceeded)

訳:STOPPED (ResourceInitializationError: シークレットまたはレジストリ認証をプルできません: 実行リソースの取得に失敗しました: asmからシークレットを取得できません: サービス呼び出しが 5 回再試行されました: シークレットの取得に失敗しました )

なにやらSecrets Managerが怪しいと思い、設定数を確認してみました。
すると、ECSのタスク定義で環境変数に設定したパラメータが一つ表示されていませんでした。

ECS環境変数

Secrets Manager

対応方法

こちらの公式サイトから追加設定手順が出ているように、Secrets Managerに手動でdbnameを追加しました。

これで再度ECSサービスの更新を行います。

無事installイベントを乗り越えることができました!

最後に

今回はECSでCodeDeployのInstallが一向に終わる気配がない時のエラー特定方法について紹介しました。ECSのタスクステータスにエラーメッセージが出力されることを知らなかったので、知る良いきっかけになりました。

最後までお読みいただきありがとうございました!
この記事が誰かのお役に立てば幸いです。

以上、おつまみ(@AWS11077)でした!

今回使用した書籍

コンテナ初心者におすすめの書籍です!
まだ読んだことのない方はこの1冊でECSに挑戦してみましょう!

AWSコンテナ設計・構築[本格]入門