AWS CLIをインストールした後の設定についてです。AWS CLIを使用してAPIを利用するためには、AWSから発行されたアクセスキー(アクセスキーID、シークレットアクセスキー)の設定が必要になります。でないとAWSにアクセスできませんからね。この認証情報の設定に関しては複数のパターンがありますので以下にまとめていきたいと思います。
また、シークレットアクセスキーはアクセスキーの作成時にしか確認・ダウンロードができませんので必ずCSVファイルをダウンロードしておきましょう。もし忘れてしまった場合はアクセスキーを再度作り直す必要があります。
設定コマンド(configure)を使う
次のコマンドを使用することで自動で認証情報と設定ファイルが作成されます。
$ aws configure
コマンドを実行すると以下4項目が順番に表示されるので入力してください。
AWS Access Key ID [None]: xxxxxxxxxx AWS Secret Access Key [None]: xxxxxxxxxx Default region name [None]: ap-northeast-1 Default output format [None]: json
AWS Access Key ID [None] と AWS Secret Access Key [None] にはユーザー作成時にダウンロードしたファイル内の値を入力します。
Default region name [None] にはデフォルトリージョンを指定します。ap-northeast-1 は東京です。リージョンの種類に関してはこちら(AWS リージョンを選択する | Amazon Elastic MapReduce)
Default output format [None] にはコマンド出力結果の表示形式を指定します。json、table、textの3種類から選択してください。
設定が終わると~/.aws
ディレクトリに認証情報(credentials)と設定ファイル(config)が作成されています。
$ ll ~/.aws total 16 -rw------- 1 xxxxxx staff 48 10 25 18:47 config -rw------- 1 xxxxxx staff 116 10 25 18:47 credentials
入力した値が設定されているか確認しましょう。
$ cat ~/.aws/config [default] output = json region = ap-northeast-1 $ cat ~/.aws/credentials [default] aws_access_key_id = xxxxxxxxxx aws_secret_access_key = xxxxxxxxxx
環境変数にセットする
環境変数にセットすることでAWSにアクセスする事も可能です。以下が環境変数の対応表です。(トークンについては表に含めてますが今回の内容からは除外します)
対象 | 設定ファイル変数 | 環境変数 | オプション |
---|---|---|---|
アクセスキーID | aws_access_key_id | AWS_ACCESS_KEY_ID | - |
シークレットアクセスキー | aws_secret_access_key | AWS_SECRET_ACCESS_KEY | - |
リージョン | region | AWS_DEFAULT_REGION | --region |
出力 | output | AWS_DEFAULT_OUTPUT | --output |
プロファイル | profile | AWS_DEFAULT_PROFILE | --profile |
設定ファイル | - | AWS_CONFIG_FILE | - |
トークン | aws_security_token | AWS_SECURITY_TOKEN | - |
コマンドを実行する前に環境変数にセットしてやれば、aws configure
コマンドを使用して認証情報と設定ファイルを作成しなくてもコマンドを実行する事ができます。
$ export AWS_ACCESS_KEY_ID=xxxxxxxxxx $ export AWS_SECRET_ACCESS_KEY=xxxxxxxxxx $ export AWS_DEFAULT_REGION=ap-northeast-1 $ export AWS_DEFAULT_OUTPUT=json $ aws ec2 describe-instances
また、AWS CLIでの優先順位は次の通りなので、既に認証情報と設定ファイルが作成されていたとしても、環境変数が優先されます。
- 環境変数
- AWS認証情報
~/.aws/credentials
- CLI構成ファイル
~/.aws/config
- インスタンスプロファイルの認証情報
複数のProfile情報を使い分ける
認証情報と設定ファイルには複数のProfileを指定しておく事ができます。aws configure
コマンドに--profile [name]
のオプションを付けて実行してください。
$ aws configure --profile tasknotes AWS Access Key ID [None]: xxxxxxxxxx AWS Secret Access Key [None]: xxxxxxxxxx Default region name [None]: ap-northeast-2 Default output format [None]: json
そうすると認証情報と設定ファイルがオプションに指定した名前で以下のように更新されます。
$ cat ~/.aws/config [default] output = json region = ap-northeast-1 [profile tasknotes] output = json region = ap-southeast-2 $ cat ~/.aws/credentials [default] aws_access_key_id = xxxxxxxxxx aws_secret_access_key = xxxxxxxxxx [tasknotes] aws_access_key_id = xxxxxxxxxx aws_secret_access_key = xxxxxxxxxx
このProfileをコマンド実行時に指定したい場合は、環境変数AWS_DEFAULT_PROFILE
にセットするか
$ export AWS_DEFAULT_PROFILE=tasknotes $ ec2 run-instances --image-id ami-4985b048 --instance-type t2.micro
コマンドのオプションで--profile
を指定するかです。
$ aws --profile tasknotes ec2 run-instances --image-id ami-4985b048 --instance-type t2.micro
実行してみると指定したProfile情報が適用されていますね。
別の設定ファイルを使用する
環境変数AWS_CONFIG_FILE
に別の設定ファイルを指定しておくことでコマンド実行時に~/.aws/
ディレクトリ以外を参照させることができます。
$ export AWS_CONFIG_FILE=~/dev/AWS/myconfig
この状態で configure コマンドを実行。
$ aws configure AWS Access Key ID [****************TRQQ]: test AWS Secret Access Key [****************kOJS]: test Default region name [None]: us-west-2 Default output format [None]: text
myconfig ファイルが作成されています。
$ ll ~/dev/AWS total 24 -rw------- 1 xxxxxx staff 43 10 25 19:40 myconfig $ cat ~/dev/AWS/myconfig [default] output = text region = us-west-2
ただし、認証情報のアクセスキーIDとシークレットキーはデフォルトのファイルが更新されてしまいますので気を付けましょう。あくまで設定ファイルだけです。
$ cat ~/.aws/credentials [default] aws_access_key_id = test aws_secret_access_key = test
コマンド補完機能
AWS CLIでコマンド補完が使えます。シェルによって方法が違いますので、まず現在使用してるシェルを確認してください。基本bashになってると思います。
$ echo $SHELL /bin/bash
ちなみに現在使えるシェルを知りたい時は /etc/shells を確認します。
$ cat /etc/shells /bin/bash /bin/csh /bin/ksh /bin/sh /bin/tcsh /bin/zsh
使ってるシェルにあわせて以下のコマンドを実行することで aws cli のコマンド補完が使えます。
bashの場合(Cは大文字)
$ complete -C aws_completer aws
tcshの場合
$ complete aws 'p/*/`aws_completer`/'
zshの場合
$ source bin/aws_zsh_completer.sh
設定されたか確認してみます。
$ complete -p complete -C aws_completer aws
これで補完機能が使えるようになりました。コマンド入力途中で tab キーを押して下さい。候補が複数ある場合は tab を2回押すと一覧で表示され、候補が一つしかない場合はコマンドが全て表示されて後ろにスペースがつきます。
$ aws ec2 describe-in describe-instance-attribute describe-instance-status describe-instances describe-internet-gateways
しかし、このままだとターミナルを再起動したら設定が消えてしまいますので.bash_profile にコマンドを加えておきます。これで再起動時に自動でコマンドを実行してくれます。
$ echo 'complete -C aws_completer aws' >> ~/.bash_profile
参考:
GitHub - aws/aws-cli: Universal Command Line Interface for Amazon Web Services
Getting started with the AWS CLI - AWS Command Line Interface