Last active
October 11, 2017 15:13
-
-
Save shinyaa31/9fc18a85cf2fbaff15eb3c32c0e7cb67 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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