Closed8
EventBridge Schedulerを使ってEC2の起動停止を行う(できればCFnまで)
EventBridge Schedulerとは?
定期的または1回限りのタスクを実行することができる機能
タイムゾーンの指定が可能
いままではEventBridge Rule + Lambdaとかでやっていたものが一度で出来るようになった
参考
やってみる
前提
EC2はある
ポイント
- スケジュールグループが必要であれば事前に作成する。ルールの所属を分割したい場合などに有効
- スケジュールは
- 一度限り
- 繰り返し
- レートベース(〜分おき、〜時間に1回)
- cron(cron式を使って細かく設定可能)
- 最小は1分
- 毎日12:30に実行するには以下のようにする
30 10 * * ? *
- schedulerが実行するAPIとその対象を選択する
- EC2を停止するため、Service:EC2、API:stopinstancesを指定する
- ターゲットの選択はjson形式で行われる。stopinstancesの場合はこのようになった
{ "InstanceIds": [ "<instanceid>" ] }
続き
IAMロール
schedulerがAPIを叩くための権限を設定する。
信頼ポリシーは
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "scheduler.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
のようにし、ポリシーはEC2の停止起動が出来るものであればよい
停止したログ
cloudtrailからeventbridgeが停止したログを確認できる
Event name > Stopinstances
でフィルタすればよい
実行時間
- 11時に起動するように設定
- フレックスタイムウインドウは使用しない
の設定で11時0分50秒にschedulerが起動した。
ピッタリは無理だが、1分ほどのラグが許容できればOKか
cloudformationをつくる
今度は起動版をCFnで作ります。
こちらが大変参考にさせていただきました。(というよりまんま)
---
AWSTemplateFormatVersion: '2010-09-09'
Description: EventBridge Scheduler to start/stop EC2 instance
Parameters:
InstanceId:
Type: AWS::EC2::Instance::Id
ScheduleStartTime:
Type: String
Default: "cron(50 14 * * ? *)"
ScheduleTimezone:
Type: String
Default: Japan
Resources:
SchedulerEC2StopStartRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- scheduler.amazonaws.com
Action:
- sts:AssumeRole
Path: "/"
Policies:
- PolicyName: EC2StopStart
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- ec2:StartInstances
Resource:
- "*"
ScheduleEC2Start:
Type: AWS::Scheduler::Schedule
Properties:
Name: !Sub 'EC2-Start-${InstanceId}'
Description: Start EC2 Instance
ScheduleExpression: !Ref ScheduleStartTime
ScheduleExpressionTimezone: !Ref ScheduleTimezone
FlexibleTimeWindow:
Mode: "OFF"
State: ENABLED
Target:
Arn: arn:aws:scheduler:::aws-sdk:ec2:startInstances
Input: !Sub |-
{
"InstanceIds": ["${InstanceId}"]
}
RoleArn:
Fn::GetAtt:
- SchedulerEC2StopStartRole
- Arn
課題
- タグで対象を指定できないこと
- これでlambdaをキックすればよいか...
- ログはcloudtrailを見ることが前提であること
このスクラップは2023/06/03にクローズされました