EventBridge Schedulerを使ってCloudFormationテンプレートを定期実行してみた
はじめに
かつまたです。S3に保存したCloudFormationテンプレートとEventBridge Schedulerを用いることで指定した時刻でスタック作成と削除を行える構成を作成したため手順をご紹介します。この構成によって複雑な構成のテンプレートを用いた際でも、消し忘れや不要なコスト発生を抑え、管理を楽にすることができます。
目次
- CloudFormationテンプレート作成
- IAMロール作成
- EventBridge Scheduler作成
- 動作確認
1.CloudFormationテンプレート作成とS3アップロード
- パブリックサブネットにEC2を配置する簡易的な構成をYAMLテンプレートでローカルに記述し、保存します。
YAMLテンプレート
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
MyIP:
Type: String
Description: The IP address range that is allowed to access the instance
Default: '104.28.204.107/32'
Resources:
katsumataVPCCFn:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsSupport: true
EnableDnsHostnames: true
katsumataEC2CFn:
Type: AWS::EC2::Instance
Properties:
InstanceType: t2.micro
ImageId: ami-0e2612a08262410c8 #自身のリージョンに存在するAMI IDを記入
NetworkInterfaces:
- AssociatePublicIpAddress: true
DeviceIndex: '0'
SubnetId: !Ref katsumataSubnetCFn
GroupSet:
- !Ref katsumataSgCFn
katsumataSgCFn:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Allow HTTP
VpcId: !Ref katsumataVPCCFn
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: !Ref MyIP
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: !Ref MyIP
katsumataSubnetCFn:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref katsumataVPCCFn
CidrBlock: 10.0.1.0/24
MapPublicIpOnLaunch: true
katsumataIGWCFn:
Type: AWS::EC2::InternetGateway
Properties: {}
katsumataVPCGatewayAttachmentCFn:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId: !Ref katsumataVPCCFn
InternetGatewayId: !Ref katsumataIGWCFn
- 作成したテンプレートを適当なS3バケットにアップロードします。その際、オブジェクトURLを控えておきます。
2.IAMロール作成
CloudFormation用IAMロール
CloudFormationがリソースの作成や削除を実行できるロールを作成します。
- 「IAM」→「ロール」の「ロールを作成」から「AWSのサービス」を選択し、「ユースケース」で「CloudFormation」を選択します。
2.ロールを作成し、ロール詳細の「ポリシーを追加」→「インラインポリシーを作成」から以下のポリシーを記入します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:*",
"Resource": "*"
}
]
}
EventBridge Scheduler用IAMロール
EventBridge SchedulerがS3からテンプレートファイルを取得し、先ほど作成したCloudFormation用IAMロールを受け取ってCloudFormationスタックを作成、削除できるロールを作成します。
1.「IAM」→「ロール」の「ロールを作成」から「カスタム信頼ポリシー」を選択し、以下のポリシーを記述します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "scheduler.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
2.先ほどと同様に一度ロールを作成し、インラインポリシーを追加から以下のポリシーを記述します
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"iam:PassRole",
"cloudformation:CreateStack",
"cloudformation:DeleteStack"
],
"Resource": "*"
}
]
}
3.EventBridge Scheduler作成
テンプレートからスタックを作成、削除するEventBridge Schedulerを作成します。
スタック作成スケジュール
1.「EventBridge」→「スケジュール」から「スケジュールを作成」を選択します。
2.「スケジュールのパターン」を以下のように設定します。
- 頻度:定期的なスケジュール
- タイムゾーン:Asia/Tokyo
- スケジュールの種類:cron ベースのスケジュール
- cron式
分 | 時間 | 日付 | 月 | 曜日 | 年 |
---|---|---|---|---|---|
0 | 10 | ? | * | MON-FRI | * |
3.「ターゲットの選択」で「すべてのAPI」を選択し、検索ボックスから「CloudFormation」を検索→「Amazon CloudFormation」を選択し、続けて検索ボックスから「CreateStack」を検索し、選択する。
4.入力パラメータに以下を入力する。
{
"StackName": "スタック名",
"TemplateURL": "オブジェクトURL",
"RoleARN": "CloudFormation用IAMロールのARN,
"Parameters": [
{
"ParameterKey": "MyIP",
"ParameterValue": "自身のIPアドレス"
}
]
}
スタック削除スケジュール
スタック作成スケジュールと同様に作成します。
1.cron式は以下の通りに設定します。
分 | 時間 | 日付 | 月 | 曜日 | 年 |
---|---|---|---|---|---|
0 | 17 | ? | * | MON-FRI | * |
2.「ターゲットの選択」では「CloudFormation」から「DeleteStack」を選択します。
3.入力パラメータは以下のように設定します。
{
"StackName": "スタック名",
"RoleARN": "CloudFormation用IAMロール"
}
4.動作確認
- 指定した時間にスタックが作成され、削除されていることをコンソールの「CloudFormation」→「スタック」から確認できます。
おわりに
テンプレートで記述した構成を時間指定で一括作成・削除することで、管理とコスト抑制に貢献できると感じました。ご覧いただきありがとうございました。
参考
アノテーション株式会社について
アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。