1クリックでEC2を起動する(AWS CLI + Windows batファイル)

趣旨

文字通り、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%

コメントを残す

メールアドレスが公開されることはありません。

Time limit is exhausted. Please reload CAPTCHA.