ども、cloudpackかっぱ (@inokara) です。

はじめに

aws-cli を利用して
Amazon VPC 内に Amazon EC2 を起動して tag を付与するまでを一撃必殺で行うシェルスクリプトを作ってみました。タダの CLI ベタ書きだけどすいません。

シェルスクリプト

動作確認は MacOS X 10.9 Mavericks でのみ行っております。
尚、jq の代わりに –query オプションや –filter オプションでいけそうな気がしますm(__)m。

#!/usr/bin/env bash

export LC_ALL=ja_JP.UTF-8

AMI_ID="ami-xxxxxxxx"
COUNT="1"
INSTANCE_TYPE="t2.micro"
KEY_NAME="your-key-name"
SG_IDS="sg-xxxxxxx"
SUBNET_ID="subnet-xxxxxxxx"
IAM_NAME="your-iam-name"
PUBLIC_IP_FLAG="0" #=>"0 -> True or 1 -> False"
TAG_NAME_PREFIX="cli-test"

if [ ${PUBLIC_IP_FLAG} = "0" ];then
  PUBLIC_IP="--associate-public-ip-address"
else
  PUBLIC_IP="--no-associate-public-ip-address"
fi

INSTANCE_ID=`aws ec2 run-instances 
             --image-id ${AMI_ID} 
             --count ${COUNT} 
             --instance-type ${INSTANCE_TYPE} 
             --key-name ${KEY_NAME} 
             --security-group-ids ${SG_IDS} 
             --subnet-id ${SUBNET_ID}
             --iam-instance-profile Name=${IAM_NAME} 
             ${PUBLIC_IP} 
             | jq -r '.Instances[].InstanceId'`

echo ""
echo "${INSTANCE_ID} is ${TAG_NAME_PREFIX} ..."
echo ""

aws ec2 create-tags 
             --resources ${INSTANCE_ID} 
             --tags Key=Name,Value=${TAG_NAME_PREFIX}

ポイントという程ではありませんが…ドキュメントでは --iam-instance-profile に関しては以下のように指定するように書かれていますが…

--iam-instance-profile Arn=value,Name=value

又は

{
  "Arn": "string",
  "Name": "string"
}

と書かれていますが、実際にコマンドオプションとして指定して実行すると以下のようなエラーが出てしまいました。

A client error (InvalidParameterCombination) occurred when calling the RunInstances operation: The parameter 'iamInstanceProfile.name' may not be used in combination with 'iamInstanceProfile.arn'

自分の指定の仕方が可怪しいのかもしれませんがナゾですのでもう少し文献等を漁ってみたいと思います。

地味に

こんなスクリプトが欲しいと思った時になかなか見つけられないので…。
ホントにメモ程度ですのでツッコミ等ございましたら宜しくお願い致します!

元記事はこちらです。
VPC 内に EC2 を起動して Name tag を付与するまでを一撃必殺で行うシェルスクリプトの例