LoginSignup
98

More than 3 years have passed since last update.

AWS CLIの設定切替方法と、AWS_DEFAULT_PROFILEとAWS_PROFILEの違いについて

Last updated at Posted at 2019-09-29

はじめに

AWS CLIで使う設定(プロファイル)とその切替方法に関してまとめてみました。

以下のような方に参考にしていただけると幸いです。

  • AWS CLIをこれから使い始めるAWS初心者の方
  • 複数のアクセスキーを使い分けて、AWS CLIによる操作を行う必要がある方

環境

  • Mac OS
  • AWS CLIをインストール済み

設定切替を行うにあたっての予備知識

aws configure

すでにAWS CLIを使用中の方は、AWS CLIインストール直後に

  • aws configureコマンド

を使って、以下のように利用するアクセスキーなどを設定したかと思います。

$ aws configure
AWS Access Key ID [None]: アクセスキーIDを入力
AWS Secret Access Key [None]: シークレットアクセスキーを入力
Default region name [None]: リージョンを入力(ap-northeast-1等)
Default output format [None]: json

上記の設定を行うと、

  • ~/.aws/config
  • ~/.aws/credentials

のそれぞれに設定内容が書き込まれます。

~/.aws/configの内容

~/.aws/configには、リージョンと出力形式が書き込まれます。

$ cat ~/.aws/config
[default]
region = ap-northeast-1
output = json

~/.aws/credentialsの内容

~/.aws/credentialsには、アクセスキーIDとシークレットアクセスキーが書き込まれます。

$ cat ~/.aws/credentials 
[default]
aws_access_key_id = AAAAAAAAAAAAAAAAAAAA
aws_secret_access_key = BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

現在使用中の設定の確認(aws configure list)

また、aws configure listでAWS CLIで現在使用中の設定を確認できます。

$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>           manual    --profile
access_key     ****************AAAA shared-credentials-file    
secret_key     ****************BBBB shared-credentials-file  

先ほどaws configureで設定したアクセスキー等が表示されていることがわかります。

【本題】設定の追加と切替方法

では、AWS CLIで複数のアクセスキーを使い分けられるようにします。
そのためにプロファイルというものを新たに作成します。

プロファイルの作成

プロファイルの作成コマンドは以下のとおりです。

  • aws configure --profile プロファイルの名前

上記の通り、プロファイルに対しては何らかの名前を付けます。

名前は何でも良いのですが、今回はprodという名前のプロファイルを作ることにします。

$ aws configure --profile prod
AWS Access Key ID [None]: アクセスキーIDを入力
AWS Secret Access Key [None]: シークレットアクセスキーを入力
Default region name [None]: リージョンを入力(ap-northeast-1等)
Default output format [None]: json

上記を実行したことで、~/.aws/config~/.aws/credentialsにその内容が追加されます。

~/.aws/configの内容

[profile prod]より下の内容が新たに書き加わっています。

$ cat ~/.aws/config
[default]
region = ap-northeast-1
output = json
[profile prod]
region = ap-northeast-1
output = json

~/.aws/credentialsの内容

[prod]より下の内容が新たに書き加わっています。

$ cat ~/.aws/credentials 
[default]
aws_access_key_id = AAAAAAAAAAAAAAAAAAAA
aws_secret_access_key = BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
[prod]
aws_access_key_id = XXXXXXXXXXXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

設定の切替

先ほど作成したプロファイルに切り替えるには

  • AWS_DEFAULT_PROFILE

という環境変数にプロファイル名を設定します(AWS_PROFILEでも良いのですが、これに関しては後述)。

以下コマンドで、AWS_DEFAULT_PROFILEに先ほど作成したプロファイルの名前prodを設定します。

$ export AWS_DEFAULT_PROFILE=prod

そして、AWS CLIの現在の設定を確認すると、新しいプロファイルprodが使用中になっていることがわかります。

$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                     prod           manual    --profile
access_key     ****************XXXX shared-credentials-file    
secret_key     ****************YYYY shared-credentials-file  

もとの設定に戻すにはAWS_DEFAULT_PROFILEdefaultを設定します。

$ export AWS_DEFAULT_PROFILE=default
$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                  default           manual    --profile
access_key     ****************AAAA shared-credentials-file    
secret_key     ****************BBBB shared-credentials-file  

AWS_DEFAULT_PROFILEとAWS_PROFILEの違い

AWS_DEFAULT_PROFILEとよく似た名前の環境変数としてAWS_PROFILEが存在します。

AWS CLIで使用されるプロファイルとしては、AWS_DEFAULT_PROFILEに設定したプロファイル名が優先されるようです。

AWS_DEFAULT_PROFILEAWS_PROFILEそれぞれに異なるプロファイル名を設定した場合、aws configure listで確認できるAWS CLIで現在使用中のプロファイル名は、AWS_DEFAULT_PROFILEのものとなっています。

$ export AWS_DEFAULT_PROFILE=prod 
$ export AWS_PROFILE=default
$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                     prod           manual    --profile
access_key     ****************XXXX shared-credentials-file    
secret_key     ****************YYYY shared-credentials-file  
$ export AWS_DEFAULT_PROFILE=default 
$ export AWS_PROFILE=prod
$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                  default           manual    --profile
access_key     ****************AAAA shared-credentials-file    
secret_key     ****************BBBB shared-credentials-file  

そして、AWS_DEFAULT_PROFILEが存在せず、AWS_PROFILEにのみプロファイル名が設定されている場合にはAWS_PROFILEに設定したプロファイル名がAWS CLIの設定として使われます。

$ unset AWS_DEFAULT_PROFILE
$ echo $AWS_PROFILE
prod
$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                     prod           manual    --profile
access_key     ****************XXXX shared-credentials-file    
secret_key     ****************YYYY shared-credentials-file  

【補足】コマンド実行時に、都度プロファイルを指定する

本記事では使用するプロファイルを切り替える方法を説明してきましたが、各AWSコマンドの実行時に都度プロファイルを指定することもできます。

その場合は、コマンドに--profileオプションを指定します。

$ aws s3 ls --profile prod

まとめ

  • プロファイルを切り替えることで、AWS CLIで複数のアクセスキーを使い分けることができる

  • プロファイルの作成コマンドは、aws configure --profile プロファイルの名前

  • aws configureで作成した設定内容は、~/.aws/config~/.aws/credentialsに書き込まれる

  • 以下の環境変数にプロファイル名を設定することで、プロファイル名を切り替えることができる

    • AWS_DEFAULT_PROFILE または AWS_PROFLIE
    • 両方にプロファイル名が設定されている場合には、AWS_DEFAULT_PROFILEが優先される
  • 現在使用中のプロファイルを確認するコマンドは、aws configure list

  • コマンドの実行の都度、プロファイルを指定するには、そのAWSコマンドに--profileオプションを指定する

    • aws s3 ls --profile プロファイル名

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
98