Serverless Frameworkの認証周りでハマった

aws
Published: 2016-12-21

背景

新しいLambdaファンクションを書くことになったので、以前から気になっていたServerless Frameworkを使いました。~/.aws/credentialsに複数のプロファイルが設定されている環境で、認証情報の取扱いに苦労したのでメモしておきます。

ハマりどころ

プロファイルを指定して認証情報を保存する

Serverless Frameworkは~/.aws/credentialsの認証情報を利用します。serverless config credentialsコマンドを使うと、認証情報を~/.aws/credentialsに書き込むことができます。

ただし、オプションをつけないと、認証情報をdefalutプロファイルに保存しようとします。その結果、~/.aws/credentialsにdefaultプロファイルが存在する場合、次のようにエラーになります。

$ ./node_modules/.bin/serverless config credentials --provider aws --key hoge --secret huga                                                                
Serverless: Setting up AWS...
Serverless: Saving your AWS profile in "~/.aws/credentials"...
Serverless: Failed! ~/.aws/credentials exists and already has a "default" profile.

複数のプロファイルを使い分けている環境の場合は、--profileオプションでプロファイル名を指定します。

$ ./node_modules/.bin/serverless config credentials --provider aws --key hoge --secret huga --profile test
Serverless: Setting up AWS...
Serverless: Saving your AWS profile in "~/.aws/credentials"...
Serverless: Success! Your AWS access keys were stored under the "test" profile.
$ cat ~/.aws/credentials
(中略)
[test]
aws_access_key_id=hoge
aws_secret_access_key=huga

プロファイルを指定して認証情報を利用する

Serverless Frameworkは、.serverless.ymlでプロファイルを明示しない場合、defaultプロファイルの認証情報を使います。defaultプロファイル以外の認証情報を利用する場合は、.serverless.ymlにプロファイル名を明記します。次のように明記すると、Serverless Frameworkは、Lambdaというプロファイルで保存されている認証情報を使います。

provider:
  name: aws
  runtime: nodejs4.3
  region: ap-northeast-1
  profile: lambda # <---ココ

感想

初めてのServerless Frameworkで見事にハマったものの、公式ドキュメントを読んで解決できました。ドキュメントが整備されているツールは素晴らしい。