AWS

CodeDeployでGitHubのソースをEC2にデプロイするまとめ

AWSが用意してくれているドキュメントがところどころ分かりにくかったのでざっくりとまとめ。コンソールの操作です。

用意するもの

  • EC2インスタンス
  • GitHubにレポジトリ

インスタンスにタグをつける

デプロイ先のEC2インスタンスをタグで管理します。デプロイ実行するときに、ここでつけるタグを指定することでデプロイ先を選択することになります。

EC2コンソールの左メニューから「インスタンス」>「アクション」>「インスタンスの設定」>「タグの追加/編集」
codedeploy1.png

適当にキーと値を設定します。インスタンスを管理しやすい形でWEBサーバーとかAPサーバーとかで設定するのもよし、新機能検証やパフォーマンステストなどの目的別に設定するのもよし。スクショは今回のインスタンスでLINEのAPIをテストしたかったのでPurpose=LineTestなるタグを設定してますが、まあなんでもOK。
codedeploy2.png

ロールを割り当て

IAMコンソールからからAmazonS3ReadOnlyAccessとAWSCodeDeployRoleを追加
codedeploy3.png

AmazonS3ReadOnlyAccess

CodeDeployエージェントをEC2インスタンスにインストールするときS3バケットからパッケージを持ってくるのでこのロールが必要。「AWSサービス」>「EC2」>「EC2」を選んで次のステップをポチ。
スクリーンショット 2018-02-03 10.png

次のページでAmazonS3ReadOnlyAccessを選んで適当にロール名を入れてロールを作成。

AWSCodeDeployRole

CodeDeployの実行ロールを作成。②のところでEC2を選んでもCodeDeployのロールが作成できたんですが、EC2ではデプロイできませんでした。②のところではCodeDeployを選択します。
スクリーンショット 2018-02-04 9.png

次の画面でははそのまま「次のステップ」、その次の画面でロール名をつけてロールを作成。

CodeDeployの設定

CodeDeployエージェントをEC2インスタンスにインストールし、CodeDeployコンソールからデプロイするアプリケーションを作成します。

EC2インスタンスにCodeDeployエージェントをインストール

# この辺はすでにインストールされてるかと思いますが
sudo yum update
sudo yum install ruby
sudo yum install wget

# ディレクトリはどこでもいいとは思いますがドキュメントに沿って
cd /home/ec2-user

# CodeDeployエージェント
wget https://aws-codedeploy-ap-northeast-1.s3.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto

# 実行
sudo service codedeploy-agent start

こちらのドキュメントにはwget https://bucket-name.s3.amazonaws.com/latest/installと書いており、下の方にbucket-nameを該当リージョンに変更するようにとありますので、東京の場合はaws-codedeploy-ap-northeast-1に書き換えます。

appspec.ymlをプッシュ

レポジトリのルート(README.mdと同じディレクトリ)にappspec.ymlという名前のファイルをプッシュします。このファイルの内容に従ってEC2内でデプロイされるようです。中身はこんな感じ。

version: 0.0
os: linux
files:
  - source: /
    destination: /home/ec2-user/go/src/line_test

今回はレポジトリのルートをEC2上の/home/ec2-user/go/src/line_testにデプロイします。
詳しくはClassMethodさんの記事が参考になるかと。

アプリケーションを作成

CodeDeployのコンソールから「アプリケーションの作成」をクリックし作成画面に移動。

FireShot Capture 1 - AWS CodeDeploy_ - https___ap-northeast-1.png
アプリケーション名、デプロイグループ名は適当に。
環境設定のタグのところで前述したタグを設定する。
詳細設定のサービスロールでAWSCodeDeployRoleのロールを選択し「アプリケーションの作成」を押して作成完了。

デプロイ実行

いよいよ最後になります。CodeDeployのメニューから「デプロイ」を選択、デプロイ画面で「デプロイの作成」から作成画面に移ります。

FireShot Capture 2 - AWS CodeDeploy_ - https___ap-northeast-1.png
アプリケーション名とデプロイグループはアプリケーションの作成で設定した名前を選択。
リポジトリタイプはGitHubを選択しGitHubアカウントとレポジトリ名、それからデプロイしたいコミットのハッシュを入力し「デプロイ」をクリック。
これでGitHubからソースのデプロイが完了。

まとめ

この程度ならEC2インスタンスからgit pullすればできちゃいますが、複数のインスタンスを管理するとなるとCodeDeployを使うメリットは大きいです。今回は基本的な設定をまとめてみましたが、デプロイの自動タスク化なんかもできて便利そうです。その辺も今後触ってみて、またまとめておきたいと思います。