【AWS】AWS CLIから起動するLaunch Templates for Amazon EC2 instances #reinvent

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ご機嫌いかがでしょうか、豊崎です。

先日発表されたEC2の新機能「Launch Templates for Amazon EC2 instances」をCLIから実行して見ました。

準備

まずは事前準備としてAWS CLIをクライアント端末にインストールし、最新Versionにupdateしておきます。 また、適宜必要な権限を付与したIAMユーザおよびクレデンシャルをご用意ください。

インストールおよびupdate手順
http://docs.aws.amazon.com/ja_jp/cli/latest/userguide/installing.html

本ブログでの実行環境のawscliのversionは以下です。

$ aws --version
aws-cli/1.14.1 Python/3.6.1 Darwin/16.7.0 botocore/1.8.5

クレデンシャルの設定
http://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-config-files.html

Launch Templateを作成する

AWSマネジメントコンソールから作成をしていきます。

手順については以下をご参考ください。

[新機能]Launch Templates for Amazon EC2 instancesを試してみた #reinvent

本ブログで設定したLaunch Templateの内容は以下です。

  • Name
  • Description
  • AMI ID
  • Instance type
  • Key pair
  • Network
  • Storage
  • Tag
    • Tag Instances
    • Tag Volumes
    • Security groups

AWS CLIでの実行

それではAWS CLIからLaunch Templateを利用してインスタンスを作成したいと思います。 launch templateとsubnetの指定のみを行いました。とてもスリムな内容になっています。

$ aws ec2 --region ap-northeast-1 run-instances \
    --launch-template '{"LaunchTemplateId":"lt-0345978dc8500XXXX","Version":"1"}' \
    --subnet-id subnet-XXXXXXXX
{
    "Groups": [],
    "Instances": [
        {
            "AmiLaunchIndex": 0,
            "ImageId": "ami-da9e2cbc",
            "InstanceId": "i-XXXXXXXXXXXXXXXX",
            "InstanceType": "t2.nano",
            "KeyName": "demo-key",
            "LaunchTime": "2017-11-30T14:44:59.000Z",
            "Monitoring": {
                "State": "disabled"
            },
            "Placement": {
                "AvailabilityZone": "ap-northeast-1a",
                "GroupName": "",
                "Tenancy": "default"
            },
            "PrivateDnsName": "ip-XXX-XXX-XXX-XXX.ap-northeast-1.compute.internal",
            "PrivateIpAddress": "XXX.XXX.XXX.XXX",
            "ProductCodes": [],
            "PublicDnsName": "",
            "State": {
                "Code": 0,
                "Name": "pending"
            },
            "StateTransitionReason": "",
            "SubnetId": "subnet-XXXXXXXX",
            "VpcId": "vpc-XXXXXXXX",
            "Architecture": "x86_64",
            "BlockDeviceMappings": [],
            "ClientToken": "",
            "EbsOptimized": false,
            "Hypervisor": "xen",
            "NetworkInterfaces": [
                {
                    "Attachment": {
                        "AttachTime": "2017-11-30T14:44:59.000Z",
                        "AttachmentId": "eni-attach-XXXXXXXX",
                        "DeleteOnTermination": true,
                        "DeviceIndex": 0,
                        "Status": "attaching"
                    },
                    "Description": "",
                    "Groups": [
                        {
                            "GroupName": "demo-WORK",
                            "GroupId": "sg-XXXXXXXX"
                        }
                    ],
                    "Ipv6Addresses": [],
                    "MacAddress": "06:59:2b:a9:ba:3c",
                    "NetworkInterfaceId": "eni-XXXXXXXX",
                    "OwnerId": "XXXXXXXXXXXX",
                    "PrivateDnsName": "ip-XXX-XXX-XXX-XXX.ap-northeast-1.compute.internal",
                    "PrivateIpAddress": "XXX.XXX.XXX.XXX",
                    "PrivateIpAddresses": [
                        {
                            "Primary": true,
                            "PrivateDnsName": "ip-XXX-XXX-XXX-XXX.ap-northeast-1.compute.internal",
                            "PrivateIpAddress": "XXX.XXX.XXX.XXX"
                        }
                    ],
                    "SourceDestCheck": true,
                    "Status": "in-use",
                    "SubnetId": "subnet-XXXXXXXX",
                    "VpcId": "vpc-XXXXXXXX"
                }
            ],
            "RootDeviceName": "/dev/xvda",
            "RootDeviceType": "ebs",
            "SecurityGroups": [
                {
                    "GroupName": "demo-WORK",
                    "GroupId": "sg-XXXXXXXX"
                }
            ],
            "SourceDestCheck": true,
            "StateReason": {
                "Code": "pending",
                "Message": "pending"
            },
            "Tags": [
                {
                    "Key": "aws:ec2launchtemplate:id",
                    "Value": "lt-0345978dc8500XXXX"
                },
                {
                    "Key": "aws:ec2launchtemplate:version",
                    "Value": "1"
                },
                {
                    "Key": "Name",
                    "Value": "demo"
                }
            ],
            "VirtualizationType": "hvm"
        }
    ],
    "OwnerId": "XXXXXXXXXXXX",
    "ReservationId": "r-XXXXXXXXXXXXXXXXX"
}

無事EC2が起動されました!

さいごに

運用での標準的作業を目的として、EC2構築にAWSCLIを利用されていたケースは多かったと思います。 しかし指定するパラメータが多く、コマンドが長くなりがちでした。 Launch Templatesを使用することでよりコマンドがスリムになりより使いやすくなりました。 本内容が誰かのお役に立てば幸いです。