今回は、StepFunctionsを利用したAutoScalingGroupの設定値を変更する方法についてです。
■ はじめに
すでにAutoScalingGroupの設定が動いている状態とします。
そのため、AutoScalingGroupの設定方法を探している方は申し訳ないのですが別サイトを参照いただけると嬉しいです。
■ ゴール
グループサイズ(希望/最小/最大キャパシティ)はAWSマネコン上では以下の箇所になります。
今回のゴールは、ステートマシンを実行し、グループサイズ(希望/最小/最大キャパシティ)を変更するステートマシン設定を行います。
■ 用途
AutoScalingGroupを利用しているEC2を夜間は停止したいなどの用途で使用できます。
夜間停止したい理由はいくつかあると思いますが、開発環境を停止させたいなどが想定されます。
■ ステートマシンにアタッチするIAMロール/ポリシーについて
ステートマシンの定義の前に、AutoScalingGroupの変更を行うため、ステートマシンには以下のIAMロールを付与する必要があります。
【IAMポリシー】
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"autoscaling:DescribeAutoScalingGroups",
"autoscaling:UpdateAutoScalingGroup"
],
"Resource": "*"
}
]
}
【IAMロールの信頼関係】
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "states.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
■ ステートマシン定義1
やっと本題です。
ステートマシンの定義は以下のとおりです。
この内容は希望するキャパシティ、最小キャパシティ、最大キャパシティをそれぞれ「2」に変更しております。
以下のAutoScalingGroup_NAME の箇所は自身が利用しているAutoScalingGroup名に変更ください。
このステートマシンを実行することで、任意のAutoScalingGroupの値を変更できるようになります。
{
"StartAt": "UpdateAutoScalingGroup",
"States": {
"UpdateAutoScalingGroup": {
"Type": "Task",
"Resource": "arn:aws:states:::aws-sdk:autoscaling:updateAutoScalingGroup",
"Parameters": {
"AutoScalingGroupName": "AutoScalingGroup_NAME",
"MinSize": 2,
"MaxSize": 2,
"DesiredCapacity": 2
},
"End": true
}
}
}
■ ステートマシン定義2
前述のステートマシン定義1では、ステートマシン定義自体に値(対象となるAutoScalingGroup名、希望/最小/最大キャパシティ)をベタ書きしております。
ステートマシン実行時に入力値を変更したい場合は、ステートマシン実行時の入力情報(JSON形式)としてステートマシンに渡してあげるのが良いです。
そのため、ステートマシン定義を下記の通り少し変更致します。
{
"StartAt": "UpdateAutoScalingGroup",
"States": {
"UpdateAutoScalingGroup": {
"Type": "Task",
"Resource": "arn:aws:states:::aws-sdk:autoscaling:updateAutoScalingGroup",
"Parameters": {
"AutoScalingGroupName.$": "$.AutoScalingGroupName",
"MinSize.$": "$.MinSize",
"MaxSize.$": "$.MaxSize",
"DesiredCapacity.$": "$.DesiredCapacity"
},
"End": true
}
}
}
上記ステートマシンを実行する際の入力値として以下のJSON形式を渡してあげます。
{
"AutoScalingGroupName": "my-auto-scaling-group",
"MinSize": 1,
"MaxSize": 3,
"DesiredCapacity": 2
}
これにより、任意のAutoScalingGroup名、希望/最小/最大キャパシティを設定可能となります。
■ 補足
EventBridgeを利用して当該ステートマシンをトリガーすることにより、EventBridgeのトリガー条件(=任意のタイミング)でのステートマシンの実行が可能となります。
以上です。