【初心者】CodeDeploy エージェントを活用したEC2へのデプロイ方法を解説【AWS資格対策】【実践ハンズオン】

目次

はじめに

この記事の内容

CodeDeployについて、「基礎学習」と「ハンズオン」の2パートに分けて解説します。

  • 基礎学習
    • 概要
    • 構成要素
    • 利用するメリット
    • 料金
    • デプロイタイプ
  • ハンズオン
    • GitHubに格納しているソースコードを、CodeDeployでEC2にデプロイする。

試験範囲との関係

この記事の内容は、認定資格「AWS Solution Architect Professional」の試験範囲をカバーします。

認定資格取得を目指す方は…

この記事では基礎的な内容のみを扱っているため、資格取得を目指す方はUdemy書籍での自主学習も併せて行うことを推奨します。

基礎学習

ハンズオンの前に、まずはCodeDeployの基礎知識を解説します。

CodeDeployの概要

CodeDeployは、AWSが提供する継続的デプロイメント(CD)サービスです。

このサービスを使用することでアプリケーションを、EC2インスタンス、Lambda関数、ECSサービス、オンプレミスサーバーに対して、簡単かつ迅速にデプロイすることができます。

AWS (AWS CodeDeploy)

CodeDeployの構成要素

CodeDeployの主な構成要素について説明します。

スクロールできます
No.構成要素説明
1アプリケーションデプロイ対象のアプリケーションを指します。
2デプロイグループデプロイメント先のインスタンスやLambda関数をグループ化したものです。
3CodeDeployエージェントEC2・オンプレサーバへのデプロイに必要なソフトウェア。
CodeDeployサービスと通信し、実際のデプロイメント処理を行います。
4AppSpecアプリケーションのデプロイ方法を記述したYAMLファイルです。

CodeDeployを利用するメリット

AWS CodeDeployを使用することで、以下のようなメリットが得られます。

  • デプロイメントの自動化
    • 手動操作を減らすことで人為的なミスを防ぎます。
  • 一貫性の確保
    • 同じ設定で複数の環境にデプロイできるため、環境間の一貫性が保たれます。
  • 他サービスとの統合性
    • AWS CodePipelineなど、ほかのAWSサービスと簡単に統合できます。

CodeDeployの料金

デプロイ先に応じて料金が発生しますが、CodeDeploy自体は基本的に追加料金なしで利用できます。

スクロールできます
デプロイ先料金
EC2, Lambda, ECS無料
オンプレサーバ0.02 USD/回

デプロイメントのためにCodeDeploy と共に使用した、他の AWS リソース(S3バケットなど)に対しては料金が発生します。

CodeDeployのデプロイタイプ

CodeDeployでは、デプロイグループを作成する際に「デプロイタイプ」を選択します。

デプロイタイプは、アプリケーションの更新やデプロイをどのように実施するかを決定するもので、「インプレース」と「BLue/Green」が提供されています。

インプレース

既存のインスタンス上でアプリケーションを新バージョンに置き換える方法で、以下のプロセスでデプロイが行われます。

STEP
アプリケーションの停止

デプロイ開始時に、現在のアプリケーションが停止または削除されます。

STEP
新バージョンのデプロイ

新しいアプリケーションのコードや設定が、既存のインスタンスに展開されます。

STEP
アプリケーションの再起動

あたら石井バージョンがデプロイされた後、アプリケーションが再起動されます。

  • 設定が容易
    • 比較設定が簡単で管理も容易です。
  • コスト効率
    • 新規インスタンスを作成する必要がないため、コストが抑えられます。
  • ダウンタイムの発生
    • アプリケーションの停止と再起動が必要なため、デプロイ中にダウンタイムが発生します。
  • リスク管理
    • デプロイメント中に問題が発生した場合に、既存のインスタンスが一時的に利用できない場合があります。

Blue/Green

2つの環境(BlueとGreen)を使用して、デプロイメントのリスクを最小限に抑える方法で、以下のプロセスでデプロイが行われます。

STEP
新バージョンのデプロイ

Green環境(新しい環境)に対して、新バージョンのアプリケーションがデプロイされます。

STEP
トラフィックの切り替え

新しい環境が完全に準備ができたら、トラフィックをGreen環境に切り替えます。

  • 最小限のダウンタイム
    • 新しいバージョンを別環境にデプロイしてからトラフィックを切り替えるため、ダウンタイムが最小限に抑えられます。
  • リスクの低減
    • 問題が発生した場合、トラフィックをすぐに元の環境(Blue環境)に戻すことができるため、リスクを低減できます。
  • スムーズなロールバック
    • 新環境に問題があった場合でも、すぐに元の環境に戻すことができます。
  • コストの増加
    • 新しい環境を用意するため追加のリソースが必要になります。
  • 複雑な管理
    • 2つの環境を管理する必要があり、設定や運用が複雑になる場合があります。

ハンズオン

GitHubリポジトリにホストされたHTMLソースを、EC2インスタンスへデプロイします。

前提条件

  • AWSアカウントを所持していること
  • GitHubのアカウント登録が完了していること
  • Gitがインストールされていること
    • GitHubにサンプルアプリをプッシュするために必要です。

構築手順

STEP
AppSpec & サンプルアプリの準備

以下のファイル構成をGitHubのリポジトリに配置します。

sample-app/
├── appspec.yaml
├── scripts/
│   └── deploy.sh
└── index.html
  • appspec.yaml
    • CodeDeployのデプロイ設定ファイルで、「ファイルのコピー先」と「デプロイの各ステージで実行するスクリプト」を指定します。
version: 0.0
os: linux
files:
  - source: /index.html
    destination: /var/www/html/index.html
hooks:
  AfterInstall:
    - location: scripts/deploy.sh
      timeout: 300
      runas: root
  • scripts/deploy.sh
    • デプロイ後に実行したい任意のコマンドを追加できます。例えば、Webサーバーの再起動などです。
#!/bin/bash
echo "Deploy script executed."
# You can add commands to configure or restart services if needed
  • index.html
    • ウェブサイトのコンテンツを定義するHTMLファイルで、デプロイ先のウェブサーバーで表示されるページの内容を含みます。
<!DOCTYPE html>
<html>
<head>
  <title>My Sample App</title>
</head>
<body>
  <h1>Hello, AWS CodeDeploy!</h1>
</body>
</html>
STEP
IAMロールの作成

CodeDeployとEC2ににアタッチするIAMロールを作成します。

  1. CodeDeploy用のIAMロール
    • IAMのコンソール画面に遷移し、左側のメニューから「ロール」を選択します。
    • 「ロールを作成」を選択し、以下設定のIAMロールを作成します。
ステップ項目設定値
信頼されたエンティティを選択信頼されたエンティティタイプAWSサービス
サービスまたはユースケースCodeBuild
許可を追加許可ポリシーAWSCodeDeployRole
名前、確認、および作成ロール名任意の名前
  1. EC2用のIAMロール
    • 「ロールを作成」を選択し、以下設定のIAMロールを作成します。
ステップ項目設定値
信頼されたエンティティを選択信頼されたエンティティタイプAWSサービス
サービスまたはユースケースEC2
許可を追加許可ポリシーAmazonS3FullAccess
名前、確認、および作成ロール名任意の名前
STEP
VPCの作成

EC2を配置するVPCを作成します。

  1. VPCのコンソール画面に遷移し、「VPCを作成」を選択します。
  2. 「10.0.0.0/16」のCIDRを持つVPCを作成します。
STEP
パブリックサブネットの作成

EC2を配置するパブリックサブネットを作成します。

  1. サブネットの作成
    • VPCのコンソール画面に遷移し、左側のメニューから「サブネット」を選択します。
    • 「サブネットを作成」を選択し、以下設定のサブネットを作成します。
項目設定値
VPC IDStep1で作成したVPCのID
IPv4 サブネット CIDR ブロック10.0.1.0/24
  1. インターネットゲートウェイの作成
    • 左側のメニューから「インターネットゲートウェイ」を選択します。
    • 「インターネットゲートウェイを作成」を選択し、インターネットゲートウェイを作成します。
    • 「アクション」>「VPCにアタッチ」の順に選択します。
    • Spte1で作成したVPCを選択し、「インターネットゲートウェイのアタッチ」を選択します。
  2. ルートテーブルへのルート追加
    • 左側のメニューから「サブネット」を選択します。
    • 先ほど作成したサブネットを選択し、「ルートテーブル」>「{ルートテーブルのリンク}」を選択します。
    • 該当のルートテーブルを選択し、「ルート」>「ルートを編集」の順に選択します。
    • 「ルートを追加」を選択し、以下のルートを追加します。
項目設定値
送信先0.0.0.0/0
ターゲットインターネットゲートウェイ
※先ほど作成したインターネットゲートウェイを選択します。
STEP
EC2インスタンスの作成

デプロイ先のEC2を作成します。

  1. EC2のコンソール画面に遷移し、「インスタンスを起動」を選択します。
  2. 以下設定のEC2インスタンスを作成します。
カテゴリ項目設定値
名前とタグ名前任意の名前
アプリケーションおよび OS イメージ (Amazon マシンイメージ)AMIAmazon Linux 2023 AMI
※無料利用枠の対象
インスタンスタイプt2.micro
キーペアキーペア名新しいキーペアの作成
ネットワーク設定VPCStep2で作成したVPC
サブネットStep3で作成したサブネット
パブリックIPの自動割り当て有効化
ファイアウォールセキュリティグループを作成
セキュリティグループ名任意の名前
タイプssh
ソースタイプ自分のIP
STEP
CodeDeploy エージェントのインストール

Step4で作成したEC2に対して、CodeDeployエージェントをインストールします。

  1. Step4で作成したEC2にSSH接続します。
  2. 以下のインストールコマンドを実行します。
sudo yum update
sudo yum install ruby
sudo yum install wget
  1. ホームディレクトリに移動します。
cd /home/ec2-user
  1. CodeDeploy エージェントインストーラをダウンロードします。
wget https://aws-codedeploy-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/latest/install

上記は東京リージョンのS3バケットからダウンロードするコマンドです。
それ以外のリージョンのS3バケットからダウンロードしたい場合は、「リージョン別リソースキットバケット名」を参照して、上記コードの「バケット名」と「リージョン識別子」を更新してください。

  1. install ファイルに実行権限を設定し、エージェントの最新バージョンをインストールします。
chmod +x ./install
sudo ./install auto
  1. サービスの実行状況を確認します。
systemctl status codedeploy-agent

以下のようなメッセージが表示されていれば、サービスが実行されています。
>「 Active: active (running) since xxx; yyy ago」

STEP
CodeDeployの設定
  1. CodeDeployアプリケーションの作成
    • CodeDeployのコンソール画面に遷移し、左側のメニューから「アプリケーション」を選択します。
    • 「アプリケーションの作成」を選択し、以下設定のアプリケーションを作成します。
項目設定値
名前任意の名前
コンピューティングプラットフォームEC2/オンプレミス
※今回はデプロイ先をEC2とするためです。
  1. CodeDeployデプロイメントグループの作成
    • 作成したアプリケーションを選択し、「デプロイグループの作成」を選択します。
    • 以下設定のデプロイグループを作成します。
項目設定値
デプロイグループ名任意の名前
サービスロールStep1で作成したIAMロール(CodeDeploy用)のARN
デプロイタイプインプレース
※今回はあくまでハンズオンのため、コストが安く済む法を選択します。
環境設定Amazon EC2 インスタンス
キー:Name
値:作成したEC2
AWS CodeDeploy エージェントのインストールなし
※Step5でインストール済みのため。
デプロイ設定CodeDeployDefault.AllAtOnce
※一度にすべてのインスタンスに対してデプロイします。
Load balancer無効
STEP
デプロイ

EC2にGitHubに格納してあるアプリケーションをデプロイします。

  1. Step7で作成したアプリケーションを選択して、「アプリケーションをデプロイする」を選択します。
  2. 以下設定でデプロイメントを作成します。
項目設定値
デプロイグループStep7で作成したデプロイグループ
リビジョンタイプアプリケーションはGitHubに格納されています
GitHub トークン名
リポジトリ名Step1でサンプルアプリを格納したリポジトリ
コミットIDStep1でサンプルアプリを格納したコミットID
  1. 処理が成功していることを確認します。

おわりに

本記事では、AWS CodeDeployの基本概念とその使用方法について解説しました。

CodeDeployを活用することで、アプリケーションのデプロイメントプロセスを自動化し、一貫性を保ちながら迅速に展開できます。
特に、複数のインスタンスやリージョンにわたるデプロイを簡単に管理できるため、スケーラブルで信頼性の高いデプロイメントが実現可能です。

クラウドアプリケーションの開発と運用において、CodeDeployは非常に重要なツールです。
本記事を参考に、プロジェクトに最適なデプロイ戦略を考え、運用の効率化を図ってみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次