書いてみた背景
- EC2インスタンスの自動起動/自動終了をCloudWatch EventsとLambdaで運用していた。
- 特定の部署で管理するEC2インスタンスの自動起動/自動終了をその部署で制御したいという要望があった。
実際書いた結果
以下のような感じで、ルールのARNをリソースに指定することで権限の付与が可能です。
ポリシー例
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"events:DescribeRule",
"events:ListRuleNamesByTarget",
"events:ListRules",
"events:ListTargetsByRule",
"events:TestEventPattern"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"events:DisableRule",
"events:EnableRule"
],
"Resource": [
"arn:aws:events:ap-northeast-1:************:rule/********"
]
}
]
}
一括してRuleを指定できるように、RuleにTagをつけることができたらいいんですけどね。
(ルール名に特定の接頭辞を設定+ワイルドカードでもいいんですが、命名規則決めて運用でカバーになっちゃうしなー・・・)
補足
自動起動の方法について
自動終了はBuilt-in Targetを利用すればいいんですが、自動起動は用意されていなかったので
とりあえず、以下のようなLambda FunctionをInvokeしています。
インスタンスの指定は、Configure input >> Constant (JSON text)でインスタンスIDを直接指定しています。
(もっと汎用的なの書きたいなー、今のところ使うあてはないけど。)
import boto3
def lambda_handler(event, context):
client = boto3.client('ec2')
id = event['instance-id']
response = client.start_instances(
InstanceIds=[
id,
]
)
print response