LoginSignup
3
3

More than 3 years have passed since last update.

Lambda@Edgeでとりあえずデバッグできる環境を作った時のメモ

Posted at

やりたいこと

Lambda@Edgeを使って開発する時に最小構成で動くものを作る
それを使ってデバッグしながら開発したい
言語はPython3.7(3.8は現時点でサポート外)

構成

リクエスト→CloudFront→S3
CloudWatchLogsにログを出力しつつ他は何もしないLamda@Edgeをはさむ

S3の用意

S3で適当なバケットを作る
適当なindex.htmlを置く(今回はこんな感じ)

index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head>
<title>テストホームページ</title>
</head>
<body>
<h1>テストホームページ</h1>
<p>ただいま工事中です。
</body>
</html>

バケットにパブリックアクセス権限つける
スクリーンショット 2020-01-07 12.48.49.png

バケットの「オブジェクトURL」からindex.htmlをブラウザに表示できるか確認する

表示できたらS3の設定は完了
S3の静的ホスティング設定をオンにしてindex.htmlを指定する

CloudFrontとS3の連携

調べれば山ほど資料が出てくるので割愛
CloudFrontのドメイン経由でS3にアクセスしてブラウザに表示できるか確認する
表示できたら完了

これでリクエスト→CloudFront→S3ができた
ここまでが下準備
ここにLambda@Edgeを挟む

Lambda@Edge

まずリージョン(ログインしているユーザ名の横にあるやつ)をバージニアにしてからLambda関数を作成する

Lambdaの中身をこれにする

lambda_function.py
import json

def lambda_handler(event, context):

    print('# lambda@edge start')
    print(event)

#    Viewer Response Origin Responseの場合はこっちをコメントアウトはずす 
#    cfResponse = event['Records'][0]['cf']['response']
#    return cfResponse

#    Viewer Request Origin Requestの場合はこっちをコメントアウトはずす
#    cfRequest = event['Records'][0]['cf']['request']
#    return cfRequest

・Lambda@Edgeはリクエストとレスポンスにそれぞれ必須のパラメータがあり、ない場合エラーとなってしまう

バージョンがLATESTになっている事を確認したらアクション→Lambda@Edgeへのデプロイを選択
ディストリビューションに作成したCloudFrontのIDを設定
CloudFrontイベントに設定したいLambda@Edgeのイベントを設定してデプロイをクリックするとデプロイできる

CDNだからデプロイしてもしばらくはコンテンツの配信が完了してない地域がある
CloudFrontのコンソールでstatusがin Progressからdeployedになっていれば配信完了
完了自体は体感だと数分〜數十分くらいか、日本には1~3分で配信されていたように思う

これでCloudWatchLogsのLambda実行ログを見ればコードに書いたログが出力されるはずだ
あとはLambda@Edgeでやりたい事をデバッグしながらLambdaに実装するだけとなる

Lambda@Edgeのログについて(重要)

Lambda@EdgeのCloudWatchLogsは下記の分類で別々のグループに書き出されるので注意(一番ハマった)
コンソールから実行したテストのログ
 リージョン:バージニア
 出力対象:関数ごと
Lambda@Edgeで実行したLambdaのログ
 リージョン;アクセスしたリージョン(日本ならほぼ東京)
 出力対象:関数ごと
Lambda@Edgeで実行したLambda@Edgeのログ
 リージョン;アクセスしたリージョン(日本ならほぼ東京)
 出力対象:Lambda@Edgeが紐づけられている出力対象ごと

このメモが自分を含めて誰かの役に立てる事を祈る

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