0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[AWS/ECS] Fargateデプロイ奮闘記:ECRへのプッシュからSecrets Managerでの環境変数注入まで

0
Posted at

最近、プロジェクトをAWS ECS (Fargate) でデプロイしたのですが、想像以上に多くの試行錯誤(いわゆる「沼」)を経験しました。
単なるデプロイ手順だけでなく、実務で必須となる Secrets Managerとの連携 や セキュリティグループの設定 など、私がハマったポイントが誰かの近道になれば幸いです。

  1. Dockerイメージ:GHCRからECRへの乗り換え
    当初はGitHub Container Registry (GHCR) を利用する予定でしたが、プライベートリポジトリの権限周りで 401 Unauthorized エラーに直面。
    悩んだ末、同じAWS環境内にある専用レジストリ、ECR (Elastic Container Registry) にイメージを移すことにしました。

解決までのステップ
ローカル作業: docker pull でイメージを取得し、AWS CLIのインストールと aws configure を完了。

IAM権限: ECRにイメージをプッシュできるよう、IAMユーザーに AmazonEC2ContainerRegistryFullAccess 権限を付与しました。

プッシュ:

aws ecr get-login-password でログイン。

docker tag でイメージにECRのタグを付与。

docker push でイメージのアップロードに成功!

  1. ECS「Expressモード」の罠とタスク定義
    ECSには初心者向けの Express(簡易設定)モード があります。一見便利そうですが、これが意外な落とし穴でした。設定が簡略化されすぎていて、Secrets Managerとの連携 といった詳細な設定を行う場所が見つからないのです。

学んだこと
Expressモードはあくまでクイックテスト用。実際の運用環境(環境変数の注入などが必要な場合)では、「標準(Standard)」設定 が必須です。

すべての設定の肝は 「タスク定義 (Task Definition)」 にあり、設定を変更するたびに新しい リビジョン(改訂版) を作成する必要があります。

  1. 今回のメイン:Secrets Managerの値を環境変数に注入
    ここが一番苦労したポイントです。コード側で process.env.DB_PASSWORD のように値を読み取るには、単に値を入力するだけではなく、「権限」 と 「形式」 を完璧に合わせる必要がありました。

設定のコツ
IAMロールの修正:

ECSが秘密情報を読み取れるよう、ecsTaskExecutionRole に SecretsManagerReadWrite ポリシーを追加しました。これが抜けていると、コンテナは起動できずにすぐ落ちてしまいます。

ARNの形式に注意:

Secret全体ではなく「特定のキー」だけを取得する場合、ARNの末尾に :キー名:: を付ける必要があります。

例:arn:aws:secretsmanager:region:account:secret:name:DB_PASSWORD::

ValueFromの設定:

タスク定義の編集画面で、環境変数のタイプを「Value」ではなく 「ValueFrom」 に設定することで、ARN経由で実際の値が注入されます。

  1. 最後の壁:セキュリティグループ (Security Group)
    デプロイ自体は成功し、ステータスも RUNNING になっている。なのに、ブラウザでアクセスしても無限ロードが続く…。原因はAWSの基本の「き」、セキュリティグループ でした。

解決策
EC2コンソールへ移動: Fargateを使っていても、セキュリティグループの管理はEC2のコンソールで行います。

インバウンドルールの編集: 使用しているセキュリティグループに、アプリのポート(例:3000番)を追加。

ソースを 0.0.0.0/0 に: どこからでもアクセスを許可するように設定した瞬間、無事に画面が表示されました!

  1. 最終デプロイと確認
    すべての設定を終えた後、サービスの更新時に [新しいデプロイの強制 (Force new deployment)] にチェックを入れ、最新の設定が反映されたコンテナを立ち上げました。

振り返り
「コーディングよりインフラが難しい」と感じるのは、ロジックの問題ではなく、「権限 (IAM)」 と 「通信経路 (セキュリティグループ)」 の戦いだからだということがよく分かりました。

同じようにECSのデプロイで「ResourceInitializationError」などのエラーに苦しんでいる方は、ぜひ ARNのタイポ と IAM権限 を真っ先に疑ってみてください!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?