AWS Lambda@Edgeを作成する方法

AWS Lambda@Edgeを作成する方法

前提
CloudFront + S3構築済

CloudFront経由した後(Origin Request)でURIを書き換えたかったのでLambda@Edgeを使ってみました。

BASIC認証などもLambda@Edgeで出来るようです。

パスの書き換えはCloudFrontのOrigin Pathで行うことも可能です。

AWS CloudFront+S3で署名付きCookieでプライベートコンテンツを配信する方法

バージニア北部のみなど制限事項がある

2020/01/08時点でLambda@Edgeはバージニア北部のみ対応しています。

node.js10.x対応(node.js12.x未対応)です。その他色々制限があります。参考サイト:Lambda@Edge の制限

Lambda@Edge内のconsole.log()が、バージニア北部で吐かれず、東京リージョンのCloudWatchに吐かれます。

エッジだから近くに吐かれるのでしょうか、、。

Lambdaのバージョン指定したARNを指定する必要がある

ただ単にバージニア北部でLambdaを作成してもLambda@Edgeにはなりません。

まずLambda@Edge用のロールを作成します。

「AWSLambdaBasicExecutionRole」ポリシーをアタッチしたロールを作成します。

lambda.amazonaws.com、edgelambda.amazonaws.comを信頼関係に追加します。

参考サイト:Lambda@Edge 用の IAM アクセス権限とロールの設定

次にバージニア北部でLambdaを作成し、実行ロールに先ほどのロールを指定します。

AWS Lambda@Edgeを作成する方法

「アクション」-「Lambda@Edgeへのデプロイ」を選択します。

AWS Lambda@Edgeを作成する方法

「デプロイ」を押します。これで、バージョン1のLambda@Edgeが作成されました。

AWS Lambda@Edgeを作成する方法

右上のARNが、CloudFrontの「Behaviors」に自動で設定されているはずです。

ちなみにこちらは、手動で新しいバージョンを発行し、「Behaviors」にコピペしてもOKです。

AWS Lambda@Edgeを作成する方法

各エッジに反映されるまで時間がかかるのかもしれませんが、約20分ほど「InProgress」の状態で、そのあと「Deployed」となります。

S3のファイルにアクセスする

Lambda@Edgeの設定が完了したら、CloudFront経由でS3のファイルにアクセスしてみます。

東京リージョンのCloudWatchログからLambda@Edgeが実行されていることが確認できます。

コメント

タイトルとURLをコピーしました