28
23

More than 3 years have passed since last update.

Lambda@Edgeについてまとめる

Posted at

はじめに

Lambda@Edgeを初めて使い、色々戸惑うことが多かったため調べたことをまとめる。
また、都度追加していく。

Lambda@Edgeとは

Lambda@EdgeとはCloudFrontの機能の1つで、CloudFrontのエッジサーバでコードを実行するLambda関数のこと。ユーザーに近い場所でコードが実行されることでアプリケーションのパフォーマンスが向上する。
CloudFrontのイベントをトリガーとしてコードを実行する。

トリガー

上述の通り、CloudFrontのイベントをトリガーとし、イベントがあったCloudFrontと同リージョンで起動する。指定できるCloudFrontのイベントは以下の4つ。

1.ビューワーリクエスト
2.ビューワーレスポンス
3.オリジンリクエスト
4.オリジンレスポンス
スクリーンショット 2019-12-17 19.53.34.png
Lambda@Edgeのトリガーをビューワーリクエストに設定すると、CloudFrontがキャッシュを保有しているかに関わらずビューワーからリクエストがある度にLambdaが起動する。キャッシュがある場合に起動させたくない場合はトリガーを オリジンリクエスト に設定する。

ログ

Lambda@EdgeのログはLambda同様CloudWatchLogsに保存されるが、Lambda関数が起動したエッジサーバがあるリージョンのCloudWatchLogsに保存される。

Lambda@Edgeの作成する際の注意

リージョン

Lambda@Edgeはバージニア北部リージョンでLambda関数を作成する。

作成方法はLambda関数と同様

恥ずかしい話ですが、Lmadba@Edgeを使用する前、Lambda@Edgeというサービスがあるものだと思っていたんですが、Lambda関数をバージニア北部リージョンで作成し、CloudFrontのイベントをトリガーとすることでLambda@Edgeになるということみたい。

IAMロール

Lambda@EdgeにアタッチするIAMロールは、サービスプリンシパル lambda.amazonaws.comedgelambda.amazonaws.com が引き受けることができるロールである必要があるため、以下の信頼ポリシーを記述したIAMロールを作成する。

ロールの信頼ポリシー
{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Effect": "Allow",
         "Principal": {
            "Service": [
               "lambda.amazonaws.com",
               "edgelambda.amazonaws.com"
            ]
         },
         "Action": "sts:AssumeRole"
      }
   ]
}

IAMポリシーを作成

IAMポリシー
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateServiceLinkedRole"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "lambda:GetFunction",
                "lambda:EnableReplication"
            ],
            "Resource": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:<関数名>:<バージョン>"
        },
        {
            "Effect": "Allow",
            "Action": [
                "cloudfront:UpdateDistribution"
            ],
            "Resource":"arn:aws:cloudfront::xxxxxxxxxxxx:distribution/<ディストリビューションID>"
        }
    ]
}

関数の編集後はCloudFrontにデプロイする

関数を編集して保存後CloudFrontにデプロイして、編集内容が各エッジサーバに反映される。
ちなみに、Lambda関数はバージョン管理しておりデプロイする際に自動でバージョンアップされ、それがデプロイされる。

参考

Lambda@Edge
Lambda@Edge 用の IAM アクセス権限とロールの設定

28
23
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
28
23