CloudFormation StackSetsで組織内のアカウントに予算設定をする

こんにちは、クラウドソリューション事業部の本田です。
今日は、CloudFormation StackSetsを使った内容でブログを書こうと思います。弊社では、社員全員にAWSアカウントが発行されており、検証などを自由に行うことができます。またAWS Organizationsを使って、請求の一括化などの管理を行なっています。
自由に使えると言っても、リソースの消し忘れやLambdaの無限ループによるいわゆるクラウド破産の恐れも全くないわけではなく、予算をアカウント毎で設定して予算に達するとSlackなどに通知して、監視できるといいなとなりました。

CloudFormation StackSetsとは

予算設定はAWS Budgetsを作成しますが、全社員分設定していくのは面倒ですし、アカウント毎で設定が異なったりしてしまう可能性もあります。そこでCloudFormaiotn StackSetsを使うことで、管理者アカウントから複数のアカウントに対して、スタックの作成、更新、削除が行えるので、そちらのサービスを使って設定を行いたいと思います。

用意するもの

1.Slack
今回は予算に達した際の通知をSlackに行います。指定したチャンネル宛のメールアドレスを通知先にすることで、Slackで通知を受け取るようにします。

2.CloudFormationテンプレート
AWS Budgetで予算を作成するテンプレートを用意します。今回は以下のようなテンプレートを用意しています。

Description: "Basic Budget test"
 Resources:
   Budget:
     Type: "AWS::Budgets::Budget"
     Properties:
       Budget:
         BudgetLimit:
           Amount: 10
           Unit: USD
         BudgetName: limit10 
         TimeUnit: MONTHLY
         TimePeriod:
           Start: 1640962800
           End: 1926864800
         BudgetType: COST
       NotificationsWithSubscribers:
         - Notification:
             NotificationType: ACTUAL
             ComparisonOperator: GREATER_THAN
             Threshold: 100
           Subscribers:
           - SubscriptionType: EMAIL
             Address: 取得したアドレスを記入
 Outputs:
   BudgetId:
     Value: !Ref Budget

月の利用料金が$10に達した時に、通知が飛ぶようになっています。Thresholdの値を変更することで、予算の70,80%達した際に通知なども行えます。

Cloudformation StackSetsの有効化

AWS Organizationsの管理アカウントにログインし、AWS Organizationsのサービスにて、CloudFormation StackSetsを有効化します。

StackSetの作成

有効化できれば、CloudFormation StackSetsのメニューからStackSetの作成を行います。

StackSetsの設定

今回以下のような設定を行いました。
■テンプレートの選択
・アクセス許可:サービスマネージドアクセス許可
 AWS Oraganizationsで管理しているアカウントにデプロイするので、こちらにチェックを入れます。
・テンプレートの準備:テンプレートの準備完了
 上記のテンプレートを利用します。

■StackSet の詳細を指定
・StackSet名:任意の名前を入れます

■StackSet オプションの設定
・実行設定:非アクティブ
 予算を作成する1つのオペレーションを実行しますので、非アクティブにしています。

■デプロイオプションの設定
・スタックセットにスタックを追加:新しいスタックのデプロイ
・デプロイターゲット:組織単位(OU)へのデプロイ
 ターゲットにするAWS OU IDを入力します。AWS Organizationsの画面にてOU IDは確認できます。
・自動デプロイ:有効
 今後作成するアカウントにもデプロイされるようにしたいので、有効にします。
・アカウント削除の動作:スタックを削除
・リージョンの指定:任意のリージョンを指定

レビュー後、問題なければ送信をクリックとデプロイが始まります。

動作確認(StackSets)

送信後にStackSets > 作成したスタック > オペレーションにて進捗状況を確認できます。

ステータスが、SUCCEEDになっているので、正常に完了した模様です。
送信後にStackSets > 作成したスタック > スタックインスタンスからは、個々のスタックの状況が確認できます。

詳細な進捗状況については、個々のアカウントにログインし、CloudFormationのスタックから確認する必要があります。

動作確認(CloudFormation)

管理アカウントの一つに入って作成されているか確認しています。

作成されていました。AWS Budgets側でも確認してみます。

今回作成した予算が作成されていましので、うまく作成できているようです。

Slackでの表示

最後にSlackでの表示を紹介しておきます。設定した予算に到達するとこのような内容が届きます。

最後に

いかがでしたでしょうか?検証で使ったリソースを消すまでが検証ですが、ついつい消し忘れてしまったり、入社したて方やAWSに慣れていない方だと知らないうちにコストが発生してしまっていた、なんてことはよくあると思います。個々の気づきや努力に任せてしまうのではなく、手軽な予算設定をすることでより安心してAWSを利用できるかと思います。