2
0

More than 1 year has passed since last update.

CloudFormationテンプレートをクラウドシェルからワンライナーで実行し、AWS Budgetsを作成する

Last updated at Posted at 2022-09-26

概要

特定アカウントで閾値を超える課金が発生した場合に通知を受けるBudget設定をCloudFormationで作成しました。

設計

クラウドシェルからシェルスクリプトを実行して、CloudFormationでBudgetsアラートを作成します。
最終的にYAMLテンプレートとシェルスクリプトを公開されたS3に置いて、curlでシェルスクリプトを取得して、アカウントごとにシェルスクリプトをアップロードしなくても、クラウドシェルから1行のコマンドで実行できるようにします。

YAMLテンプレート

AWSTemplateFormatVersion: "2010-09-09" 

Description: "Budget"

Parameters:
  Amount:
    Type: String
    Default: 0.5
    Description: Budgeted amount
  EmailAddress:
    Type: String
    Description: Notification email address
  Actual:
    Type: Number
    Default: 100
    MinValue: 1
    MaxValue: 100
    Description: "% of budgeted amount (Actual Costs)"

Resources:
  Budget:
    Type: AWS::Budgets::Budget
    Properties:
      Budget:
        BudgetLimit:
          Amount: !Ref Amount
          Unit: USD
        TimeUnit: MONTHLY
        BudgetType: COST
      NotificationsWithSubscribers:
        - Notification:
            NotificationType: ACTUAL
            ComparisonOperator: GREATER_THAN
            Threshold: !Ref Actual
          Subscribers:
          - SubscriptionType: EMAIL
            Address: !Ref EmailAddress

パラメータ

Amount

設定する金額。予算額をUSDで指定します。
※金額の単位は日本円で設定することはできません。1ドル未満 (0.5ドルなど) は設定可能です。
例)0.5

EmailAddress

送信先のメールアドレス。アラートを通知するメールアドレスを指定します。
例)xxx@yyy.slack.com

Actual

しきい値のパーセント。実際の使用料のアラートの割合を指定します。
※YAMLファイルの ComparisonOperator で <= は設定できません。許容値は EQUAL_TO、GREATER_THANまたはLESS_THAN の3パターンです。
例)100

シェルスクリプト

S3にアップロードするYAMLテンプレートのURLをtemplate-urlに指定します。公開するバケットなので、名前の頭にpublicをつけています。YAMLテンプレートのパラメータの値はparametersでクラウドシェルのコマンドから受け取るようにします。

create_budget.sh
aws cloudformation create-stack  \ 
    --stack-name "BudgetAlert-PayerAccount"  \
    --template-url https://public-xxx.s3.ap-northeast-1.amazonaws.com/sample-template.yml  \
    --parameters ParameterKey=Amount,ParameterValue=$1 ParameterKey=Actual,ParameterValue=$2 ParameterKey=EmailAddress,ParameterValue=$3

aws cloudformation wait stack-create-complete \
    --stack-name "BudgetAlert-PayerAccount"

S3

S3バケットを作成して、公開設定をします。
Amazon S3 バケットの一部のオブジェクトにパブリック読み取りアクセス権を付与するにはどうすればよいですか?
YAMLテンプレートとシェルスクリプトをS3にアップロードします。

クラウドシェルで実行するコマンド

image.png

YAMLテンプレートのパラメータに指定したい値を引数に渡します。

curl https://public-xxx.s3.ap-northeast-1.amazonaws.com/sample-script.sh > sample-script.sh && sh sample-script.sh <<設定する金額>> <<しきい値のパーセント>> <<送信先のメールアドレス>>

参考

Slackにメールを送信する手順

チャンネルまたは DM 用メールアドレスを作成し、Slack にメールを送信できます。xxxxx@cloudpack.slack.comのメールアドレスが発行されます。
チャンネルまたは DM 用メールアドレスを作成する
image.png

AWS CLI Command Reference

create-stack
stack-create-complete

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0