❄︎
Amazonでクリスマスギフトを贈ろう!

powershellスクリプトを使ってEC2インスタンスをタグ名を指定して起動

WHEN IT’S RIGHT IT JUST CLICKS
ひらめいたら、押せ。

by ポール・アーデン

乗っけからすみません。
この方の書籍を最近購入しまして、ちょっとばかし影響を受けてます。
当分はチョコチョコとこの方の名言的なものを入れて行きたいと考えていますのでご了承下さい。
アートとインフラの融合、なんてのもあっても良くないですか?

さて、以前のエントリで手元のWindows端末にawscliを入れてEC2インスタンスを起動、といった事を書きました。

【AWS】これさえあれば超快適!awscliを使って30秒でインスタンス起動!

今回はちょっと志向を変えてpowershellスクリプトを使って起動させてみたいと思います。

やりたいこと

  • 今流行り(マイブーム)のPowershellを使う
  • 起動コマンドを叩くだけではなく、ループ処理を入れてキチンと起動確認
  • タグを引数にして実行させる(タグを覚えておくだけで簡単に起動♪)

タグをつけておく

NameタグはECインスタンスを起動させる際のウィザード内で設定するはずなので、付いていない事は無いとは思いますが、一応確認しておきましょう。
ec2-start-3

 

 起動スクリプト

# 引数チェック
if ($args[0] -eq $null){
  Write-Output "引数がありません。"
  exit
}

# 引数が有効なホスト名かチェック
Write-Output "ホスト名[$args]の確認"
$instanceid = aws ec2 describe-tags --filters "Name=tag:Name,Values=$args" "Name=resource-type,Values=instance" --query Tags[].ResourceId --output=text
if($instanceid -eq $null){
   Write-Output "正しいホスト名を入力してください。"
   exit 0
}

# 起動
aws ec2 start-instances --instance-ids $instanceid

# 起動確認
$i=0
$check_time=5
$span=3
$check_times=$check_time * 10

while ($i -lt $check_times){
  $State = aws ec2 describe-instances --filters "Name=tag:Name,Values=$args" --query Reservations[].Instances[].State[].Name --output=text
   if($State -eq "running" ) {
      break
    }else{
      write-host "Waiting complete..."
      sleep $span
      $i++
    }
}

動作確認

と、即興で作ったのでエラーハンドリングもあったものでは無いですが、たぶんこれでNameタグを引数にして動くと思います(汗)
あ、動いたw
ちなみに引数のタグ指定を間違えると一応、エラーでコケるようにはしています。

ec2-start-1

起動だけしかないと、停止や再起動といったものも欲しくなるのが人情ですが、それはまた別の機会に作ってみたいと思います。

※余談

作成したスクリプトをそのまま記事内に埋め込んだところ、何故かインデントが消し飛んでしまう、といった事態に遭遇。
調べてところ、下記のブログで解決出来ました。

荒れ果てたWordPressコードを美しく整形してくれるツールまとめ

それではまた!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)