🌟

AWS CLIでスポットインスタンス作成

に公開

AWS CLIを使用してスポットインスタンスを作成する方法

はじめに

スポットインスタンスとは、Amazon Web Services(AWS)が提供するコンピューティングリソースの一つで、オンデマンドインスタンスよりも低いコストで利用できることが魅力です。しかし、スポットインスタンスの利用は複雑な手順を伴うことがあります。そのため、今回はAWS CLIを使用してスポットインスタンスを作成する手順をご紹介します。

AWS CLIを使用するメリットとしては、GUIよりも詳細な設定や大量のリソースの操作が可能なこと、スクリプト化して自動化できる点が挙げられます。

必要な前提条件

本手順を進める前に、以下の事前準備が必要です:

  1. AWSアカウントを作成する
  2. AWS Cloud Shellを使用する(AWS CLI)
  3. 適切なVPC(Virtual Private Cloud)とセキュリティグループを作成する

パラメータ

パラメータ 説明
--spot-price スポットインスタンスの最高入札価格を指定します。この価格を超えるとインスタンスは終了します。
--instance-count リクエストするスポットインスタンスの数を指定します。
--type スポットインスタンスリクエストのタイプを指定します。"persistent"を指定すると、インスタンスが割り当てられるまで、またはリクエストがキャンセルされるまでリクエストが維持されます。
--launch-specification インスタンスの詳細な設定を指定します。ここで指定する内容は、インスタンスタイプ、AMI ID、セキュリティグループIDなどです。
--tag-specifications リソースに付けるタグを指定します。タグはリソースの管理を容易にするために使用されます。

詳細な手順

まず、以下のCLIコマンドを使用してVPC ID、AMI ID、Subnet ID、Security Group IDを取得します。ここで、YOUR_VPC_NAMEYOUR_AMI_NAMEはそれぞれあなたのVPC名とAMI名に置き換えてください。

#VPC IDの取得:
VPC_NAME=$(aws ec2 describe-vpcs --query 'Vpcs[].{Name:Tags[?Key==`Name`]|[0].Value,VpcId:VpcId}' --output text | awk '/YOUR_VPC_NAME/ {print $2}')

#AMI IDの取得:
AMI_ID=$(aws ec2 describe-images --owners self --query 'Images[?Name==`YOUR_AMI_NAME`].ImageId' --output text)

#Subnet IDの取得:
SUBNET_A_ID=$(aws ec2 describe-subnets --filters "Name=vpc-id,Values=$VPC_NAME" --query 'Subnets[].SubnetId' --output text)

#Security Group IDの取得:
SG_ID=$(aws ec2 describe-security-groups --filters "Name=vpc-id,Values=$VPC_NAME" --query 'SecurityGroups[].GroupId' --output text)

これらのIDを取得したら、次に以下のコマンドを使用してスポットインスタンスをリクエストします。

aws ec2 request-spot-instances     --spot-price "0.015"     --instance-count 1     --type "persistent"     --launch-specification "{
        "ImageId": "$AMI_ID",
        "InstanceType": "t3.micro",
        "SubnetId": "$SUBNET_A_ID",
        "SecurityGroupIds": ["$SG_ID"],
        "IamInstanceProfile": {
            "Name": "$VPC_NAME-instance-profile"
        },
        "BlockDeviceMappings": [
            {
                "DeviceName": "/dev/xvda",
                "Ebs": {
                    "VolumeSize": 8,
                    "DeleteOnTermination": false,
                    "VolumeType": "gp3"
                }
            }
        ]
    }"     --tag-specifications "ResourceType=spot-instances-request,Tags=[{Key=Name,Value=$VPC_NAME-ec2-1}]"

スポットインスタンスの中断

スポットインスタンスは、リクエストをキャンセルしない限り永続的に作成されます。インスタンスの使用が不要になった場合は、以下のコマンドを使用してスポットリクエストをキャンセルしてください。

まず、スポットインスタンスのIDを調べます。

aws ec2 describe-spot-instance-requests --filters "Name=state,Values=active" --query "SpotInstanceRequests[*].{ID:SpotInstanceRequestId}"

次に、得られたIDを用いてスポットインスタンスをキャンセルします。

aws ec2 cancel-spot-instance-requests --spot-instance-request-ids YOUR_SPOT_INSTANCE_ID

Discussion