技術2課の松田です。こんにちは。
AWS CLI、使っていますか?
何となくとっつきにくい印象のあるAWS CLI(以下、CLIとしますね)ですが、公式のBlack Beltでも謳われているように、作業の効率化や自動化において非常に役立ってくれます。また普段コンソールで行っている作業も、CLIでやってみると違う景色が見えたりして、ちょっとした学びの機会になったりします。あと、コマンドってなんかカッコイイので、触ってるだけで俺SUGEEEE的な気分になってちょっと楽しかったりします。
今回はビギナーの方を対象として、CLIをお手軽に触ってみよう!といった趣旨の記事になります。いくつかのリソースをCLIで作ってみて、またCLIの説明書となるリファレンスを読むコツもご紹介したいと思っています。
AWS CloudShellを使って環境準備
今回はAWS CloudShell(以下、CloudShell)を使ってCLIの実行環境を準備します。
なぜ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コマンドリファレンスを確認しながらコマンドを組み立てていきます。
まずは基本となる構文を押さえましょう。CLIのコマンドは以下の通り、aws
、options
、command
、subcommand
、parameters
の5つから構成されています。ちなみに角括弧は必須でないことを示しており、つまりoptions
とparameters
は必須ではありません。
aws [options] <command> <subcommand> [parameters]
以下、5つの各項目を簡単に説明します。
aws
:CLIを呼び出すコマンド名。固定です。options
:コマンドのオプションを指定します(例えばリージョンを指定する--region
や、出力フォーマットを指定する--output
)。使わないことも多いです。command
:どのサービスのAPIを呼び出すかを指定します(例えばec2
やs3
)。subcommand
:呼び出すAPIを指定します(例えばEC2を起動するrun-instance
やS3を作成するcreate-bucket
)。parameters
:呼び出すAPIのパラメータを指定します(例えばrun-instance
であればインスタンスタイプを指定したり、create-bucket
であればバケット名を指定できます)。
コマンドを組み立てる①:command
それではVPCを作るコマンドを組み立てます。aws
は固定でoptions
は今回使わないので、まずはcommand
から考えていきましょう。
command
には公式リファレンスのAvailable Services
のどれかが入るので、それっぽいのがないか探します。大抵はサービス名(略称があれば略称)とイコールなので、ec2
やs3
など、サービス名でページ内検索すればだいたい見つかります(見つからないときは頑張って探しましょう)。中には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コマンドの組み立て方をまとめておきます。
command
→subcommand
→parameters
の順で決めるcommand
はサービス名を頼りに探すsubcommand
はコマンド名のルール(create-xxxx
、describe-xxxx
)を頼りに探すparameters
は必須のものと設定したいものを気合で探す
そんなところで、本記事はここで一区切りとさせて頂きます。
本当はEC2を作るところまでやりたかったのですが、結構なボリュームになるので別記事として公開したいと思います。
最後までお付き合いいただきありがとうございました。
本記事がどなたかのお役に立てば幸いです。
松田 渓(記事一覧)
2021年10月入社。散歩が得意です。