LoginSignup
1
3

More than 5 years have passed since last update.

AWSでAPI GatewayのステージにLambdaのエイリアスを対応させた際にハマったこと&解決方法

Posted at

AWSでAPI GatewayのステージにLambdaのエイリアスを対応させた際にハマったこと&解決方法

本題まで長いです。

API GatewayのステージにLambdaのエイリアスを対応させる

API Gatewayのステージとは?

APIをデプロイする際に設定できます。

APIデプロイ時のステージ設定

このステージをいい感じに設定することで、開発用と本番用の運用ができます。

例えば、開発用ではDevelopというステージにデプロイし、本番用ではProductというステージにデプロイすることで、開発者とユーザが使用するAPIを切り替えることができます。

Lambdaのエイリアスとは?

Lambdaでは任意の状態のスナップショットをバージョンとして発行することができます。
エイリアスとは、特定のバージョンに対して付与する名前のことです。(ポインタと表現されています。)

Gitみたいなモノですね。(考え方はGitで良いと思います。)

  • Lambdaのバージョン → Gitのコミットに相当
  • Lambdaのエイリアス → Gitのタグに相当

Lambdaのバージョンとエイリアス

以下のように、Lambdaの設定画面からバージョンとエイリアスを作成することができます。

Lambdaのバージョンとエイリアスの作成方法

対応させるとは?

API GatewayのステージLambdaのエイリアスを対応させることです。

つまり、以下のことが実現できます。

  • 開発用のAPI Gateway(ステージ:Develop)から、開発用のLambda(エイリアス:Develop)を実行できる
  • 本番用のAPI Gateway(ステージ:Product)から、本番用のLambda(エイリアス:Product)を実行できる

対応させる方法

以下を参照してください。

本題:ハマったこと

ようやく本題です。

API Gatewayのステージにaliasという変数を定義し、実行するLambda関数を以下のように設定します。

実行するLambda関数の設定

設定すると、以下のような画面が表示され、「このコマンドを実行してね」と表示されます。

実行すべきコマンドが表示される

このコマンドの${stageVariables.alias}の部分は、Lambdaのエイリアスに合わせて変更するため、TestAPIGateway:DevelopTestAPIGateway:Productにして2回実行します。(今回の例の場合です。Lambdaのエイリアスに合わせてください。)

なお、AWS CLIのインストールと設定は以下を参照してください。

ようやくハマったことです。このコマンドが失敗しました。

エラーメッセージ

An error occurred (ValidationException) when calling the AddPermission operation: 1 validation error detected: Value ''arn:aws:execute-api:ap-northeast-1:xxxxxxxx:yyyyyyyyyyy/TestAPIGateway'' at 'sourceArn' failed to satisfy constraint: Member must satisfy regular expression pattern: arn:(aws|aws-us-gov):([a-zA-Z0-9\-])+:([a-z]{2}(-gov)?-[a-z]+-\d{1})?:(\d{12})?:(.*)

原因

--source-arnのあとに「'」が含まれているとNGでした。

解決方法

コマンドから「'」を取り除いて実行します。

NGのコマンド

aws lambda add-permission --function-name arn:aws:lambda:ap-northeast-1:xxxxxxxx:function:TestAPIGateway:Develop --source-arn 'arn:aws:execute-api:ap-northeast-1:xxxxxxxx:yyyyyyyyyyy/TestAPIGateway' --principal apigateway.amazonaws.com --statement-id zzzzzzzzzzzzzz --action lambda:InvokeFunction

OKのコマンド

aws lambda add-permission --function-name arn:aws:lambda:ap-northeast-1:xxxxxxxx:function:TestAPIGateway:Develop --source-arn arn:aws:execute-api:ap-northeast-1:xxxxxxxx:yyyyyyyyyyy/TestAPIGateway --principal apigateway.amazonaws.com --statement-id zzzzzzzzzzzzzz --action lambda:InvokeFunction

最後に

分かってしまえば単純な原因でしたが、解決するまで苦労しました。
同じ症状に遭遇した方の役に立てば幸いです。

1
3
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
1
3