Help us understand the problem. What is going on with this article?

boto3でEC2インスタンスサイズ変更(を自動化)

More than 1 year has passed since last update.

概要

EC2のインスタンスサイズ変更をboto3で変更する方法です。
スクリプトをcronに登録しておけば、インスタンスサイズ変更を自動化できます。

環境

  • Amazon Linux
  • python 2.7.15
  • boto3 1.9.169

準備

  • boto3インストール
  • IAMロール作成
  • IAMロールを割り当てたIAMユーザ作成
  • IAMユーザの認証情報を実行端末のAWSプロファイルに設定済(本記事ではプロファイル名をEc2InstanceSizeChangeableUserとしてます)

参考情報

IAMロール例

Resourceに"*"(全て)を指定していますが、EC2のARNを指定することで操作可能なインスタンスを制限できます。

  • StartInstances インスタンスの開始
  • StopInstances インスタンスの停止
  • ModifyInstanceAttribute インスタンスサイズ変更
  • DescribeInstances/ReportInstanceStatus Wait処理
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "arn:aws:ec2:*:*:instance/*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "ec2:ModifyInstanceAttribute",
                "ec2:DescribeInstances",
                "ec2:ReportInstanceStatus"
            ],
            "Resource": "*"
        }
    ]
}

スクリプト

import boto3
from boto3.session import Session

INSTANCE_ID = 'i-xxxxxxxxxxxxxx'
NEW_INSTANCE_SIZE = 'xxxxxxx'   # eg. t3.nano
PROFILE = 'Ec2InstanceSizeChangeableUser'

session = Session(profile_name=PROFILE)
client = session.client('ec2')

# Stop the instance
client.stop_instances(InstanceIds=[INSTANCE_ID])
waiter=client.get_waiter('instance_stopped')
waiter.wait(InstanceIds=[INSTANCE_ID])

# Change the instance type
client.modify_instance_attribute(InstanceId=INSTANCE_ID, Attribute='instanceType', Value=NEW_INSTANCE_SIZE)

# Start the instance
client.start_instances(InstanceIds=[INSTANCE_ID])
s-katsumata
東京在住の二児の父。絶賛育児中。業界歴21年、フリーランス歴13年。在宅でシステム開発(受託、自社パッケージ)に従事。生涯コード書いていたいアラフィフプログラマ。悩みは老眼。ミッションはスクラッチ開発した宿泊・アクティビティ予約システム「みなたび」で地域で頑張る人を支援
https://nyango.com/services/travel
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away