[AWS Cloud9]EC2自動停止を検知して別の処理を始める
はじめに
AWS Cloud9はIDEのブラウザを閉じたとき、自動でEC2インスタンスが停止する機能があります。
何分後に、自動停止するかは、設定から変更が可能です。
AWS Cloud9を1週間使うと、EC2インスタンスが自動停止するのが「便利 → 当たり前」という感覚になりました。そして、思いました。自動停止を検知してもっと楽できないかと。
やりたいこと
AWS Cloud9の機能で
- 検知した情報をトリガーに別の処理を動作させてみる。
- 今回は、サンプルに以下を動作確認
- 自動停止のお知らせメール (実装したら、イチイチお知らせが来てウザくなった)
- RDSの自動停止 (IDEとセットで使ってたので、止め忘れがなくなり非常に便利になった)
自動停止したことを検知
CloudWatchのルールを作成。
- イベントパターンを選択
- サービス名:EC2
- イベントタイプ:EC2 Instance Status-change Notification
- 特定の状態:インスタンスの停止を設定
- Specific instance Id(s):AWS Cloud9のインスタンスIDを設定
{
"source": [
"aws.ec2"
],
"detail-type": [
"EC2 Instance State-change Notification"
],
"detail": {
"state": [
"running",
"stopped"
],
"instance-id": [
"AWS Cloud9のインスタンスID"
]
}
}
検知した情報をトリガーに別の処理を動作
ターゲットに今回は2つ(SNS(メール送信)とLambda(rds停止)を設定しました。)
SNSは使い道を思いつかなかったのでEメールを設定したのみ。jsonがそのままメールに飛んでくる。
LambdaはついでにIDE起動したときの動作も記述。
- IDE起動→EC2開始→RDS開始
- IDE終了→30分後EC2停止→RDS停止
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"rds:StartDBInstance",
"rds:StopDBInstance"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
import boto3
def lambda_handler(event, context):
dbinstance = 'RDSインスタンス名'
rds = boto3.client('rds')
instanceState = event['detail']['state']
if instanceState == 'stopped':
result = rds.stop_db_instance(DBInstanceIdentifier = dbinstance)
else:
result = rds.start_db_instance(DBInstanceIdentifier = dbinstance)
print(result)
- 開始状態のRDS
- EC2が停止するイベントが発生
まとめ
- CloudWatchを使うことでIDEの終了後、EC2自動停止を検知できました。
- 後続処理を自動化できることが分かったので、一日の作業終了をブラウザを閉じるだけに出来そうです。
関連
Author And Source
この問題について([AWS Cloud9]EC2自動停止を検知して別の処理を始める), 我々は、より多くの情報をここで見つけました https://qiita.com/icck/items/c841fa99af2c88a6d956著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .