1. ホーム
  2. 記事一覧
  3. CICDパイプラインでECSを使用したアプリケーションのデプロイ

2024.05.13

CICDパイプラインでECSを使用したアプリケーションのデプロイ

はじめに

記事の概要と前回の振り返り

前回の記事では、AWSのCodeCommitとCodePipelineを使用して、CICDパイプラインの構築を行いました。今回は、このパイプラインを拡張し、ECSを使用してアプリケーションをデプロイするデプロイステージの設定と動作確認を行います。

前回の記事はこちらを参照してください。

https://envader.plus/article/376

ECRの作成

ECR(Elastic Container Registry)は、コンテナイメージを安全に保存し、ECSなどのサービスで利用するためのリポジトリを提供します。アプリケーションのデプロイに必要なコンテナイメージを効率的に管理できます。

ECRリポジトリの作成手順

  1. AWS Management Consoleにログイン

  2. ECRコンソール(プライベートリポジトリ)に移動

  3. リポジトリの作成

    • 「リポジトリを作成」をクリック
    • リポジトリ名を入力(例: my-sample-repo
    • リポジトリの設定(プライベートまたはパブリック)を選択
    • 「リポジトリを作成」をクリック
  4. リポジトリURIの確認

    • 作成したリポジトリのURI(例: 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/my-sample-repo)をメモしておきます。

Dockerfileの作成

Dockerfileは、アプリケーションの環境をコンテナ内で再現するための設定ファイルです。これを作成することにより、一貫性のある環境構築と容易なデプロイが可能になります。

Dockerfileの追加手順

  1. Dockerfileの内容

    Dockerfileをリポジトリのルートディレクトリに作成し、以下の内容を追加します。

    # ベースイメージ
    FROM node:20
    
    # アプリケーションディレクトリを作成
    WORKDIR /usr/src/app
    
    # パッケージをインストール
    COPY package*.json ./
    RUN npm install
    
    # アプリケーションのソースコードをバンドル
    COPY . .
    
    # アプリケーションをビルド
    RUN npm run build
    
    # アプリケーションを公開
    EXPOSE 3000
    CMD [ "node", "index.js" ]
  2. ファイルをステージング

    git add Dockerfile
  3. コミットメッセージを作成

    git commit -m "Add Dockerfile for ECS deployment"
  4. リポジトリにプッシュ

    git push origin master

Dockerイメージのビルドとプッシュ

  1. ECRにログイン

    aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com
  2. Dockerイメージのビルド

    docker build -t my-sample-app .
  3. Dockerイメージにタグを付ける

    docker tag my-sample-app:latest 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/my-sample-repo:latest
  4. DockerイメージをECRにプッシュ

    docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/my-sample-repo:latest

ECS クラスターとタスク定義の設定

ECSクラスターとタスク定義は、アプリケーションのコンテナを実行する環境を構築し、管理するために必要です。スケーラブルで管理しやすいアプリケーションデプロイが可能になります。

ECSクラスターの作成手順

  1. AWS Management Consoleにログイン
  2. ECSコンソールに移動
  3. クラスターの作成
    • 「クラスターの作成」をクリック
    • インフラストラクチャの項目で、「AWS Fargate(サーバーレス)」を選択して次へ
    • クラスター名を入力(例: MySampleCluster
    • 他はデフォルト設定のまま「作成」をクリック

タスク定義の設定と作成方法

  1. タスク定義の作成

    • 「タスク定義」をクリックし、「新しいタスク定義の作成」を選択
    • タスク定義ファミリーを入力(例: MySampleTask
    • インフラストラクチャの要件で「AWS Fargate」を選択します。
  2. タスク定義の設定

    • コンテナの詳細
      • 名前: MySampleContainer
      • イメージ: <your-docker-image-url>(例: amazon/amazon-ecs-sample
      • メモリのハード制限(MiB): 512
      • ポートマッピング: ホストポート 80, コンテナポート 80
    • 「追加」をクリックしてコンテナを追加
    • 「作成」をクリックしてタスク定義を保存

imagedefinitions.jsonの作成

imagedefinitions.json は、CodePipelineのデプロイステージでECSにデプロイする際に必要なコンテナイメージの情報を定義するファイルです。これにより、CodePipelineがどのコンテナイメージを使用するかを認識できます。

imagedefinitions.json の内容

ルートディレクトリ配下にimagedefinitions.json ファイルを作成し、以下の内容を追加します。

[
  {
    "name": "MySampleContainer",
    "imageUri": "123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/my-sample-repo:latest"
  }
]

ファイルの追加手順

  1. imagedefinitions.json を作成

    • リポジトリのルートディレクトリに imagedefinitions.json ファイルを作成し、上記の内容を貼り付けます。
  2. ファイルをステージング

    git add imagedefinitions.json
  3. コミットメッセージを作成

    git commit -m "Add imagedefinitions.json for ECS deployment"
  4. リポジトリにプッシュ

    git push origin master

ロードバランサーの設定

ロードバランサーは、複数のコンテナインスタンス間でトラフィックを効率的に分散させる役割を果たします。これにより、アプリケーションの高可用性とスケーラビリティを確保できます。特に、トラフィックの急増に対応する際に、ロードバランサーが各インスタンスに均等に負荷を分散することで、システム全体の安定性とパフォーマンスが向上します。ECSと組み合わせることで、動的なスケーリングにも対応可能です。

ALBの作成と設定方法

  1. AWS Management Consoleにログイン

  2. EC2コンソールに移動

  3. ロードバランサーの作成

    • 左メニューから「ロードバランサー」をクリックし、「ロードバランサーの作成」を選択
    • 「Application Load Balancer」を選択して「作成」をクリック
  4. 基本設定

    • 名前を入力(例: MySampleALB
    • スキーム: インターネット向け
  5. ネットワーク設定

    • VPCを選択
    • サブネットを選択(2つ以上)
  6. セキュリティグループ設定

    • 新しいセキュリティグループを作成または既存のものを使用
    • インバウンドルールでHTTP(ポート80)を許可
  7. リスナーとルーティング設定

    • ターゲットグループの作成から作成
    • ターゲットグループ名: MySampleTG
    • ターゲットの種類: IP
    • ポート: 80
    • 「ターゲットグループの作成」をクリック
  8. 確認して作成

    • 設定を確認して「ロードバランサーの作成」をクリック

CodePipelineでのデプロイ設定

デプロイ設定は、アプリケーションをECSに自動的にデプロイするために必要です。前回の記事で作成したCICDパイプラインにデプロイステージを追加することで、ソースコードの変更がECSに反映される一連の自動化プロセスを完成させます。

デプロイステージの追加方法

  1. CodePipelineコンソールに移動

  2. パイプラインの編集

    • 「MySamplePipeline」を選択し、「編集」をクリック
  3. デプロイステージの追加

    • 編集から「ステージの追加」をクリック
    • ステージ名を入力(例: Deploy
  4. アクションの追加

    • 「アクショングループを追加する」をクリック
    • アクション名: DeployToECS
    • アクションプロバイダー: Amazon ECS
    • クラスター名: MySampleCluster
    • サービス名: MySampleService
    • イメージの定義ファイル名: imagedefinitions.json(リポジトリに配置したファイル)
    • 「保存」をクリックしてアクションを追加
  5. パイプラインの保存と実行

    • 設定を確認して「保存」をクリック
    • パイプラインが自動的に開始されるのを確認

動作確認

パイプラインの実行と動作確認

  1. パイプラインの手動実行方法

    • 「パイプラインを開始」をクリックして手動でパイプラインを実行
    • 各ステージ(ソース、ビルド、デプロイ)の進行状況を確認
  2. ECSでのアプリケーション確認

    • ALBのDNS名にアクセスし、デプロイされたアプリケーションが正常に動作していることを確認

まとめ

今回の記事では、前回構築したCICDパイプラインを拡張し、ECSを使用してアプリケーションのデプロイを行いました。具体的には、以下の内容をカバーしました。

  1. ECRの作成

    コンテナイメージのホスティングリポジトリの設定

  2. Dockerfileの作成

    アプリケーションのコンテナイメージ作成

  3. ECSクラスターとタスク定義の設定

    アプリケーションのデプロイ先を設定

  4. ロードバランサーの設定

    トラフィックの分散と高可用性の確保

  5. CodePipelineでのデプロイ設定

    デプロイステージの追加と設定

  6. 動作確認

    パイプラインの実行とアプリケーションの確認

この記事を通じて、CodeCommit、CodePipeline、CodeBuild、およびECSを活用したCICDパイプラインの構築方法について理解を深めていただけたと思います。このハンズオンを元に、さらに複雑なアプリケーションやワークフローにも対応できるよう、実践的なスキルを磨いていってください。

参考リンク

【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

IT未経験者必見 USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。

「フリーランスエンジニア」

近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。

「成功する人とそうでない人の違いは何か?」

私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。

比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。

多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、

note記事3000いいね超えの殿堂記事 今すぐ読む

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事