はじめに
こんにちは!
CloudFormationが大好き!BFT名古屋支店・インフラ女子(?)のやまぐちです。
どこかのタイミングでCloudFormationを触ってやろうと機会をうかがっていたのですが 思いもよらぬ場面でやってきました。
今回はCloudWatch Alarmを使わずにCloudFormationを使って一瞬で請求アラートを作成する、ということをやっていきたいと思います。
CloudFormationで三段階のアラート設定にしてみた
当初調べた際にアラームを一つ一つ作成するしかないと知り、それは面倒だということで諦めていましたが、CloudFormationで作成すれば上限値やしきい値も柔軟に変更できそうなので設定することにしました。
実行するYAML
公式サイトなどを参考に作成したYAMLです(作成の様子は「CloudFormationのお話(おまけ)」で説明しています)
設定する金額、しきい値のパーセント(3つ)、送信先のメールアドレスはパラメータとしてCloudFormationを実行する際に指定します。
------ Description: "Set & Update Budget Alarts" Parameters: Ammount: Type: String Default: 100 Description: Budget Limit Amount MailAddress1: Type: String Description: Notification Email Address 1 ThreshouldHigh: Type: Number Default: 150 MinValue: 50 MaxValue: 200 Description: 50-200 % of budgeted amount(High) ThreshouldMid: Type: Number Default: 100 MinValue: 50 MaxValue: 200 Description: 50-200 % of budgeted amount(Middle) ThreshouldLow: Type: Number Default: 80 MinValue: 5 MaxValue: 200 Description: 50-200 % of budgeted amount(Low) Resources: BudgetAlarts: Type: "AWS::Budgets::Budget" Properties: Budget: BudgetLimit: Amount: !Ref Ammount Unit: USD TimeUnit: MONTHLY BudgetType: COST NotificationsWithSubscribers: - Notification: NotificationType: ACTUAL ComparisonOperator: GREATER_THAN Threshold: !Ref ThreshouldHigh Subscribers: - SubscriptionType: EMAIL Address: !Ref MailAddress1 - Notification: NotificationType: ACTUAL ComparisonOperator: GREATER_THAN Threshold: !Ref ThreshouldMid Subscribers: - SubscriptionType: EMAIL Address: !Ref MailAddress1 - Notification: NotificationType: ACTUAL ComparisonOperator: GREATER_THAN Threshold: !Ref ThreshouldLow Subscribers: - SubscriptionType: EMAIL Address: !Ref MailAddress1
早速やってみた
作成したYAMLで実行できるのか検証もしたいので、「デザイナーでテンプレートを作成」を利用します。
下の[ テンプレート ] タブを開いて貼り付け、左上のチェックアイコンを押します。
構文や使用しているパラメータに問題がなければ画面上の中央に「テンプレートは有効です」と表示されます。もし問題があれば、画面右下のメッセージ部分にエラーメッセージが表示されます。
作成を進めます。Parametersで設定しているので、実行時にパラメータを変更することができます。
CloudFormationの、この作成中が私は好きです。どきどき。わくわく。
しばらくすると問題なく完了しました。
設定時に既に超過している場合はメールが飛んできます。
テストでは自分だけのアドレスにしていたので3通飛んできていました。
CloudFormationのお話(おまけ)
CloudFormationはJsonやYAMLを実行することでAWSリソースを作成する自動化ツールです。CloudFormationを利用すると自動的にS3にテンプレートが保存されます(逆にS3に置いてそれを利用することも可)。
パラメータで設定するとCloudFormation実行時に固有値を指定することができるので、汎用性を持たせて使いまわしがききます。また、CloudFormationで作成したリソース名などは変数に格納できるので、他のリソースを作成する時にはその変数で呼び出しできます(そのためにはエクスポートする必要があります)。
それって自動化する必要ある?
自動化につきものですが、自動化する価値があるかどうかは最初に考えなければいけません。なぜなら自動化するにはそれなりに工数が発生するからです。しかも書いたものを理解できる人しか変更できないのでAnsibleではせっかく作ったPlaybookが使い捨てになることもしばしば。
- 同じ構成、異なるパラメータなどで頻繁に作業が発生する場合
- IAMユーザの作成などがイメージしやすい
- 更新作業が発生する、ヒューマンエラーを回避したい場合
CloudFormationを作る手順
ネットで探すと「こうです」とか「こうしました」はあるのでそれをコピーして使いがちなのですが、きちんと公式サイトから作れると一番自分のやりたいことが実現できるのでオススメです。
やり方はたくさんあると思いますが、私は以下の順で試します。
- 対象のリソースを作成するのにかかる費用を確認(失敗した時のリスクを見る)
- AWSの公式のユーザガイドから項目や必須パラメータなどを確認
- 例をコピーしてそこから加工する
- 実際に動かしてみる
ここでは2番目「AWSの公式のユーザガイドから項目や必須パラメータなどを確認」にフォーカスして記載していきます。
例えばこの費用アラートを作成する場合、まずはCloudFormationの公式ユーザガイドのところでそもそもBudgetsサービスが対応しているのかを確認することから始めます。
「cloudformation aws budgets」などで検索すると「AWS::Budgets::Budget - AWS CloudFormation」というサイトがHitします。これで作れそうだなーと希望が見えてきます。あとは中のパラメータを確認していきます。
このように細かいパラメータまで書いていない場合は、形式が別途記載してあるのでそのリンクに進みます。「BudgetData」を見ると、その下にどんなパラメータを設定できるのかがわかります。
例えばこのBudgetLimitというパラメータに何をどう書くべきかは下にスクロールすると出てきます。トータルの費用や使用率などなどが設定できて、「Spend」という書き方をするそうです。
次に「Spend」が何をどう書くのかを見るためにリンクをクリックします。
ここでようやくどう書くのかがわかります。AmountというパラメータではTypeにDoubleとありますがこれは「倍精度浮動小数点数型」だそうで、例を見るとUSDとして100と設定しているので数値を入れればいいということがわかります。UnitはUSDかGBですね。使用した分のお金にするかS3などでの使用量を設定できるようです。
あとここで重要なのがRequiredにYesと記載されている部分です。この部分は必須ということですね。
そうして一通りパラメータに目を通し、何を設定したいのかを整理します。それから例を見るとかなり理解が早くなります。
多少英語は読まないといけないですが、一つ一つ見ていけばちゃんと作れるのもCloudFormationのいいところです。
終わりに
YAMLさえできていればリソースの作成は5分もかかりません。やっぱりCloudFormationは最高です。
ここまで読んでいただきありがとうございました~^ ^