google.colaboratoryを使ってAWSコンソールにログインなしにEC2インスタンスを起動・停止する方法

つけっぱなしにしておきたくないEC2インスタンスを起動する際には、逐一AWSコンソールにログインして起動しなければならないが、MFAなどを使用している場合になかなか面倒

そこでgoogle.colaboratoryを使ってAWSコンソールにログインなしにEC2インスタンスを起動・停止する方法を紹介

google.colaboratoryはPythonをオンデマンドを利用できるので、AWSのboto3を使用してEC2インスタンスの起動停止をしてみる。

他にもEC2インスタンスはあると思うので、インスタンスにタグをつけておくと権限管理的にもよい

AWSコンソールでIAM→ポリシーを作成し、下記コードを貼り付ける

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:Start*",
                "ec2:Stop*"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/タグ名": "タグ値"
                }
            }
        }
    ]
}

適当なユーザ名を作成して、先程のポリシーを付与、アクセスキーとシークレットキーを取得しておく

google.colaboratoryで新しいプロジェクトを作成して、左ペインで右クリック→新しいファイルを作成を選択。credentials.pyとしておく

credentials.pyを開き、アクセスキーとシークレットキーを貼り付ける

aws_access_key_id = 'YOUR_ACCESS_KEY'
aws_secret_access_key = 'YOUR_SECRET_KEY'
region_name = 'YOUR_REGION'

目次

起動

import boto3
import credentials

# AWS認証情報を設定
session = boto3.Session(
    aws_access_key_id=credentials.aws_access_key_id,
    aws_secret_access_key=credentials.aws_secret_access_key,
    region_name=credentials.region_name
)

# EC2クライアントを作成
ec2_client = session.client('ec2')

# インスタンスを起動
start_response = ec2_client.start_instances(
    InstanceIds=['YOUR_INSTANCE_ID']
)

# 起動したインスタンスの情報を取得
start_instance_id = start_response['StartingInstances'][0]['InstanceId']
print(f"インスタンスが起動しました。インスタンスID: {start_instance_id}")

停止

import boto3
import credentials

# AWS認証情報を設定
session = boto3.Session(
    aws_access_key_id=credentials.aws_access_key_id,
    aws_secret_access_key=credentials.aws_secret_access_key,
    region_name=credentials.region_name
)

# EC2クライアントを作成
ec2_client = session.client('ec2')

# インスタンスを停止
stop_response = ec2_client.stop_instances(
    InstanceIds=['YOUR_INSTANCE_ID']
)

# 停止したインスタンスの情報を取得
stop_instance_id = stop_response['StoppingInstances'][0]['InstanceId']
print(f"インスタンスが停止しました。インスタンスID: {stop_instance_id}")

以上、起動・停止させたい場合はそれぞれのスクリプトを実行する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です