Running中のec2およびrdsインスタンスのうち、以下のタグが付いているインスタンスを停止するスクリプト。
なお、AWS Lambdaで実行することもできる。
※AWS Lambdaで実行する場合はSlackに通知ができる。
Key | Value |
---|---|
Env | dev |
pip install -r requirements.txt
python src/stop_instances.py
aws iam create-policy \
--policy-name stop-running-ec2-rds-instances \
--policy-document file://policy.json
※policyのARNを控えておいてください。
aws iam create-role \
--role-name lambda-stop-running-ec2-rds-instances \
--assume-role-policy-document file://role.json
(参考)作成したroleにpolicyをアタッチ
aws iam attach-role-policy \
--role-name lambda-stop-running-ec2-rds-instances \
--policy-arn <policyのarn>
(参考) roleのARNを取得する
aws iam get-role --role-name lambda-stop-running-ec2-rds-instances | jq -r '.Role.Arn'
あらかじめ以下の関数を作成するか、書き換えてください。
- 関数名: stop-running-ec2-rds-instances
以下の環境変数を作成する。
Key | Description |
---|---|
SLACK_CHANNEL | 投稿するSlackのチャンネル名 |
SLACK_ICON_EMOJI | 投稿時のSlackアイコン |
SLACK_USERNAME | 投稿時の名前 |
WEBHOOK_URL | SlackのWebhook URL |
(参考) 関数の作成
※チャンネルの名前とWebhookのURLを入力してください。
mkdir build
make build
aws lambda create-function \
--region ap-northeast-1 \
--role $(aws iam get-role --role-name lambda-stop-running-ec2-rds-instances | jq -r '.Role.Arn') \
--function-name stop-running-ec2-rds-instances \
--zip-file fileb://build/lambda.zip \
--runtime python3.8 \
--timeout 5 \
--handler lambda_function.lambda_handler \
--environment "Variables={ \
SLACK_CHANNEL='<channel name>', \
SLACK_ICON_EMOJI=':ghost:', \
SLACK_USERNAME='lambda-stop-instances', \
WEBHOOK_URL='<Webhook url>' \
}"
※タイムアウトは5秒程度にしておく。
ソースコードを書き換えてデプロイする場合は以下のようにします。
なければbuild
ディレクトリを作成しておく。
mkdir build
make
で実行
make deploy
make invoke
MIT