Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save rudymccomb/21b6273c869970d4e48b016242f9ec0a to your computer and use it in GitHub Desktop.
Save rudymccomb/21b6273c869970d4e48b016242f9ec0a to your computer and use it in GitHub Desktop.
#!/bin/sh
echo ""
echo "######################################################"
echo "EC2(Windows2012日本語版)インスタンス起動スクリプト."
echo "######################################################"
## ---------------------------------------------------------------------------
## 実行例
## $ ./run-windows-ec2-instance.sh \
## -i cs-blog-role \
## -v vpc-xxxxxxxx \
## -n subnet-xxxxxxxx \
## -c 60 \
## -d 120 \
## -t c3.2xlarge \
## -k xxxxxxxxxx-key \
## -s sg_xxxxxxxxxx \
## -x WindowsServerXXXXXXX
## -p xxxxxx
## ---------------------------------------------------------------------------
## 実行時の引数として以下の値を受け取る(※印の付いているものは事前に作成要).
## ---------------------------------------------------------------------------
IAM_ROLE="" ## 実行時にEC2インスタンスに割り当てるIAM Role (-i)(※事前に作成したものを指定)
VPC_ID="" ## 作成するインスタンスを配備するVPC ID (-v)(※事前に作成したものを指定)
SUBNET_ID="" ## 作成するインスタンスを配備するSUBNET ID (-n)(※事前に作成したものを指定))
DRIVEC_SIZE="" ## 作成するインスタンス(Windows Server 2012を想定)のCドライブストレージ容量 (-c)
DRIVED_SIZE="" ## 作成するインスタンス(Windows Server 2012を想定)のDドライブストレージ容量 (-d)
INSTANCE_TYPE="" ## 作成するインスタンスのインスタンスタイプ (-t)
KEY_PAIR_NAME="" ## 作成するインスタンスにログインする為に用いるKeyPairファイル名(-k)(この名前で作成します)
SG_NAME="" ## 作成するインスタンスに割り当てるセキュリティグループ名(-s)(この名前で作成します)
INSTANCE_NAME="" ## 作成するインスタンスを識別する任意の名称(-x)(この名前を後続処理で利用します)
PROFILE="" ## 実行時のAWS CLIプロファイル(-p)(オプション)
## ---------------------------------------------------------------------------
## 実行時引数から値を取得.
## ---------------------------------------------------------------------------
while getopts i:v:n:c:d:t:k:s:x:p: OPT
do
case $OPT in
"i" ) IAM_ROLE="$OPTARG";;
"v" ) VPC_ID="$OPTARG";;
"n" ) SUBNET_ID="$OPTARG";;
"c" ) DRIVEC_SIZE="$OPTARG";;
"d" ) DRIVED_SIZE="$OPTARG";;
"t" ) INSTANCE_TYPE="$OPTARG";;
"k" ) KEY_PAIR_NAME="$OPTARG";;
"s" ) SG_NAME="$OPTARG";;
"x" ) INSTANCE_NAME="$OPTARG";;
"p" ) PROFILE="--profile ""$OPTARG";;
esac
done
echo "run instance operation:START."
echo "-------------------------"
echo "VPC ID: "$VPC_ID
echo "Subnet ID: "$SUBNET_ID
echo "STORAGE SIZE of C drive: "$DRIVEC_SIZE "(GB)"
echo "STORAGE SIZE of D drive: "$DRIVED_SIZE "(GB)"
echo "Instance Type: "$INSTANCE_TYPE
echo "KeyPair Name: "$KEY_PAIR_NAME
echo "Security Group Name: "$SG_NAME
echo "Instance Name: "$INSTANCE_NAME
echo "Profile: "$PROFILE
## ---------------------------------------------------------------------------
## インスタンス起動に用いるOS及びバージョンの最新AMIを取得.
## 対象:『Windows_Server-2012-R2_RTM-Japanese-64Bit-Base』
## ---------------------------------------------------------------------------
IMAGE_ID=`aws ec2 describe-images $PROFILE \
--owners amazon \
--filters "Name=platform,Values=windows" \
"Name=name,Values=Windows_Server-2012-R2_RTM-Japanese-64Bit-Base-*" \
--query "Images[*].{Name:Name, CreationDate:CreationDate, ImageId:ImageId}" | \
jq 'sort_by(.CreationDate) | reverse' | \
jq -r '.[0].ImageId'`
IMAGE_NAME=`aws ec2 describe-images $PROFILE --image-ids $IMAGE_ID | jq -r '.Images[].Name'`
## ---------------------------------------------------------------------------
## その他インスタンス起動に必要な要素の作成.
## ---------------------------------------------------------------------------
## ElasticIP:当該インスタンス起動用に新規生成したものを利用.
EIP=`aws ec2 allocate-address $PROFILE | jq -r '.PublicIp'`
## Security Group ID:当該インスタンス用に新規生成したものを利用.
## ※RDP/HTTP/HTTPSアクセスを許可
SGID=`aws ec2 create-security-group $PROFILE --vpc-id $VPC_ID --group-name $SG_NAME --description "for Windows Server Instance." | jq -r '.GroupId'`
aws ec2 create-tags $PROFILE --resources $SGID --tags Key=Name,Value=$SG_NAME
aws ec2 authorize-security-group-ingress $PROFILE --group-id $SGID --protocol tcp --port 3389 --cidr "0.0.0.0/0"
aws ec2 authorize-security-group-ingress $PROFILE --group-id $SGID --protocol tcp --port 80 --cidr "0.0.0.0/0"
aws ec2 authorize-security-group-ingress $PROFILE --group-id $SGID --protocol tcp --port 443 --cidr "0.0.0.0/0"
## KeyPair:当該インスタンス起動用に新規作成したものを利用.
## 合わせてファイルも作成、ダウンロードしておく
aws ec2 create-key-pair $PROFILE --key-name $KEY_PAIR_NAME | jq -r '.KeyMaterial' > $KEY_PAIR_NAME.pem
echo ""
echo "ImageId: "$IMAGE_ID
echo "ImageName: "$IMAGE_NAME
echo ""
echo "EIP: "$EIP
echo "SecurityGroup ID/Name: "$SGID"("$SG_NAME")"
echo "KeyPairName: "$KEY_PAIR_NAME.pem
echo ""
## ---------------------------------------------------------------------------
## インスタンス起動
## ---------------------------------------------------------------------------
EC2_INSTANCE_ID=`aws ec2 run-instances $PROFILE \
--image-id $IMAGE_ID \
--key-name $KEY_PAIR_NAME \
--security-group-ids $SGID \
--instance-type $INSTANCE_TYPE \
--block-device-mappings DeviceName=/dev/sda1,Ebs={VolumeSize=$DRIVEC_SIZE} DeviceName=xvdb,Ebs={VolumeSize=$DRIVED_SIZE} \
--subnet-id $SUBNET_ID \
--enable-api-termination \
--instance-initiated-shutdown-behavior stop \
--iam-instance-profile Name="$IAM_ROLE" \
--count 1 \
--associate-public-ip-address | jq -r '.Instances[].InstanceId'`
echo "EC2 InstanceID: "$EC2_INSTANCE_ID
echo "---------------"
## ---------------------------------------------------------------------------
## インスタンスに対してタグを付与.
## ---------------------------------------------------------------------------
aws ec2 create-tags $PROFILE --resources $EC2_INSTANCE_ID --tags Key=Name,Value=$INSTANCE_NAME
## ---------------------------------------------------------------------------
## インスタンスに対してEIPを割当
## ---------------------------------------------------------------------------
## ステータスがrunningになるまで待機.
echo "waiting for instance-running."
aws ec2 wait instance-running $PROFILE --instance-ids $EC2_INSTANCE_ID
echo "instance is running."
ASSOCIATION_ID=`aws ec2 associate-address $PROFILE --instance-id $EC2_INSTANCE_ID --public-ip $EIP --allow-reassociation`
echo "instance eip association finished."
echo "run instance operation:END."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment