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

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

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

カスタマーサクセス部

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

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