ひよっこエンジニアの雑多な日記

なんとかWeb系のエンジニアをやっています。

AWS CodeDeployを使ってGitHubにあげているリポジトリをデプロイする

AWS CodeDeployを使ってみたら思いの外、簡単に設定できてデプロイができたので覚書きです!
そういえばAWSには結構お世話になってるけど記事を書くのは初めてという事実…

CodeDeployとは

AWS CodeDeployは読んで字のごとくEC2インスタンスなどにコードをデプロイしてくれるサービスです。

aws.amazon.com

デプロイ対象のEC2にエージェントをインストールする

CodeDeployを利用するためにはCodeDeployのエージェントをEC2インスタンスにインストールしておく必要があります。
エージェントのインストールにはaws-cliでS3からエージェントをダウンロードする必要があるのでEC2にS3のread権限のロールを設定してあげる必要があります。

EC2にロールを設定する

まずはIAMにアクセスします。
https://console.aws.amazon.com/iam

ロール>新しいロールの作成でロールの作成を行う。

作成するロールは以下

ロールタイプ ポリシー
Amazon EC2 AmazonS3ReadOnlyAccess

作成したロールをデプロイ対象のEC2に設定します。

CodeDeployのエージェントをインストールする

EC2にロールを設定後、EC2にSSHログインをします。

以下コマンドを実行していきCodeDeployのエージェントをインストールします。

$ sudo yum install aws-cli
$ aws s3 cp s3://aws-codedeploy-ap-northeast-1/latest/install . --region ap-northeast-1
$ chmod +x ./install
$ sudo ./install auto

エージェントのインストールはこれで完了です!!

デプロイするアプリケーションにappspec.ymlを作成

CodeDeployでどのようにデプロイを実行するかを設定するファイルappspec.ymlをデプロイするアプリケーションのプロジェクトルートに配置します。
今回はAmazonLinuxを想定しています。

version: 0.0
os: linux
files:
  - source: /
    destination: /var/www/application

上記の設定はアプリケーションのファイル全体をEC2の/var/wwwapplication配下にデプロイするという設定を行っています。
設定内容は今回は省略しますが、以下の記事がわかりやすかったです。

dev.classmethod.jp

appspec.ymlを作成したらコミットしてGitHubにプッシュしておきます。
(CodeDeployはGitHubのデフォルトブランチをデプロイするのでプッシュしたブランチがデフォルトブランチではない場合はマージしておきます。)

CodeDeployを使ってデプロイを実行する

いよいよCodeDeployを利用してデプロイしていきます。

CodeDeploy用のロールを作成する

実行する前にCodeDeployのアプリケーションを作成するためにはCodeDeployのロールが必要なので再びIAMのダッシュボードにアクセスします。

作成するロールは以下になります。

ロールタイプ ポリシー
AWS CodeDeploy AWSCodeDeployRole

アプリケーションを作成する

AWSのダッシュボードからCodeDeployにアクセスします。
初めてCodeDeployを利用する際は以下のような画面になるので今すぐ始めるをクリックする。

f:id:kimuraysp:20170824233426p:plain

チュートリアルをやるか問われますが実施しなくても良いのでカスタムデプロイを選択してウォークスルーのスキップをクリックする。

f:id:kimuraysp:20170824233507p:plain

ウォークスルーをスキップするとアプリケーションの作成画面に遷移するので、以下の設定を行う。

項目 設定内容
アプリケーション名 任意
デプロイグループ名 任意
デプロイタイプ インプレースデプロイ
環境設定 Amazon EC2インスタンス > デプロイしたいインスタンス
デプロイ設定 CodeDeployDefault.OneAtATime
サービスロール CodeDeploy用に作成したロール

デプロイを実行する

CodeDeployダッシュボードから先ほど作成したアプリケーションのリンクにアクセスします。
デプロイグループを選択して、新しいリビジョンのデプロイをクリックします。

f:id:kimuraysp:20170824235553p:plain

画面遷移したら以下の設定を行います。

項目 設定内容
リポジトリタイプ アプリケーションはGitHubに格納されています
デプロイメントの説明 任意
GitHubアカウント GitHubの認証を行います
リポジトリ GitHubリポジトリ名(アカウント名/リポジトリ名の形式で)
コミットID デプロイしたいコミットID(省略形のコミットIDではなくフルの方で)

その他の設定は任意で行いデプロイボタンをクリックします。

するとデプロイが開始され指定したEC2へデプロイが実行されます!

最後に

設定する内容はちょいちょいありますが設定さえ行ってしまえば簡単にデプロイを実行することができるようになります!
さらにGitHubの設定をもう少し行うことでデフォルトブランチに変更が加わったのを検知して自動でデプロイを起動するといったことも可能です!(次の記事はそれかこうかな…笑)

いやー、AWSは本当に便利。設定するだけでなんでもできちゃうんじゃないかな。(ただし財力が必要)