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を作成し、実行ロールに先ほどのロールを指定します。
「アクション」-「Lambda@Edgeへのデプロイ」を選択します。
「デプロイ」を押します。これで、バージョン1のLambda@Edgeが作成されました。
右上のARNが、CloudFrontの「Behaviors」に自動で設定されているはずです。
ちなみにこちらは、手動で新しいバージョンを発行し、「Behaviors」にコピペしてもOKです。
各エッジに反映されるまで時間がかかるのかもしれませんが、約20分ほど「InProgress」の状態で、そのあと「Deployed」となります。
S3のファイルにアクセスする
Lambda@Edgeの設定が完了したら、CloudFront経由でS3のファイルにアクセスしてみます。
東京リージョンのCloudWatchログからLambda@Edgeが実行されていることが確認できます。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント