はじめての AWS CodeDeploy (プラス Auto Scaling)

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、菅野です。

突然ですが、Auto Scalingって便利ですよね。
昔 Auto Scaling を使っていた時の話ですが、PHPのプログラムを変更する度に AMI を作り、Launch Configurations を作り直して・・・といった作業をしていました(所要時間20分くらい)。
昔の話なのでもういいのですが、AWS CodeDeployを使えばそんな苦労は不要らしいという事を知り今回初めて使ってみることにしました。

今回の目標

  • AutoScaling により作成されたEC2インスタンスへブラウザでアクセスした時に表示されるwebページを AWS CodeDeploy を使って更新する
  • webページの管理に GitHub を使う

では早速始めましょう!

EC2 の準備

インスタンスを作成します。
作成時にタグを一つ追加しておいてください。(apl-name:test-apl)
起動したら以下のコマンドで最低限必要なものと codedeploy-agent をインストールしておきます。

sudo yum install httpd
sudo service httpd start
wget https://aws-codedeploy-ap-northeast-1.s3.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto
sudo service codedeploy-agent start

AWS CodeDeploy の準備

AWS CodeDeploy で使う IAMロールを用意する

  • ロール名(任意の名前)
  • ロールタイプ(AWS CodeDeploy)
  • アタッチするポリシー(AWSCodeDeployRole)

ソース管理用 GitHub の準備

  • GitHub で新しいリポジトリを作成
  • ローカルにclone
  • appspec.ymlファイルを以下の内容で作成
    version: 0.0
    os: linux
    files:
      - source: src/
        destination: /var/www/html/
    

  • src/index.htmlを以下の内容で作成
    <!DOCTYPE html>
    <html>
    <head>
    <title>テストページ</title>
    <meta charset="UTF-8">
    </head>
    <body>
    テストページ Ver.1
    </body>
    </html>
    

  • commit と push

アプリケーションの作成

AWS CodeDeploy サービスのページへ行くと表示されるページに「今すぐ始める」ボタンがありますのでクリックしましょう。
次の画面では「カスタムデプロイ」を選択し「ウォークスルーのスキップ」ボタンをクリックします。
スクリーンショット 2016-07-06 23.15.56

「アプリケーションの作成」ページでは以下の情報を入力します

  • アプリケーション名(任意の名前)
  • デプロイグループ名(任意の名前)
  • インスタンスの指定(apl-name:test-apl というタグが付いているインスタンスにデプロイするように設定します)
  • サービスロール(先ほど作成したロールを割り当てます)

スクリーンショット 2016-07-06 23.31.32
入力が終わったら「アプリケーションの作成」ボタンをクリックします

デプロイの設定

先ほど作成した時に入力した「デプロイグループ名」がリストに表示されているのでそれをを選択し「アクション」-「新しいリビジョンのデプロイ」をクリックします。
スクリーンショット 2016-07-07 0.35.55

「新しいデプロイの作成」というページが表示されるので、この画像のように入力します。
スクリーンショット 2016-07-07 0.31.31

ここで「アプリケーションは GitHub に格納されています」を選択すると「GitHubに接続」ボタンが表示されるのでクリックするとGitHubのページが表示されますのでオレンジのボタンをクリックしてください
「今すぐデプロイ」ボタンをクリックするとデプロイが実行されます。
スクリーンショット 2016-07-07 1.22.04
では、EC2インスタンスで確認しましょう。

$ ls /var/www/html
index.html

ファイルが保存されていますのでデプロイ成功です。

Auto Scaling の準備

作業の流れは以下のようになります。

  • AMI を作成する
  • Launch Configurations を作成する
  • Auto Scaling グループを作成する(apl-name:test-apl タグが自動で付与されるようにする)

Auto Scaling + AWS CodeDeploy を試す

ここまで準備してきましたが、やっと本番です。

確認に必要な準備

まず、htmlファイルに埋まっているバージョンの文字列の数字を1から2に変えてGitHubにコミットします。
最初に作成したEC2インスタンスに対して最新のリビジョンを AWS CodeDeploy でデプロイして成功させておきます。
また、デプロイグループの「インスタンスの追加」で先ほど作成した Auto Scaling グループを追加します。

Auto Scaling を動かして確認する

現在の状況を整理すると以下となります。

  • リポジトリ内の最新のhtmlファイルの中は「Ver.2」になっている
  • Auto Scaling で起動する時に使うAMI に保存されているhtmlファイルは「Ver.1」になっている

Auto Scaling により起動したEC2インスタンスに対して自動で AWS CodeDeploy が実行されれば「Ver.2」になるはずです。
では、Auto Scaling グループの設定で希望インスタンス数を1に変更し、インスタンスを起動し確認してみましょう。

$ cat index.html
<!DOCTYPE html>
<html>
<head>
<title>テストページ</title>
<meta charset="UTF-8">
</head>
<body>
テストページ Ver.2
</body>
</html>

自動で最新バージョンに更新されている事がブラウザでも確認できました。 スクリーンショット 2016-07-07 3.07.15

最後に

いかがでしたでしょうか。
終わってみれば、GitHubの準備が一番大変だったのではないかと思うくらい AWS CodeDeploy と Auto Scaling の連携はあっさりとうまくいきました。
AWS CodeDeployは様々な場面で活用できると思いますので、まだ使った事が無い方は是非お試しください。

参考ページ

これらのページを参考にさせていただきました。
ありがとうございました。
AWS CodeDeployでAuto Scaling Lifecycleを手軽に利用する
Install or Reinstall the AWS CodeDeploy Agent
GitHubリポジトリと連携してAWS CodeDeployを使う(デプロイ編)
EC2デプロイのためにCodeDeployを導入する