CodeDeployを使ってEC2へデプロイする方法【GitHub】

  • 2021-10-08
  • AWS
アイキャッチ画像
  • CodeDeployを使ってEC2へデプロイする方法とは?
  • GitHubのソースコードをEC2へデプロイするには?

本記事ではこのような疑問を解決します。


さまざまなサーバーへのデプロイを自動化できるツールとしてAWSのCodeDeployがあります。

特にEC2へのデプロイでは同じAWSのサービスであるCodeDeployが相性バッチリです。


そこで今回はGitHubからCodeDeployを使ってEC2へデプロイする方法を解説していきます。

GitHub・CodeDeploy・EC2を使ったデプロイの全体像

最初に本記事で扱うデプロイの全体像を確認します。

①EC2インスタンス・CodeDeployにIAMロールを設定する


②デプロイしたいフォルダの中にappspec.ymlファイルを用意する


③EC2インスタンスにCodeDeployAgentをインストールする


④CodeDeploy画面でアプリケーション作成・デプロイの操作を進める

なお、CodeDeployではEC2へデプロイするソースコードを、Amazon S3またはGitHubに用意します。

今回はGitHubを使ったやり方を採用します。

①EC2インスタンス・CodeDeployにIAMロールを設定する

まずはEC2インスタンス・CodeDeployにIAMロールを設定します。

ロールとはAWS特有のものなのですが、
ここでは「EC2とCodeDeployが相互にアクセスできるようにするためのもの」と理解しておけばOKです。


それではIAMのロール画面を開きましょう。

画面右上の「ロールを作成」ボタンをクリックします。

IAMロール画面

こちらからEC2インスタンス用とCodeDeploy用の2つのIAMロールを作成していきます。


まずはEC2インスタンス用から。

IAMロール作成(EC2→codedeploy用)①
IAMロール作成(EC2→codedeploy用)②
IAMロール作成(タグ追加)
IAMロール作成(EC2→codedeploy用)③

EC2インスタンス用IAMロールが作成できたら、そのロールをEC2インスタンスへ割り当てます。


割り当てるEC2インスタンスを選択して以下のように進めます。

IAMロールアタッチ(ec2→codedeploy用)①
IAMロールアタッチ(ec2→codedeploy用)②

これでEC2インスタンス用のIAMロールの設定は完了です。


次にCodeDeploy用のIAMロールを設定します。

IAMロール作成(codedeploy用)①
IAMロール作成(codedeploy用)②
IAMロール作成(codedeploy用)③
IAMロール作成(codedeploy用)④

これでCodeDeploy用のIAMロールが作成できました。

なお、CodeDeploy用のIAMロールの割り当てはCodeDeploy画面の操作で行うのでここでは行いません。

②デプロイしたいフォルダの中にappspec.ymlファイルを用意する

次にデプロイしたいフォルダ(リポジトリ)の直下にappspec.ymlというファイルを用意します。

appspec.ymlはCodeDeployで実行するデプロイ処理が記述されたファイルです。

appspec.ymlには、例えばデプロイ先のパスやデプロイ中に実行するスクリプトなどが記述されます。


appspec.ymlの書き方についてはAWS公式ドキュメントで説明されていますが、
最低限以下の記述がなされていれば問題なくデプロイできます。

version: 0.0
os: linux
files:
  - source: /
    destination: /var/app

os:→デプロイ先のosを指定。
files:-source:→デプロイするファイルを指定。すべてのファイルをデプロイするなら”/”でOK。
files:-destination:→デプロイ先のディレクトリを指定。存在しないディレクトリは自動で生成される。

③EC2インスタンスにCodeDeployAgentをインストールする

次にEC2インスタンスにCodeDeployAgentをインストールします。

CodeDeployAgentとはCodeDeployを使ってEC2へデプロイするために必要なソフトウェアのことです。

CodeDeployAgentのインストールはコマンドで行うため、EC2内のCLIやターミナルからのSSH接続などを利用する必要があります。


インストールについてはAWS公式ドキュメントにも記載されていますが、
以下のコマンドを実行していけばOKです。

$ 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
※東京リージョンの場合

$ chmod +x ./install

$ sudo ./install auto

また、インストールがちゃんとできたかの確認とCodeDeployAgentの起動などは以下のコマンドで行います。

$ sudo service codedeploy-agent status
CodeDeployAgentの状態を確認

$ sudo service codedeploy-agent start
CodeDeployAgentを起動

※①ロールのアタッチや②appspec.ymlの更新を再度した場合はCodeDeployAgentの再起動が必要になります。
→再起動をしていなくてデプロイが全然できなかったという体験談より。。。

④CodeDeploy画面でアプリケーション作成・デプロイの操作を進める

ここまででCodeDeployを使うための準備が整いました。

それではCodeDeploy画面で操作を行なっていきましょう。


まずはアプリケーションを作成をします。

以下の画像に沿って作業を進めましょう。

codedeploy画面①
codedeploy画面②

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

こちらも以下の画像に沿って作業を進めましょう。

codedeploy画面③
codedeploy画面④
codedeploy画面⑤
codedeploy画面⑥
codedeploy画面⑦
codedeploy画面⑧

最後にデプロイの作成を行います。

codedeploy画面⑨
codedeploy画面⑩
codedeploy画面11

デプロイができない時にやるべきこと

・CodeDeployAgentを再起動する


・appspec.ymlの場所を確認する(リポジトリ直下のディレクトリ)


・appspec.ymlの書式が適切か確認する(hooks部分は考えなくて良い)


・IAMロールがEC2インスタンスとCodeDeployそれぞれに設定されているか確認する

まとめ

以上がGitHubからCodeDeployを使ってEC2へデプロイする方法になります。

簡単にまとめると、以下の通りです。

①IAMロールを設定する


②appspec.ymlを用意する


③CodeDeployAgentをインストールして起動する


④CodeDeploy画面でデプロイ操作をする

なお、①~③についてはどの順番でやってもらっても構いません。


もしも思い通りにいかない時は、「デプロイができない時にやるべきこと」の一覧を確認していただければ大抵の場合は上手くいくことでしょう!