業務で色々とAWSを触らせてもらい、コンソールからの操作にだいぶ慣れたのでCLIに挑戦してみようかなと思い立ちインストールしてみた。
AWS CLIとは
AWS Command Line Interface (AWS CLI) は、コマンドラインシェルでコマンドを使用して AWS サービスとやり取りするためのオープンソースツールです。AWS CLI を使用すると、最小限の設定で、任意のターミナルプログラムのコマンドプロンプトから、ブラウザベースの AWS マネジメントコンソール で提供される機能と同等の機能を実装するコマンドを実行できます。
AWS Command Line Interface とは - AWS Command Line Interface
コンソール上からできることはコマンドラインでも概ね実行可能な模様。
毎回いちいちログインしたり、各サービスページを行き来したりするのが面倒だったので、CLIから操作できるようになればめっちゃ楽になりそう。
AWS CLIをインストール
2021年2月現在で最新バージョンは2系。1系は非推奨のようなので2系をインストールしていく。
OSによってインストール手順が異なるため以下を参照してください。
AWS CLI バージョン 2 のインストール、更新、アンインストール - AWS Command Line Interface
今回はmacOSにコマンドラインを使って、現在のユーザーのみを対象としてインストールしていきます。
インストール先のディレクトリを指定
AWS CLIのインストール先をデフォルトのrootではなく特定のユーザーのホームディレクトリに指定したい場合、以下のようなXMLファイルを作成する
$ vim aws-install.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <array> <dict> <key>choiceAttribute</key> <string>customLocation</string> <key>attributeSetting</key> <string>/Users/hako</string> <key>choiceIdentifier</key> <string>default</string> </dict> </array> </plist>
/Users/hako
の部分を任意のユーザー名に変えます
インストーラパッケージをダウンロード
特にバージョンの指定がない場合は以下コマンドでダウンロードを実行。
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
実行結果
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 22.5M 100 22.5M 0 0 6146k 0 0:00:03 0:00:03 --:--:-- 6145k
先ほどXMLファイルのパスで指定したディレクトリにaws-cliがダウンロードされます。
$ pwd /Users/hako $ ls | grep aws-cli aws-cli
ちなみにバージョンを指定してダウンロードする場合は以下
curl "https://awscli.amazonaws.com/AWSCLIV2-2.0.30.pkg" -o "AWSCLIV2.pkg"
インストーラプログラムを実行(インストールを実行)
先ほどダウンロードしたインストーラパッケージのプログラムを実行して、インストールを実行します
installer -pkg AWSCLIV2.pkg \ -target CurrentUserHomeDirectory \ -applyChoiceChangesXML aws-install.xml
aws-install.xml
は最初に作成したXMLファイル。実行ディレクトリからの相対パスを指定します
実行結果
installer: Package name is AWS Command Line Interface installer: choices changes file 'aws-install.xml' applied installer: Installing at base path /Users/hako installer: The install was successful.
ちなみにこの状態ではまだ使えない。
$ aws --version -bash: aws: command not found
パスを通す
自動でパスが通らないので、シンボリックリンクを作成してパスを通してあげる。
作成先は/usr/local/bin
とかで良いと思う。
$ sudo ln -s /Users/hako/aws-cli/aws /usr/local/bin/aws $ sudo ln -s /Users/hako/aws-cli/aws_completer /usr/local/bin/aws_completer
$ aws --version aws-cli/2.1.24 Python/3.7.4 Darwin/19.6.0 exe/x86_64 prompt/off
できた。
configureの設定
晴れてaws-cli
を使えるようになったけど、アクセス情報やアクセス先のリージョンを指定しないと実際に使用したいコマンドを走らせることはできない。
$ aws ec2 describe-instances --instance-ids i-************** You must specify a region. You can also configure your region by running "aws configure".
(※describe-instances
は引数に与えたインスタンスの情報を取得するもの)
リージョンが指定されていないので探せないよというエラーになる。実際にはリージョンだけでなくアクセスキーなども指定しなければ弾かれてしまうので、この辺りのデフォルト値を設定しておく
$ aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: Default output format [None]:
aws configure
を実行すると、順にAWSアクセスキーやリージョンなど必要な情報の入力を求められるので順に入力していく。[None]
というのは現在の設定値。
アクセスキーとシークレットアクセスキーはAMIを作成したときに発行されたもの。後から参照することはできないので、忘れてしまった場合は再度AMI作成するなりして用意。
Default output format
は出力結果をどの形式にしたいか。json,yaml,text,tableなどから選べる。
(全部試してみたけどymlが一番見やすかったのでymlにしました)
こんな感じで設定したあと、
$ aws configure AWS Access Key ID [None]: ***************** AWS Secret Access Key [None]: ************************* Default region name [None]: ap-northeast-1 Default output format [None]: yaml
もう一度先ほどのdescribe-instances
を実行
$ aws ec2 describe-instances --instance-ids i-**************
今度は無事yml形式で結果が返ってきました。
- Reservations: - Groups: [] Instances: - AmiLaunchIndex: 0 Architecture: x86_64 BlockDeviceMappings: - DeviceName: /dev/xvda Ebs: AttachTime: '2021-01-19T09:38:23+00:00' DeleteOnTermination: true Status: attached VolumeId: *********** ・ ・ ・
ちなみに、aws configure
で設定した値はそれぞれ下記に書き込まれているようです
$ cat /Users/hako/.aws/config [default] region = ap-northeast-1 output = yaml
$ cat /Users/hako/.aws/credentials [default] aws_access_key_id = ************** aws_secret_access_key = ******************************
接続先のアカウントやリージョンが複数あってデフォルト値をいくつか用意したい場合は--profile
オプションで用意することもできるらしい。詳しくは以下
設定の基本 - AWS Command Line Interface
参考
AWS Command Line Interface とは - AWS Command Line Interface
AWS CLI Command Reference — AWS CLI 2.1.24 Command Reference