趣旨
文字通り、Windows PCから1クリックでEC2インスタンスを起動します。
UserDataを利用して初期セットアップも可能です。
※セキュリティグループとキーペアの存在が前提です。
大まかに言うと、
・AWS CLI for Windows
・batファイル
を利用します。
IAMユーザ作成
Windows PCでAWS CLIを利用する為のIAMユーザを作成します。
EC2を起動する為のユーザなので、EC2のFullAccess権限があれば充分でしょう。
IAM(ユーザ)コンソールで[ユーザを追加]。

ユーザ名(分かりやすいもの)を入力、
[プログラムによるアクセス]を選択して[次のステップ]。

[AmazonEC2FullAccess]にチェックして[次のステップ]。


最後に表示されるアクセスキーとシークレットアクセスキー(クリックして表示)をメモします。

AWS CLI for Windowsのインストール、セットアップ
公式ページからインストーラをダウンロードし、インストールします。
インストール後、コマンドプロンプトで下記のようにセットアップを進めます。
さきほどメモしたアクセスキー・シークレットアクセスキーも入力します。
C:\Users\User>aws configure AWS Access Key ID : AKIA**************** AWS Secret Access Key : Ptr5************************************ Default region name : ap-northeast-1 Default output format : (空Enter) C:\Users\User>
batファイル作成
下記内容をメモ帳などのテキストエディタに貼り付け、
batファイル(末尾.bat)として保存します。
aws ec2 run-instances ^ --image-id=ami-56d4ad31 ^ --instance-type=t2.micro ^ --security-group-ids=sg-****** ^ --key-name=ec2-keypair
黄色で示した部分は適宜修正して下さい。
タスクバーに登録
batファイルからショートカットを作成し、
そのショートカットをタスクバーに登録します。
詳細はこちらを参照して下さい。
タスクバーに追加したアイコンをクリックして、
新規EC2が立ち上がれば成功です。
おまけ①Userdataによる初期セットアップ
EC2作成時、Userdataで起動時に各種インストールコマンドを実行させることが可能です。

CLIでUserdataを利用する場合は、下記のようにします。
aws ec2 run-instances ^
--image-id=ami-56d4ad31 ^
--instance-type=t2.micro ^
--security-group-ids=sg-******** ^
--key-name=aws-keypair-twice ^
--user-data=file://"C:\Users\User\Desktop\初期セットアップ.txt"
「初期セットアップ.txt」の内容は、
例えば下記のようなものです。
#! /bin/bash # アップデート yum -y update # タイムゾーン設定 sed -i -e "/ZONE=/s/.*/ZONE=\"Asia\/Tokyo\"/g" /etc/sysconfig/clock ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime # オートシャッター設定 echo "0 22 * * * root yum -y update && /sbin/shutdown -h now" >> /etc/crontab # アップデート・タイムゾーン変更のため再起動 shutdown -r now
他にも、各種ミドルウェアのインストール等を記述すれば
テンプレートサーバの1クリック起動が可能になります。
おまけ②タグを指定する
おまけと銘打っていますが、個人的にはここがメインです。
下記内容のbatファイルで、起動時にNameタグ(TagTest)を付与できます。
FOR /F "usebackq" %%t IN (`aws ec2 run-instances ^ --image-id=ami-56d4ad31 ^ --instance-type=t2.micro ^ --query "Instances[*].InstanceId" ^ --output text`) DO SET INSTANCE_ID=%%t aws ec2 create-tags --resources %INSTANCE_ID% --tags Key=Name,Value=TagTest
describe-instancesコマンドでqueryオプションが使えるのは知られていますが、
実は(?)起動時(run-instances)でも同じオプションが使えます。
下記コマンドを実行すると、作成されたEC2のインスタンスIDだけ出力されるはずです。
aws ec2 run-instances ^ --image-id=ami-56d4ad31 ^ --instance-type=t2.micro ^ --query "Instances[*].InstanceId" ^ --output text
おまけ②-2:任意のインスタンスNameを指定(入力)する
バッチファイルにNameタグの内容を記述するのではなく、
バッチ起動時にユーザからの入力を読み込むようにしました。
set /P INSTANCE_NAME="インスタンスNameを入力してください: " FOR /F "usebackq" %%t IN (`aws ec2 run-instances ^ --image-id=ami-56d4ad31 ^ --instance-type=t2.micro ^ --query "Instances[*].InstanceId" ^ --output text`) DO SET INSTANCE_ID=%%t aws ec2 create-tags --resources %INSTANCE_ID% --tags Key=Name,Value=%INSTANCE_NAME%
投稿者プロフィール
- 2015年8月入社。弊社はインフラ屋ですが、アプリも作ってみたいです。