AWS Code Deploy+Code Pipelineで簡単Githubからのデプロイ自動化 その1

前回はEC2上にLaravelアプリケーションのデプロイを手動で行いました。
今回は、このデプロイをAWS Code Deployを利用して自動化してみようと思います!

・・・やってみると、以外にいろいろな設定が必要で苦労したので、ここにちゃんとメモしておこうと思います。案外難しかった、、、

IAMの設定

はじめに、IAMで2つのポリシーの設定が必要です。

1, Code DeployがEC2を操作するためのポリシー

ロールを使用するサービスにCode Deployを指定して、新しいロールを作成します。

できました!

2, EC2がCode Deploy関連リソースにアクセスするためのロール

これらのロールは後で使います。IAMでの作業はいったんおしまい。

EC2の設定

EC2へのCode Deploy Agentのインストール

次はEC2インスタンスに先ほどのEC2RoleforAWSCodeDeployポリシーを付与したロールを割り当てます。

次はEC2のインスタンスにSSHで接続。Code Deploy Agentのインストールを行います。以下のコマンドを打ち込んでいきます。
(以下の手順はAWSの公式マニュアルで紹介されています。 https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/codedeploy-agent-operations-install-linux.html )

sudo yum update
sudo yum install ruby ## Code Deploy Agentを動かすためにRubyがいるようです。
sudo yum install wget  ## 最初から入ってると思うけど一応・・
cd /home/ec2-user
aws s3 cp s3://aws-codedeploy-ap-northeast-1/latest/install . --region ap-northeast-1chmod +x ./install ## S3のインストールキットからCodeDeployAgentをダウンロード
chmod +x ./install
sudo ./install auto

これらを実行した後に、CodeDeployAgentが起動したか確認します。

sudo service codedeploy-agent status

タグとキーの追加

後でCode Deployからデプロイ対象のEC2インスタンスを指定する目的で、目印となるタグとキーを追加しておきます。

Code Deployの設定とリンクしていればなんでもよいです。
(ここでは、タグ:AutoDeploy キー:Trueと設定しました)

アプリケーション側の設定

こちらもAWSの公式マニュアルに沿って進めていきます。https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/application-revisions-appspec-file.html#add-appspec-file-server

AppSpecファイルってなんだ?と思ってマニュアルを読んでみましたが、要はリポジトリとデプロイ先のマッピングなどの情報を記載しておくためのファイルで、これがないとデプロイができないようです。

というわけで、appspecファイルを作成していきます。
これをアプリケーションのソールのルートに配置しておく必要があります。

テンプレートは公式マニュアルのものを使って、以下のようなものを作成しました。hooksは、インストールやアプリ起動後に実行するスクリプトを指定できます。自分はPHP Laravelのプロジェクトをデプロイするため、composerのupdateなどを記述したスクリプトを買いています。

version: 0.0
os: linux 
files:
  - source: /
    destination: /var/www/html/【Laravelプロジェクト名】
hooks:
  AfterInstall:
    - location: /scripts/【スクリプト名】
      timeout: 180

これでアプリ側の設定も完了です。
最後はCode Deploy側でデプロイの設定をしていきます。

Code Deploy側の設定

まず、Code Deployで新規アプリケーションの作成をクリック。

アプリケーションの名前は何でも大丈夫です。

Deploymentグループを作成

次はDeploymentグループを作成します。

デプロイグループ名

これはなんでもよいです。

サービスロール

Code Deployに与えるロールのコードを指定します。
これは、先ほど作成したIAMのCodeDeploy用ロールから取得します。
指定形式がARNとありますが、これはIAMの詳細ページから確認できます。

環境設定

今回はEC2インスタンスにデプロイするので、EC2インスタンスを指定します。
ここで、タグとキーの設定がでてきますが、先ほどEC2側に設定したタグとキーを設定すると、CodeDeploy側で、そのタグが設定されているインスタンスをデプロイ対象とみなします。

以上でグループの設定が完了です。

デプロイの作成

最後にデプロイの実行設定です。

デプロイの作成ボタンをクリックし、ソースコードのリポジトリを指定します。今回はGithub上のコードをデプロイしたいので、Githubとの連携を行っていきます。

Gihubアカウントを入力し、Githubへ接続ボタンを押すと、下のポップアップがでてきます。

Githubリポジトリ名

Githubユーサ名/リポジトリ名 で指定します。

Commit ID

Githubのデプロイ対象とするコミットのバージョンのIDを指定します。
これはgithub上のコミット履歴から確認できます。

これでデプロイ設定が完了です。

作成完了を押すと、デプロイが動き出します。
実はまだこれだけだとデプロイの開始はマニュアルなので、完全自動化に向けては、もう一歩、CI(継続的インテグレーション)の仕組みを作りこむ必要があります。そちらは次回、解説させていただこうと思います。

本日も最後までご覧いただき、ありがとうごさいました!
つづく

この記事を気に入っていただけたらシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。

ABOUT US

Yuu113
初めまして。Yuu113と申します。 兵庫県出身、東京でシステムエンジニアをしております。現在は主にデータ分析、機械学習を活用してビジネスモデリングに取り組んでいます。日々学んだことや経験したことを整理していきたいと思い、ブログを始めました。旅行、カメラ、IT技術、江戸文化が大好きですので、これらについても記事にしていきたいと思っています。