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?

「Dockerはわかるけど…」から卒業!AWSでコンテナを動かすための30日集中講座 - Day 12: タスク定義とサービスの作成:コンテナをAWS上で動かすための設定

Last updated at Posted at 2025-08-19

Day 12: タスク定義とサービスの作成:コンテナをAWS上で動かすための設定 🚀

皆さん、こんにちは!30日集中講座、Day 12へようこそ。

昨日、ECSでコンテナを動かす基盤として、FargateとEC2のどちらを選ぶべきかを学びました。今日のハンズオンでは、ECSのタスク定義サービスを作成し、いよいよコンテナをAWS上で動かします。

1. 準備:タスク、タスク定義、サービスの役割

ECSでのデプロイは、次の2つのステップで行います。まず、ECSの各要素の関係を整理しましょう。

  • タスク: 実際に起動しているコンテナの単位です。複数のコンテナ(メインアプリとサイドカーなど)で構成されることもあります。
  • タスク定義: タスクの「設計図」を作成します。どのDockerイメージを使うか、CPUやメモリをどれだけ割り当てるか、といった設定を定義します。
  • サービス: タスク定義に基づいてコンテナを起動し、その稼働数を管理します。

本日の目標は、Day 6で作成してDay 10でECRにプッシュしたPythonアプリのコンテナイメージを、AWS上で起動・実行することです。


2. ステップ・バイ・ステップ:タスク定義の作成

AWSコンソールでECSに移動し、左側のメニューから「タスク定義」を選択します。

ステップ1: タスク定義の作成(所要時間:約5分)

  1. 「新しいタスク定義の作成」 をクリックします。
  2. タスク定義ファミリー名my-first-app-taskのように入力します。
  3. インフラストラクチャの要件では、Fargateを選択します。
  4. タスクのサイズでは、タスクに割り当てるCPUとメモリを指定します。
    • CPU: 0.25 vCPU
    • メモリ: 0.5 GB
    • この組み合わせは、最も安価な設定であり、今回の学習目的には十分です。

ステップ2: IAMロールとコンテナの設定

  1. タスク実行ロール: ECSがECRからイメージをプルしたり、CloudWatch Logsにログを送信するための権限として、デフォルトの ecsTaskExecutionRole を選択します。
  2. コンテナセクションで、「コンテナの追加」をクリックします。
  3. イメージURI: ECRリポジトリにプッシュしたイメージのURIを貼り付けます。
  4. ポートマッピング: Day 6のアプリは5000番ポートを使っていたので、5000 と入力します。
  5. 環境変数: 今回は学習目的のため、DATABASE_URLを直接設定します。本番環境では、AWS Systems Manager Parameter StoreやSecrets Managerを使用し、機密情報を安全に管理しましょう。

設定が完了したら、「作成」をクリックしてタスク定義を保存します。


3. ステップ・バイ・ステップ:サービスの作成とデプロイ

タスク定義が完了したら、次にサービスを作成し、コンテナを実際に起動します。ECSコンソールで、「クラスター」を選択し、作成したクラスターをクリックします。

ステップ1: サービスの作成(所要時間:約5分)

  1. 「サービス」タブから「作成」をクリックします。
  2. タスク定義: 先ほど作成したタスク定義を選択します。
  3. サービス名: my-first-app-serviceのように、分かりやすい名前を付けます。
  4. 必要なタスク数: 常に稼働させたいタスクの数を指定します。今回は1と入力します。

ステップ2: ネットワーク設定

  1. VPC: デフォルトのVPCを選択します。
  2. サブネット: 2つ以上のサブネットを選択します。これは、コンテナを複数のアベイラビリティーゾーンに分散させ、サービスの可用性を高めるためです。
  3. セキュリティグループ:
    • 新しいセキュリティグループを作成します。
    • インバウンドルール: コンテナのポート5000へのアクセスを許可するルールを追加します。学習のため、CIDR0.0.0.0/0(すべて)を許可しておきましょう。
    • 注意: 本番環境では、0.0.0.0/0は避けるべきです。
  4. パブリックIPの自動割り当て: 今回は有効にします。これにより、タスクにパブリックIPが割り当てられます。

設定をすべて確認し、「作成」をクリックします。サービスが作成されると、タスクがプロビジョニングされ、指定したタスク数(今回は1つ)のコンテナが自動で起動します。しばらくすると、タスクの状態が 「RUNNING」 に変わります。(起動まで2-3分程度お待ちください)


4. 動作確認とトラブルシューティング

✅ 成功の確認ポイント

  • タスクの状態が「RUNNING」になっている。
  • ブラウザでアプリケーションにアクセスできる。

よくある問題と解決策

  • 「CannotPullContainerError」が発生した場合:
    • 原因: ECRへのアクセス権限不足や、イメージURIの誤り。
    • 対策: タスク実行ロールにAmazonECSTaskExecutionRolePolicyが付与されているか、ECRリポジトリのURIが正しいか確認してください。
  • タスクがRUNNINGになった後、すぐにSTOPPEDになる:
    • 原因: アプリケーションがすぐに終了しているか、コンテナ内のポート設定が不一致。
    • 対策: CloudWatch Logsでコンテナのログを確認し、エラー内容を特定しましょう。
  • ネットワークアクセスができない場合:
    • 原因: セキュリティグループ、サブネット、インターネットゲートウェイの設定不備。
    • 対策: ECSコンソールでタスクの詳細を開き、パブリックIPが割り当てられているか確認し、セキュリティグループのインバウンドルールがポート5000で開いているか再確認しましょう。

5. まとめと次のステップ

  • タスク定義は、Dockerイメージやリソース設定をAWS向けに定義する「設計図」です。
  • サービスは、タスク定義に基づいてコンテナを起動し、その稼働数を維持する役割を担います。
  • Fargateは、これらの設定だけでコンテナを簡単に動かすことができます。

今日学んだ内容の制限事項: 現在の設定では、タスクが停止すると新しいIPアドレスが割り当てられます。この問題は、明日学ぶApplication Load Balancer (ALB) により解決できます。

💰 コスト管理のポイント:
Fargateの料金は、使用したCPU・メモリ・時間に基づいて計算されます。今回の設定(0.25 vCPU, 0.5GB)では、1時間あたり約$0.01の費用がかかります。学習後は必ずリソースを削除し、不要な費用を避けましょう。

🧹 リソースの削除方法:

  1. ECSサービスで「更新」→「必要なタスク数」を0に設定します。
  2. タスクが停止したことを確認後、サービスを削除します。
  3. タスク定義は課金されないため、削除は任意です。

次回の予告
Day 13: ロードバランサーとオートスケーリング:高可用性なサービスを構築しよう

それでは、また明日お会いしましょう!

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?