AWS CodePipeline(CodeCommit → Codedeploy → EC2へデプロイ)を設定してみた

記事タイトルとURLをコピーする

こんにちは!技術4課のイーゴリです。

この記事では、試しにAWS CodePipelineを使って、CodeCommit → Codedeploy → EC2へデプロイのプロセスを作ってみましたので、ご紹介したいと思います。

構成の説明

CodeCommitにコードをアップロードすると、CloudWatch Eventsがこれを検知して、CodePipelineは定義されたCodeDeployを起動し、EC2へデプロイされます。

前提条件

  • インストール済みのGitクライアント
  • 発行済みのIAMユーザー用のGit 認証情報

IAMユーザー用のGit 認証情報の生成手順

CodeCommitリポジトリを作成する

[CodeCommit] > [リポジトリ] > [リポジトリを作成]をクリックします。

「test-rep」の名前を入れて、[作成]ボタンをクリックします。

CodeCommitリポジトリにサンプルコードを追加する

公式AWSページから下記のSampleAppをダウンロードします。

https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/samples/SampleApp_Linux.zip

ダウンロードされたZIPを解凍したら、下記のフォルダ構成でした。

 /git/test-rep
    └ー SampleApp_Linux
        │ー appspec.yml
        │ー index.html
        │ー LICENSE.txt
        └ー scripts
            │ー install_dependencies
            │ー start_server
            └ー stop_server

Gitコマンドで上記のファイルをアップロードします。

注意点:ステップ1とステップ2は省きますので、前提条件をご参考ください。

まずは下記の画像の通り、レポジトリーを自分の端末にクローンします。

% git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/test-rep
 Cloning into 'test-rep'...
 warning: You appear to have cloned an empty repository.

上記のコマンドでクローンされたら、下記のコマンドでCodeCommitにアップロードします。

コマンド:

% cd test-rep
% git add .
% git commit -m "first commit"

出力結果:

  7 files changed, 266 insertions(+)
  create mode 100644 .DS_Store
  create mode 100644 LICENSE.txt
  create mode 100644 appspec.yml
  create mode 100644 index.html
  create mode 100644 scripts/install_dependencies
  create mode 100644 scripts/start_server
  create mode 100644 scripts/stop_server

コマンド:

% git push

出力結果:

 Enumerating objects: 10, done.
 Counting objects: 100% (10/10), done.
 Delta compression using up to 8 threads
 Compressing objects: 100% (8/8), done.
 Writing objects: 100% (10/10), 5.42 KiB | 5.42 MiB/s, done.
 Total 10 (delta 0), reused 0 (delta 0), pack-reused 0
 To https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/test-rep
  * [new branch]      master -> master

結果確認:

「appspec.yml」はインスタンスへのデプロイ内容となります。「appspec.yml」の内容を理解したい場合、下記のURLをご参考ください。

docs.aws.amazon.com

CodeDeployエージェントのインストール

事前準備(IAMロール作成)

  • 「EC2InstanceDeployRole」というポリシーを追加し、IAMロールを作成します。
  • IAMロールを対象のEC2に付与します。
  • 自動割り当てパブリックIPを有効にします。

エージェントのインストール

エージェントをインストールするには下記のURLの手順を使います。

docs.aws.amazon.com

対象EC2に入って、下記のコマンドを実行します。

$ sudo yum update
$ sudo yum install ruby
$ sudo yum install wget
$ cd /home/ec2-user
$ wget https://aws-codedeploy-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/latest/install
$ sudo chmod +x ./install
$ sudo ./install auto

注意点: 上記のwgetコマンドは東京リージョン向けのコマンドでしたが、東京リージョン以外の場合、 下記のコマンドをご参考ください。

wget https://bucket-name.s3.region-identifier.amazonaws.com/latest/install

<bucket-name>及び<region-identifier>はこちらに記載してありますので、ご参考ください。

ちなみに、EC2を作成する時に「ユーザーデータ」に上記のコマンドを入れると、便利です。

Codedeployでアプリケーションを作成

CodeDeployのIAMロール作成

アプリケーションの作成

[AWS]>[CodeDeploy]>[デプロイ]>[アプリケーションの作成]をクリックします。

アプリケーション名を入力し、[コンピューティングプラットフォーム]を選択します。

今回は[EC2/オンプレミス]を選択し、[アプリケーションの作成]をクリックします。

デプロイグループの作成

次はデプロイグループを作成します。

デプロイグループ名を入力し、上記に作成したCodeDeployのIAMロールを選択します。

今回はAutoscaling グループを使わないので、Amazon EC2インスタンスのところに、チェックを入れます。 今回はインスタンスの[Name]タグをトリガーとして設定しますので、単純にインスタンスのNameタグ名キーと値を入力しますが、Codedeploy用の専用タグを作ったほうがいいと思いました。

下記の画面でデフォルトのまま、設定を残しました。

今回の記事では、ELBを使わないため、チェックを外します。

[デプロイグループの作成]をクリックします。

CodePipelineでパイプラインを作成する

[AWS]>[CodeDeploy]>[パイプライン]>[パイプラインの作成]をクリックします。

パイプライン名を入力し、サービスロール(今回はロールがないため、「新しいサービスロール」)を選択します。

[ソースプロバイダー]で「AWS CodeCommit」を選択します。

[レポジトリ名]を選択します。

[ブランチ名]を選択します。

他の設定をデフォルトのまま、残し、[次に]をクリックします。

[ビルドステージをスキップする]をクリックします。Java、C#などのコンパイラ言語だと、こちらのステップでビルドが行われていますが、PHPなどのスクリプト言語の場合、ビルドのステップをスキップします。

CodeBuildのステップ

次の画面で[スキップ]ボタンをクリックします。

デプロイステージの[デプロイプロバイダー]で[AWS CodeDeploy]を選択します。

対象のアプリケーション名を選択します。

対象のデプロイグループを選択します。

[次に]をクリックします。

[パイプラインを作成する]をクリックします。

進行画面:

CodeCommitのステップが成功しました。

CodeDeployのステップが成功しました。

無事にパイプラインが完了しましたので、EC2の内容を確認しましょう!

確認しましたところ、「index.html」のファイルはEC2の「/var/www/html/」の配下に配置されていますが、パイプラインを実行する前は「/var/www/」のディレクトリはありませんでした。

Pipelineの実行前

Pipelineの実行後

ブラウザでEC2のPublic IPにアクセスしますと、下記のWebページが表示されます。

Public IPをコピー

Background colorを青から黒に変更し、CodeCommitにプッシュします。

% cd test-rep
% git add .
% git commit -m "second commit"
% git push

ちなみに、CodeCommitの[コミット]をクリックし、対象コミットを選択しますと、どのような変更設定があったか確認できます。

CodeCommitに新規Indexファイルをプッシュした時点で、自動的にパイプラインが実施されました。

どのGitソースからPipelineが展開されたか、確認できます。

もう一度、URLにアクセスしましたら、下記の画面が表示されましたので、成功しました!

次の記事では、Auto Scaling+ALB の組み合わせを作成します。

blog.serverworks.co.jp

以上、御一読ありがとうございました。

本田 イーゴリ (記事一覧)

クロスインダストリー第2本部 インフラ技術課

・2024 Japan AWS Top Engineers (Security)
・AWS SAP, DOP, SCS, DBS, SAA, DVA, COA, CLF, ANS, AIF, MLS, MLA, DEA
・Azure AZ-900
・EC-Council CCSE

趣味:日本国内旅行(47都道府県制覇)・ドライブ・音楽