AWSで予算を設定し、超えた場合にEC2インスタンスを停止させる方法を説明します。
概要
AWSでは予算を設定し、それを超えた場合にメールで通知することができます。
これに加え、2020年のアップデートから、EC2インスタンスを停止させることができるようになりました。
ネットを見ると「インスタンスの停止はできない」という情報も出てきますが、これは古い情報です。
予算の設定の際に「予算アクション」を設定することでこれを実現できますが、その方法は少し複雑なので、その方法について説明します。
ざっくり説明すると、以下のような手順になります。
- IAMポリシーの作成
- IAMロールの作成
- 予算の設定
手順1. IAMポリシーの作成
まずは、IAMポリシーを作成します。
IAMポリシーというのは、ざっくり言えば「何に対して何ができる」という内容を定義したものです。下に載せているJSONを見ると、何となく分かると思います。
IAMポリシーの画面は、「IAM」で検索し、出てきた「ポリシー」をクリックすれば表示されます。
デフォルトのポリシーが大量に表示されています。
この画面で、「ポリシーの作成」ボタンを押しポリシーを作成します。
次の画面で、「JSON」タブを押します。
デフォルトで入力されているJSONを消し、以下のJSONを貼り付けます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeInstanceStatus", "ec2:StartInstances", "ec2:StopInstances", "iam:AttachGroupPolicy", "iam:AttachRolePolicy", "iam:AttachUserPolicy", "iam:DetachGroupPolicy", "iam:DetachRolePolicy", "iam:DetachUserPolicy", "organizations:AttachPolicy", "organizations:DetachPolicy", "rds:DescribeDBInstances", "rds:StartDBInstance", "rds:StopDBInstance", "ssm:StartAutomationExecution" ], "Resource": "*" } ] }
貼り付けたら、「次のステップ: タグ」を押して次の画面に進みます。
この画面では何もせず、「次のステップ: 確認」を押して次の画面に進みます。
あとは名前をつけてポリシーを保存します。今回は「BudgetActionPolicy」という名前にします。
手順2. IAMロールの作成
つぎに、作成したポリシーを持つIAMロールを作成します。
IAMロールというのは、上記のポリシーで定義した作業を行う実体になります。
IAMロールを作成しただけでは何もできませんが、このロールに先ほど作成したポリシーを紐づけることで、例えばEC2インスタンスの停止などが行えるようになるわけです。
IAMポリシーと同様、「IAM」で検索をかけるとIAMロールの画面が表示できます。
「ロールの作成」ボタンを押します。
「EC2」を選択して次に進みます。
この画面で、先ほど作成した「BudgetActionPolicy」を選択し、「次のステップ: タグ」ボタンを押します。
この画面では何もせず、「次のステップ: 確認」を押して次の画面に進みます。
あとは名前をつけて「ロールの作成」ボタンを押せば、ロールが作成されます。今回は「BudgetActionRole」という名前で作成します。
このロールを使えるようにするには、信頼関係の編集が必要です。
ロール一覧画面から作成したロールをクリックして「信頼関係」タブをクリックします。
「信頼関係の編集」ボタンを押し、以下のJSONを貼り付けて「信頼ポリシーの更新」ボタンを押します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "budgets.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
手順3. 予算の設定
最後に、予算の設定を行います。
予算は「AWS Budgets」から設定を行います。
「予算の作成」ボタンをクリックし、予算の作成を開始します。
まず、予算タイプを選択します。デフォルトで選択されている「コスト予算」のままで良いです。「予算を設定」ボタンを押して次の画面に進みます。
次の画面で、予算に名前をつけ、金額を設定します。「しきい値を設定する」ボタンを押して次の画面に進みます。
この画面で、設定した金額を上回ったときの動作を設定します。
まずは、予算の何%に達した時にアクションを実行するかと、実際のコストか予測コストか、どちらに基づいてアクションを実行するかを決めます。
つぎに、メールでの通知先を設定します。
つぎに、フォームの下に表示されている「予算アクションを追加」ボタンを押すと、以下のフォームが開きます。
この部分で、インスタンスを落とすなどのアクションを定義します。
まずはIAMロールを選択する必要があるので、先ほど作成したロールを選択します。
つぎに、アクションタイプを選択します。「Automate instances to stop for EC2 or RD2」を選びます。
すると、さらにフォームが開くので、対象のEC2インスタンスが存在するリージョンを選択し、インスタンスのIDを全て選択します。
最後に「予算の確認」ボタンを押して確認画面に進み、問題なければ予算を作成します。
これで、予算をオーバーした場合は自動でEC2インスタンスが停止されます。