*

手軽にインフラ環境構築の自動化を実現する(したい) 其ノ参 CloudFormationでCodeDeploy設定を自動構築してみる。

   

前々回(手軽にインフラ環境構築の自動化を実現する(したい) 其ノ壱)の続きです。

 

■目次
前提 CloudFormationとは(前々回の記事)
CloudFormationの使い方 「テンプレートJSON」について(前々回の記事)
CloudFormationの使い方 CloudFormationの操作方法(前々回の記事)
CloudFormationでAurora構成を東京リージョンに自動環境構築する(前回の記事)
・CloudFormationでCodeDeploy設定を東京リージョンに自動環境構築する(今回の記事)

 

■CloudFormationでCodeDeploy設定を東京リージョンに自動環境構築する
前回の記事から3ヶ月も開けてしまいましたゴメンナサイ・・・
ラスト、CodeDeployの設定をCloudFormationで構築してみたいと思います。

因みにCodeDeployとは
最近(2015年8月頃だったかな?)やっと東京リージョンで使えるようになったサービスです。
CloudFormationで使えるようになったのはおそらく10月だったと思います。
EC2インスタンスに対して「S3」や「Github」にある最新ソースをDeployしてくれるサービスです。
特徴として
・GithubのPushをHookに利用出来る
・AutoScaling配下でも利用出来る
・AutoScaling配下で利用中に、オートスケールされたインスタンスがあると自動で最後に実行したDeployを新しいインスタンスにも実行してくれる
事だそうです。

コレは使ったらハッピーになれる匂いがするぜ!(安直)

Amazonの説明はコレ

では早速CodeDeployのテンプレート作りましたと言うところから。
CloudFormationのテンプレートJSONはこんな感じになりました。
今回はワケあって2つのテンプレートに分かれています。。。

一つ目

やっぱり長え!!
・・・と、思ってもそっとその感想は心に閉まって下さい。

一つ目のテンプレートは、CodeDeploy用のロールを先ず作成する必要があるので
それを生成するテンプレートになってます。

二つ目は実際にCodeDeploy設定を作るテンプレート

ロールさえ作ってしまえば、ロールを使いまわしているならCodeDeployの設定を増やすのは簡単そうですね(*´v)

ロール生成のテンプレートが何をやっているかを僕が分かってる範囲でちょっと説明します。
CodeDeployを動かすには、CodeDeployが許可されているロールを設定して、それを指定しなければなりません。
そのためのロールが以下の部分になってます。

ロールは別に毎回作る必要は有りません。
厳しくしたいセキュリティの度合いに合わせて増やしたり、使い回せばいい感じみたい。

で、この「CodeDeployTrustRole」に

ら辺で、利用したい機能が使えるようにポリシーを設定している(?)ようです。
今回はオートスケーリングでも自動デプロイして欲しいので、オートスケール周りのポリシーを設定してます。

一つ目のテンプレートの上側半分以上がCodeDeploy用のロール作成用テンプレートだったと言う事です。
では下部分の

この部分はと言うと、CodeDeployされる側である、EC2インスタンス用のロール設定に、なってます。
なので、人によってはこの部分は要らないかも。

やっている事は

S3へのGETアクセス権を、EC2が貰えるロールを作ってます。

さて、では実際に設定して、実行してみましょう。
CodeDeployの設定手順は

・EC2用ロール生成(上の一つ目のテンプレートを使う)
・CodeDeploy用ロール生成(上の一つ目のテンプレートを使う)
・CodeDeploy化に「アプリケーションを作成」する(上の二つ目のテンプレートを使う)
・レッツデプロイ
→ デプロイの途中で、ソースはS3かGithubなのか聞かれる・・・

こんな感じです。

と言う事で一つ目のテンプレートをCloudFormationに流し込んでサクッと2手順進めてみます。

確認画面に行ってー・・・

無事ロールが2つ増えました(*´v)

続いて二つ目のテンプレートでCodeDeployの「アプリケーションを作成」します。

さっき作ったロールを指定しつつ、すでにあるオートスケールグループを指定しています。
コレで、オートスケールが走った際に自動デプロイされるCodeDeployアプリケーションが出来るって事のようだっ!!!

出来たぜヒャッハーっ!!!

CloudFormationのテンプレートはクソ長かったけども、テンプレートさえあれば流すだけなんだから何て簡単なんだ・・・
スバラシイよ、CloudFormation。

・・・さて、記事はココまでw

え?三ヶ月も待たせて出来たとこまでかよっ!実行はっ!?

・・・そんな声が聞こえて来そうなので、ちょっとだけ。
正直ココから先はかなり人によると思いますので、僕の場合

・EC2インスタンスをオートスケールグループの下に作った。その時、一つ目のテンプレートで作ったインスタンスロールを付与してインスタンスを立てた。
※既存のEC2インスタンスに、新たにロールを付与する方法がどうにも見つかりませんでしたので、皆様は気を付けて!

・そのEC2インスタンスにCodeDeployAgentをインストールした。
 → ココらへんを参考にさせて頂きました。m(__)m
 GitHubリポジトリと連携してAWS CodeDeployを使う(準備編

・GithubとCodeDeployを連携してデプロイした。
 → ココらへんを参考にさせて頂きました。m(__)m
 GitHubリポジトリと連携してAWS CodeDeployを使う(デプロイ編)
 GitHubとの連携を行う

以上の道のりの結果現在は・・・

こんな感じでGitpush → オートデプロイが無事に稼働しております。

皆様も、CloudFormationですぐに試せると思うので、是非是非やってみて下さい。m(__)m
なかなか快適です(*´v`)d

最後に、ちょっと余談。
CodeDeployの設定を作ったり消したりしている時の注意点!(僕はものすごーーーーくコレにハマった・・・)
CodeDeployから「アプリケーション」を削除しても、CodeDeploy設定配下のオートスケールグループに実は設定が残ってしまって
それが消えていない!!

そのせいでオートスケールがバグり、ロードバランサのヘルスチェックが何故かずっとOut of Service・・・・
EC2は生きているのに!
そして、ターミネートしてクリエイトして・・・以下ループ(;´Д`)
請求額も気付くの遅くて若干ヤバかった・・・

で、どう回避するんじゃい?と言うことなのだが
オートスケーリンググループには「lifecycle-hook」と言うコマンドでしか一覧すら表示出来ない設定が存在する。
で、CodeDeploy設定にオートスケーリンググループを紐付けすると、この「lifecycle-hook」に「CodeDeploy-〜・・・」と言う設定が追加されるんですね。

なのに、CodeDeploy設定を削除しても、この追加した「lifecycle-hook」を消してってくれない!!
で、CodeDeployが設定が無くなったからってオートスケールにヘルスチェックで返事を返さない!!(ヘルスチェックがタイムアウトします。エラーでは無く!)
なので、オートスケーリンググループはインスタンスに異常が起きたと思うワケ。以下略・・・

・・・話がそれてしまったスミマセン。
はい、EC2からコマンドでサクッと消せますので、CodeDeployの設定を削除した際は
コマンドでオートスケーリンググループから該当の「lifecycle-hook」を消しましょう。

コマンドのリファレンスを見てやりましたとさ・・・
http://docs.aws.amazon.com/cli/latest/reference/autoscaling/delete-lifecycle-hook.html

CodeDeployの設定を変えたりした場合にご注意下さい(;´Д`A

最後まで読んで頂きありがとう御座いましたm(__)m

目次に戻る

Author Profile

saimushiTwitter:@saimushi
「UNICORN-Project」と言うPHPフレームワーク(RubyのUnicronとは無関係)のMain Autherをやってます。
社内でも幾つかの案件で、採用して頂いています。
iOS(Objective-c)、PHPを得意とし、他にもcocos2d-x(C++)が出来たり、AWSをゴニョゴニョしたりと、割りと幅広く業務させて頂いています。

UNICORN-Projectはコミッターを絶賛募集中です!
是非触って見て、感想だけでも下さい。
http://unicorn-project.github.io
  • このエントリーをはてなブックマークに追加


  関連記事

girl-1076998_1920
結局わたしでしょ?♡

Hi!ミシェルさんです 😀   サービスの企画とかUXについての意見て …

打刻漏れ通知
GAS × Chatwork × Spreadsheetの勤怠管理システムを公開してみた

どうも、デジタルクエストのヒヨコエンジニアのyokoです。 今回は、Google …

DigitalQuest
オフィス移転のご報告

本日5/23より、株式会社デジタルクエストは新オフィスにて営業を開始しております …

digitalquest_icon
NAT Gatewayを使って、ELB+AutoScalling下のVPC-EC2のアウトバウンドIPを固定化してみた。

弊社サービスの3bkは外部サービス連携を幾つかしています。 そのうちの一つがアク …

1
Storyboardを使ってContainerView+PageViewのサンプルを作ってみた

概要 横スクロールするメニュー+メニューに連動してメインビューが切り替わる、 S …

digitalquest_icon
SPAJAM2016 東京D予選に出てみた話 – 事前準備編 –

SPAJAM2016 東京D予選に行ってきました。 SPAJAM2016と言うの …

Androidアプリの自動デプロイフロー
Circle CIとDeployGateでAndroidアプリを自動デプロイ

CIの導入に乗り遅れているデジタルクエストでも、いい加減、便利なんだから使おうと …

amazon_icon
【速報】PHP7をAmazon Linuxに早速入れてみて、5.6とのベンチマークを取ってみた。

PHP7が11年ぶりに正式リリースされたそうなので、早速試してみたです速報。 試 …

amazon_icon
AWS re:Inventをまとめておいた

先日行われた AWS re:Invent の内容をカンタンにまとめてみました。 …

digitalquest_icon
UNICORN & PHOENIX の紹介

デジタルクエストで取り組んでいる技術の紹介です。 弊社のエースエンジニア @sa …