困っていること
夜間のアクセスが少ない時間帯などにインスタンスタイプを変更したいと考えています。 そのため、自動でインスタンスタイプ変更する方法を教えてください。
どう対応すればいいの?
方法は複数ございますが、EventBridge + SSM Automation runbook AWS-ResizeInstance で実現可能です。
やってみた
今回は SSM のマネージドノードにする方法は割愛させて頂きます。
EventBridge で SSM Automation runbook AWS-ResizeInstance を実行するために必要なロールを作成します。
ロール名は SSMAutomationResizeInstance-EventBridge-Role としました。
信頼関係
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"events.amazonaws.com",
"ec2.amazonaws.com",
"ssm.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
アタッチするポリシー例
リソース制限するなど適宜修正してください。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:SendCommand",
"ssm:CancelCommand",
"ssm:ListCommands",
"ssm:ListCommandInvocations",
"ssm:GetCommandInvocation",
"ssm:GetAutomationExecution",
"ssm:StartAutomationExecution",
"ssm:ListTagsForResource",
"ssm:GetParameters"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeInstanceStatus",
"ec2:StartInstances",
"ec2:ModifyInstanceAttribute",
"ec2:StopInstances"
],
"Resource": "*"
}
]
}
対象の EC2 インスタンスを起動させます。今回は m5.large で起動させました。
EventBridge のマネジメントコンソール画面でルールを選択します。
名前の記述を行い、ルールタイプはスケジュールを選択します。問題なければ[続行してルールを作成する]をクリックします。
ドキュメント を参考に cron 式を記述して[次へ]をクリックします。
今回は毎日 23:00 JST に変更するように設定しました。
ターゲットタイプを AWS サービスにしてターゲットの選択で、systems manager オートメーションを選択します。
ドキュメント名に AWS-ResizeInstance を選択します。 その後、インスタンスタイプ変更する対象の EC2 インスタンス ID と変更するインスタンスタイプを記述します。
実行ロールには、先ほど作成したロールを選択します。
後はそのまま作成まで進めて頂ければ完了です。
元のインスタンスタイプに戻したい場合は、同じようにcron 式と変更するインスタンスタイプで設定してください。
注意点
インスタンスタイプ変更には互換性が必要です。検証環境で問題ないか十分に確認した後に本番環境で使用するようご検討ください。
※ Linux
※ Windows