CM re:Growth 2014 SAPPRO re:Invent 2014「APP304 – AWS CloudFormation ベストプラクティス」のレポートについて話してきました #cmdevio

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

コカコーラが大好きな梶です。
2014/12/12に、弊社イベントCM re:Growth 2014 SAPPOROを実施し、そこでreinvent 2014のCloudformationのベストプラクティスのレポートをお話をしましたので、本日はそのご紹介をします。

概要

  • CloudFormationとは
  • re:Invent2014 APP304 CloudFormation ベストプラクティスレポート

APP304 CloudFormationベストプラクティスレポート

私は現地に行っておらず、Youtubeで見てSlideshareで内容を確認しました。
40分の内容だったのですが、お話しする持ち時間が20分のため、抜粋しています。
英語苦手&なまりがあって聞き取れず、理解不足があるかもしれません。
解釈に誤りがあったらコメントください。

ポイント

スタックをどう計画するのか?

レイヤーや環境ごとに整理する。この内容は一番印象的でした。
上から下まで構築可能ですしケースバイケースだと思ってますが、大きなシステムになってくると追加や削除が発生するので、どのようにするのかモヤモヤしてました。
あとサービス毎にテンプレート構成を適応するのも紹介されていました。
CM-reGrowth-reInvent-app304-kaji.013

どのようにエラーの無いスタックの作成できるのか?

テンプレートの検証を行う。

CM-reGrowth-reInvent-app304-kaji.018
説明が理解できなかったのですが、以下の内容と認識しました。
awscliを事前インストールして以下のスクリプトでテンプレートファイルを指定して検証してます。

$cat check.sh
#!/bin/sh
FILE=$1
cat $FILE | xargs -0 aws cloudformation validate-template —template-body
$./check.sh <ファイル名>

参考元
awscli(Python版)でCloudFormationテンプレートをValidateする

パラメータタイプが使える

今まで、Parametersはテキスト手入力していたと思います。以下の項目がリスト選択を指定できるようになりました。面倒だと思っていた部分が少し解消されてきていると思います。
keypairは弊社既存ののCloudFormationテンプレートを修正し動作することが確認しました。
その他の部分は弊社テンプレートで適応してもリスト選択動作しましたが、ロールバックしました。さらに深堀した調査が必要と思ってます。
CM-reGrowth-reInvent-app304-kaji.020
スライド上の図で隠れている部分はYoutubeで確認し以下となってました。

  "Parameters": {
    "aVpcId": { 
      "Type": "AWS::EC2::VPC::ID"
    },
    "bSubnetIds": { 
      "Type": "List<AWS::EC2::Subnet::Id>"
    },
    "cSecurityGroups": { 
      "Type": "List<AWS::EC2::SecurityGroup::Id>"
    },
    "dKeyPair": {
      "Type": "AWS::EC2::KeyPair::KeyName"
    },

まとめ

  • CloudFormationテンプレートを作成する際、レイヤーやフェイズ毎に分割する。
  • ValidateやParameterをリストから選択し、エラー無く実行。
  • アップデート行う際は、チェックリストに基づいたレビュー、IAMやStackPolicyなどで保護して実行。

また、ローリングアップデートでのゼロダウンタイム等、知らない使い方がありました。さらに深堀していきたいと思います。

おまけ(資料に記載しなかったところ)

CloudFormationを書くツール

私個人で調べた結果です。(担当者によって異なります。)
現在も、模索中です。

エディタ
Eclipse + AWS Toolkit for Eclipse

経験したはまりどころ

配列(カッコ)にミスがあるとき

  • Eclispeではエラー表示してくれて、「アウトライン」が変な配列になる。*慣れないとスルー
  • Validateでエラー。*けど原因がわからない
  • JSON EDITORでチェックするとわかるときもあります。

動作するけど、意図した構成にならないとき

ManagementConsoleから手で作成するとcfnで指定している項目がちかうことに気づいたりします。以下のブログも大変参考になりました。

【初心者向け】CloudFormationのテンプレート作成で困った時の解決法
https://dev.classmethod.jp/cloud/aws/cfn-mini-tips/
【AWS】CloudFormationの作成ノウハウをまとめた社内向け資料を公開してみる
https://dev.classmethod.jp/cloud/aws/cloudformation-knowhow/

資料