【AWS】CLIの初期設定について(認証情報とコマンド補完)

スポンサーリンク

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での優先順位は次の通りなので、既に認証情報と設定ファイルが作成されていたとしても、環境変数が優先されます。

  1. 環境変数
  2. AWS認証情報 ~/.aws/credentials
  3. CLI構成ファイル ~/.aws/config
  4. インスタンスプロファイルの認証情報

複数の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情報が適用されていますね。

f:id:tasukujp:20141026191544p:plain

別の設定ファイルを使用する

環境変数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