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}")
以上、起動・停止させたい場合はそれぞれのスクリプトを実行する