AWSの認証情報についてググると良く以下の環境変数をセットせよと言う記事が出てきます。
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
これでも良いのですが、複数のAWSアカウントを使い分けていると面倒ですね。
というわけで、この辺のファイルのお話です。
~/.aws
├── config
└── credentials
configとcredentials
2つのファイルが有りますが、以下の様な使い分けです。
ファイル | 用途 |
---|---|
config | AWS CLIを使う時のプロファイル別情報 |
credentials | AWS SDK,AWS CLI を使う時の認証情報 |
以前は config
,credentials
の両方にアクセスキー、シークレットキーが書かれていたのですが、最近の aws configure
コマンドでは、上記のように認証情報はcredentials
ファイルに寄せられるようになっています。
で、今回はSDKの方の話をしたいので~/.aws/credentials
の方にしぼります。
プロファイル
プロファイルはアクセスキー、シークレットキーのペアに名前をつけて管理する機能です。
上記classmethodさんの記事から引用させていただくと、
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
[test-user]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
こんな感じでdefault
,test-user
というのがプロファイル名になります。
defaultプロファイル
何も指定しない場合にはご想像の通りdefault
が使われます。
任意のプロファイルを指定する
AWS CLIの場合には全てのコマンドに--profile
というオプションがあります。
SDKの場合にはどうするのでしょう?
1. ソースコード中でAWS関連のクラスをnewするときに指定
http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Client.html
例えばRuby SDKであればClientクラスのコンストラクタに:profile
があります。
http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/EC2.html#constructor-property
しかし、Node.jsのコンストラクタには無かったりします。
あと、ソースコードにプロファイル名を埋め込んでしまうと、皆でプロファイル名を統一するという運用が必要になってきます。
2. 環境変数で指定する
AWS_PROFILE
という環境変数にプロファイル名を指定することで、SDKが内部的に使用するプロファイルを切り替えることが出来ます。似たようなものでAWS_DEFAULT_PROFILE
という環境変数もありますが、こちらはAWS CLI用みたいです。
使える環境変数については一覧があった気がするのですが・・・んー、出てこなくなった。
とりあえずこれで。
http://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-getting-started.html#cli-environment