今までAWS Management ConsoleからEC2インスタンスの作成、停止、起動をしていました。
しかし次のような不都合を感じることが多くなりました。
- 実験用のインスタンスを作ったり削除したりする場合はいつも同じAMI、セキュリティグループを使用することが多い。 → 一発でインスタンスを作成したい。
- マイクロインスタンスといえども1ヶ月動かし続けると金額がバカにならないので、節約のため使わない時はこまめに停止する必要がある。(インスタンス停止中はElastic IPの課金が発生するっぽいですが・・・)
いつも勉強用に使うEC2インスタンスの起動と停止はAWS Management Consoleからやっているのですが、その度にログイン、EC2のメニューに行く、右クリックして起動・停止操作で手が腱鞘炎になる。
そこで以前インストールしてそれっきりのawscliがあるので、それを使ってみることにしました。あまり詳しい使い方はわかっていないのですが、地味に感動したのでメモしておきたいと思います。
ここではawscliと、jqというJSON処理コマンドを使っているので、こちらのツールのインストールに関しては
をご覧になってみてください。なお、最近のAmazon LinuxのAMIには初めからawscliがインストールされているみたいです。なので適切なアクセスキーの設定をすればすぐに使えるようになります。
EC2インスタンスのAPI操作の手順
準備
まず、AWS Management Console上でEC2インスタンスを立ち上げるときにAMI IDも一緒に表示されていると思うのでそれをメモリます。
ちなみに現時点で私のよく使用しているAmazon Linux 64bitのAMIは ami-0d13700c
でした。
awscliの設定では既にデフォルトリージョンが指定されているものと仮定します。
Amazon Linux AMI 2013.09.2 - ami-0d13700c (64-bit) / ami-0b13700a (32-bit)
ちなみに、長い名前のサブコマンドが続きますが、これはタブ補完が使えます。便利。
EC2インスタンスの起動
ここではAmazon Linux 64bitのAMIのマイクロインスタンスを1個 作成します。
必要最低限のオプションに絞ると以下のコマンドで立ち上げられることがわかりました。
aws ec2 run-instances --image-id ami-0d13700c --count 1 --instance-type t1.micro --key-name MyKeyPair --security-groups MySecurityGroup
- ここで指定されるセキュリティグループ
MySecurityGroup
では予めSSHのポートが開けてあるものとします。 - 既にMyKeyPairという鍵ペアがEC2コンソール上で作成されていることを前提とします。
EC2インスタンスの一覧を得る
以下のコマンドで現在定義されているインスタンスの一覧情報を取得します。
ここでEC2のインスタンスIDを調べておきます。
ずらずらとJSONが表示されて非常に見づらいですが、後ほどご紹介するjqコマンドでとてもみやすくできます。
aws ec2 describe-instances
EC2インスタンスの停止、起動、ターミネート
停止
EC2インスタンスが起動できているのを確認できたら停止します。インスタンスIDを指定するだけなので簡単です。
EBSをルートデバイスとするAMIのみでできます。AMIがS3から起動される場合はインスタンス自体が揮発性のものなのでインスタンスの停止=ターミネートの動作になります。
aws ec2 stop-instances --instance-ids i-01159999
起動
インスタンスを起動します。ここもインスタンスIDを指定するだけなので簡単です。
aws ec2 start-instances --instance-ids i-01159999
ターミネート
インスタンスを削除します。
aws ec2 terminate-instances --instance-ids i-01159999
jqコマンドにパイプして結果をみやすくする
これまでJSONがずらずら表示されて見づらかったと思います。JSONユーティリティのjqコマンドをインストールして使うと出力結果をシンタックスハイライト、整形して表示してくれてかなり見やすくしてくれます。以下はルートから展開するイメージ。
aws ec2 describe-instances | jq '.'
JSONの属性を掘り下げていくことで目的のインスタンス情報を整理して取得することができるようになります。詳しい使い方はまだわかっていないので、実際に私が試して便利だったフィルタリング方法を記載してみたいと思います。
パブリックDNS名
aws ec2 describe-instances | jq '.Reservations [] .Instances [] .PublicDnsName'
インスタンスID
aws ec2 describe-instances | jq '.Reservations [] .Instances [] .InstanceId'
AMI ID
aws ec2 describe-instances | jq '.Reservations [] .Instances [] .ImageId'
インスタンスの状態
aws ec2 describe-instances | jq '.[] [] .Instances [] .State'
{
"Name": "running",
"Code": 16
}
{
"Name": "stopped",
"Code": 80
}
リージョンの一覧
aws ec2 describe-regions | jq '.Regions [] .RegionName'
"eu-west-1"
"sa-east-1"
"us-east-1"
"ap-northeast-1"
"us-west-2"
"us-west-1"
"ap-southeast-1"
"ap-southeast-2"
まとめ
最後に、身も蓋もないですが、常用する予定のないすぐに壊すこと前提の単純なEC2インスタンスを扱う場合は普通にVagrant providerがあるようなので、そちらのほうが楽なのかなあと思います。
参考文献
投稿者紹介
-
私たちは、テクノロジに魅せられた個性あふれるメンバーによって構成された茨城県日立市に本社を構えるベンチャー企業です。
”テクノロジを通して「驚き」と「感動」を創造し、人々の「夢」と「笑顔」を支えます。” の経営理念をモットーに明るい未来を描き、ワクワクする企画提案を続けて参ります。
最近のエントリ
- レポート2019.10.28ユニキャストレストランを開催しました🍳
- レポート2019.08.29社内研修ワークショップ~マシュマロ・チャレンジ~
- レポート2019.08.06Computex/InnoVEX 出展者・通訳として参加してきました。
- レポート2018.06.12Computex 2018 レポート
1件のコメント