AWS CloudShellを使ってAWS CLIの基本を学ぶ

記事タイトルとURLをコピーする

技術2課の松田です。こんにちは。

AWS CLI、使っていますか?

何となくとっつきにくい印象のあるAWS CLI(以下、CLIとしますね)ですが、公式のBlack Beltでも謳われているように、作業の効率化や自動化において非常に役立ってくれます。また普段コンソールで行っている作業も、CLIでやってみると違う景色が見えたりして、ちょっとした学びの機会になったりします。あと、コマンドってなんかカッコイイので、触ってるだけで俺SUGEEEE的な気分になってちょっと楽しかったりします。

今回はビギナーの方を対象として、CLIをお手軽に触ってみよう!といった趣旨の記事になります。いくつかのリソースをCLIで作ってみて、またCLIの説明書となるリファレンスを読むコツもご紹介したいと思っています。

AWS CloudShellを使って環境準備

今回はAWS CloudShell(以下、CloudShell)を使ってCLIの実行環境を準備します。

docs.aws.amazon.com

なぜCloudShellを使うのか

理由は主に2つあり、1つは準備が簡単だからです。ローカルマシンでCLIを使う方法もありますが、この場合インストールをはじめちょっとした準備が必要です。一方CloudShellを使う場合、ワンクリックでCLIの実行環境がフルマネージドで提供され、非常に準備が簡単です。

もう1つの理由は、アクセスキーを発行しなくて済むからです。アクセスキーは取り扱いを誤るとセキュリティ事故につながるちょっと危険な代物ですので、極力発行しない方が望ましいとされています。なおCloudShellにはコンソールにログインしているIAMユーザー/ロールと同じ権限が付与されます。例えばAdministratorAccessの権限を持つユーザー/ロールでコンソールにログインしていれば、CloudShellから全てのAPIを呼び出せるという寸法ですね。

環境準備 - 前提条件

前述の通り、CloudShellにはコンソールにログインしているIAMユーザー/ロールと同じ権限が付与されます。ですので、CloudShellを起動する前にIAMユーザー/ロールに適切な権限を付与する必要があります。

環境準備 - 手順

コンソールにログイン後、画像赤枠のボタンをクリックしましょう。

クリックしたら、あとは1~2分ほど待つだけです。画像のように入力待ち状態になれば、準備は完了です。

実践その①:CLIでVPCを作る

作るものの確認

まずはとにかくシンプルに、VPCを1つ作成します。
簡単化のためNameタグもつけず、設定するのはCIDRだけとします。

CLIコマンドの基本

ではこのVPCをCLIで作るために、公式のCLIコマンドリファレンスを確認しながらコマンドを組み立てていきます。

awscli.amazonaws.com

まずは基本となる構文を押さえましょう。CLIのコマンドは以下の通り、awsoptionscommandsubcommandparametersの5つから構成されています。ちなみに角括弧は必須でないことを示しており、つまりoptionsparametersは必須ではありません。

aws [options] <command> <subcommand> [parameters]

以下、5つの各項目を簡単に説明します。

  • aws:CLIを呼び出すコマンド名。固定です。
  • options:コマンドのオプションを指定します(例えばリージョンを指定する--regionや、出力フォーマットを指定する--output)。使わないことも多いです。
  • command:どのサービスのAPIを呼び出すかを指定します(例えばec2s3)。
  • subcommand:呼び出すAPIを指定します(例えばEC2を起動するrun-instanceやS3を作成するcreate-bucket)。
  • parameters:呼び出すAPIのパラメータを指定します(例えばrun-instanceであればインスタンスタイプを指定したり、create-bucketであればバケット名を指定できます)。

コマンドを組み立てる①:command

それではVPCを作るコマンドを組み立てます。awsは固定でoptionsは今回使わないので、まずはcommandから考えていきましょう。

commandには公式リファレンスAvailable Servicesのどれかが入るので、それっぽいのがないか探します。大抵はサービス名(略称があれば略称)とイコールなので、ec2s3など、サービス名でページ内検索すればだいたい見つかります(見つからないときは頑張って探しましょう)。中にはlogs(= CloudWatch Logs)のように分かりにくいものもありますが、そういった場合はコマンドのリファレンスページ冒頭の説明を読んで確認すると良いと思います。

今回はVPCを作るのでvpcを探せばよい...と思いきや、VPCの操作は例外的にec2コマンドを使用する必要があります(VPCに関連するコマンドは全てec2に内包されています)。

コマンドを組み立てる②:subcommand

次にsubcommandを考えます。subcommandにはec2リファレンスAvailable Commandsのどれかが入るので、ここからそれっぽいのを探します。

といっても、大量にあるので闇雲に探すとかなり大変です。そこでポイントなのが、subcommandには一定の命名規則があるという点です。例えばリソースを作成するものはcreate-xxxx、リソースを削除するものはdelete-xxxx、リソースの情報を取得するものはdescribe-xxxxといった具合ですね。このような命名規則を参考に、アタリを付けて探すのが定石かなーと思ってます。

今回は「VPCを作成する」コマンドなので、create-vpcみたいな感じのコマンドないかな~といった具合でページ内を探してみると...。

ドンピシャでcreate-vpcというのがあるので、多分これですね。
コマンドによっては、名前だけでは何をするものか分かりにくいものもありますので、そんな時はサブコマンドのリファレンスを開いて確認してみましょう。結局は気合。

コマンドを組み立てる③:parameters

では最後に、parametersを考えます。

ここでやることは大きく3つで、1つは必須パラメータを確認することです。
まず、パラメータの一覧はSynopsisとして記載されています。「CLIコマンドの基本」でも少し書いていますが、このうち角括弧で囲まれていないものが必須パラメータとなります。つまりcreate-vpcには必須パラメータがないということですね。

ただ要注意なのが、「必須」の基準がなかなか厳密ということです。
例えばCIDRブロックを指定せずにVPCを作ることはできないのに、create-vpcでCIDRブロックを指定する--cidr-blockパラメータは必須となっていませんよね。これはVPCのCIDRブロックを指定する方法が--cidr-blockを使用して直接指定する方法のほかにもある(--ipv4-ipam-pool-idでIPAMのCIDRプールを利用して指定する方法など)から必須でない、ということのようです。

他には--instance-tenancyのように、AWS側でデフォルト値が設定されているパラメータも「必須」として記載されません。いついかなる時にも必要なパラメータだけが「必須」として定義されている、という理解をして頂ければ、おおむね問題ないと思います。

やることの2つめは、当たり前ですが自分が設定したいパラメータがどれかを確認することです。

今回はVPCのCIDRを指定したいので、名前からそれっぽいパラメータを探していくと...--cidr-blockというのがあるので、多分これでしょう(パラメータ名はサブコマンド名と違って規則性が見出しにくいので、ここは頑張って探すしかないという印象...)。各パラメータの詳細はOptionsに記載されていますので、自分が設定したい内容と合致するか確認しましょう。

この時点で入力するパラメータが出揃ったと思いますので、最後にパラメータの引数を決めます

--cidr-blockでは単純にCIDRを引数として渡せばよいので192.168.0.0/24が引数となります。 引数の書式はOptionsに書いてありますが、例を見たほうが圧倒的に早いのでExamplesを参考にしてしまうのもアリです。ただしパラメータによっては例が無かったり、そもそもExamplesが無いページもあります。例が無いとコマンド組めない!ではあまり良くないので、難しくてもまずは自力で組んでみるというのが大事かなと個人的には思います。

コマンドを実行する

さてここまでの内容を振り返ってみると、VPCを作るコマンドは以下の通りとなります。
※引数を囲むダブルクォーテーション [ " ] はなくても大丈夫です

aws ec2 create-vpc --cidr-block "192.168.0.0/24"

それではこれをCloudshellにコピペして実行しましょう。以下の様になればOKです。

これで無事、VPCを作ることができました。あっさりしてて物足りない方は、コンソールでVPCが作られているのを確認してみるのもよいでしょう。

もしエラーとなってしまった場合は、ひとまずエラーメッセージをGoogle翻訳に放り込みましょう。あとはエラーメッセージを頼りに権限が足りているか、コマンドの入力ミスがないかなどを確認してみてください。

実践その②:CLIでサブネットを作る

続いて以下の図のように、VPCの中にサブネットを1つ作成します。

コマンドを組み立てる

先ほどと同じ要領でコマンドを組み立てていきます。
まずはcommandですが、先述の通りVPCに関連するコマンドは全てec2に内包されていますので、サブネットを作る場合もec2とすればOKです。

続いてsubcommandですが、何かを作るコマンドの名前にはたいていcreate-が付いています。
そして今回作るものはサブネットですから、create-subnetとかじゃないかな~とアタリがつけられます。

これまたドンピシャのコマンドが見つかりました。これを使えば良さそうですね。

では最後にparametersを決めるべく、create-subnetのリファレンスを確認しましょう。
まずはパラメータを確認します。必須パラメータは--vpc-idだけですね。
自分が設定したいパラメータはサブネットのCIDRですが、--cidr-blockというのがあるので多分これでしょう。

ではパラメータの引数を決めます。まず--vpc-idですが、これはリファレンスにある通り(というか名前の通り)、VPCのIDを入力すれば良さそうです。

VPCのIDはコンソールから確認してもよいですが、先ほどのVPCを作成するコマンドの実行結果でVpcIdとして表示されているはずですので、せっかくならこちらから確認しましょう。

続いて--cidr-blockですが、VPCと同じ要領で192.168.0.0/28とすればOKです。

ということで、最終的なコマンドを以下の様に組み上げることができます。

aws ec2 create-subnet --vpc-id vpc-07b2c295fcaed4cc9 --cidr-block 192.168.0.0/28

コマンドを実行する

コマンドを実行して、以下のような感じになればOKです。

まとめ

本記事でご紹介した、CLIコマンドの組み立て方をまとめておきます。

  • commandsubcommandparametersの順で決める
  • commandはサービス名を頼りに探す
  • subcommandはコマンド名のルール(create-xxxxdescribe-xxxx)を頼りに探す
  • parametersは必須のものと設定したいものを気合で探す

そんなところで、本記事はここで一区切りとさせて頂きます。
本当はEC2を作るところまでやりたかったのですが、結構なボリュームになるので別記事として公開したいと思います。

最後までお付き合いいただきありがとうございました。
本記事がどなたかのお役に立てば幸いです。

松田 渓(記事一覧)

2021年10月入社。散歩が得意です。