LoginSignup
2
4

More than 3 years have passed since last update.

Serverless FrameworkでIAMロールを使ってデプロイする方法

Posted at

Serverless FrameworkでIAMロールを使ってデプロイしようとしてハマったときのメモ。
結論としては、.aws/configだけではなく、.aws/credentialsにもrole_arnとsource_profileの設定をすればOK。

環境

Serverless Framework

$ serverless --version
Framework Core: 1.69.0
Plugin: 3.6.9
SDK: 2.3.0
Components: 2.30.5

AWSのconfigとcredentials

assume roleしてadmin権限でcli実行するprofileを下記のように設定。

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

[profile admin]
region = ap-northeast-2
role_arn = arn:aws:iam::NNNNNNNNNNNN:role/xxxxxxxx-yyyyyyyy
source_profile = default

credentialsファイルはdefaultのみ、下記のように設定。

$ cat ~/.aws/credentials 
[default]
aws_access_key_id = XXXXXXXXXXXXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

Terminalからaws cliコマンドを直接実行する分には、この設定で問題ない。

現象

serverless frameworkを使って、AWS Lambdaのデプロイを試みると、profileが見つからないエラーが表示されて、処理が中断する。参照して欲しいprofileは--aws-profileで設定しているはずなのに...。

 serverless deploy --aws-profile admin

  Error --------------------------------------------------

  Error: Profile admin does not exist
      at Object.addProfileCredentials (/Users/shizuku/.nodebrew/node/v12.16.2/lib/node_modules/serverless/lib/plugins/aws/provider/awsProvider.js:102:15)
      at AwsProvider.getCredentials (/Users/shizuku/.nodebrew/node/v12.16.2/lib/node_modules/serverless/lib/plugins/aws/provider/awsProvider.js:3
...

対策

awsのcredentialsファイルの方にも、configファイルと同様のプロファイル名のエントリを追記して、role_arnとsource_profileを記載する。

$ cat ~/.aws/credentials 
[default]
aws_access_key_id = XXXXXXXXXXXXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
[admin]
region = ap-northeast-2
role_arn = arn:aws:iam::NNNNNNNNNNNN:role/xxxxxxxx-yyyyyyyy
source_profile = default
2
4
0

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
2
4