[新機能] Amazon API Gateway がクロスアカウントでLambda関数を呼び出し可能になりました
こんにちは、菊池です。
本日紹介する新機能はこちらです。
API GatewayでクロスアカウントのLambda関数がインテグレートが可能になりました。API Gatewayを利用するAWSアカウントとは異なるアカウントにデプロイしたLambda関数を呼び出し可能になります。また、同時にクロスアカウントでのLambda Authorizer(Custom Authorization)にも対応しています。
API Gatewayから異なるアカウントのLambdaを呼び出す
早速やってみました。
アカウントAでLambda関数の作成
まずは、アカウントA側でLambda関数を作成します。
関数を新規作成し、
単純な文字列を返すコードを保存します。
作成できたら、後ほど使う、関数のARNを確認しておきます。(この時点ではトリガーは何も設定されていませんね)
アカウントBでAPI Gatewayの作成
続いて、アカウントB側でAPIを作成します。
メソッドの作成でGETを選択して、Lambda関数を指定します。ここで、先ほど作成したLambda関数のARNを入力します。
保存すると、Lambdaへ権限(ポリシー)を設定するための AWS CLIコマンドが表示されます。
AWS CLIでLambda関数のポリシーを設定
Lambda関数にポリシーを設定するため、アカウントA側でAWS CLIを使って先ほどのコマンドをそのまま実行します。add-permissionコマンドですね。
$ aws lambda add-permission \ --function-name "arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:time" \ --source-arn "arn:aws:execute-api:ap-northeast-1:yyyyyyyyyyyy:zzzzzzzzzz/*/GET/" \ --principal apigateway.amazonaws.com \ --statement-id 3a0fbd2e-c7e2-4a54-961a-xxxxxxxxxx \ --action lambda:InvokeFunction { "Statement": "{\"Sid\":\"3a0fbd2e-c7e2-4a54-961a-xxxxxxxxxx\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"apigateway.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:time\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:execute-api:ap-northeast-1:yyyyyyyyyyyy:zzzzzzzzzz/*/GET/\"}}}" }
動作確認
ポリシーが設定できたら、API Gatewayからテストを実行してみます。200レスポンスで、Lambdaに記述した文字列が返ってきました。
ステージして、ブラウザでアクセスしても確認できます。
この状態で、アカウントA側のLambdaコンソールを確認すると、API Gatewayがトリガーに設定されているのがわかります。ただし、対象のAPI Gatewayは表示されないようです。
まとめ
新機能の、クロスアカウントでのAPI Gateway - Lambdaの連携を紹介しました。
環境ごとにAWSアカウントを分けている場合などでも、柔軟な設定が可能になるアップデートです。