Lambda@Edgeを作成する際にハマったポイント

記事タイトルとURLをコピーする

こんにちは、SRE1課の古川です。最近は豆腐にマジックソルトをかけて食べるのが好きです。
今回はLambda@Edge作成時にとある部分でハマってしまったので、備忘録としてブログに書こうと思います。

Lambda@Edgeとは

Lambda@Edgeとは何かについて簡単に説明していきます。

公式では以下の説明ですね。

アプリケーションのユーザーに近いロケーションでコードを実行できるため、パフォーマンスが向上し、待ち時間が短縮されます。

参考:

Lambda@Edge | AWS

LambdaとCloudFrontを組み合わせることで、ユーザーに近いエッジロケーションでコードが実行できるようになります。

ハマったポイント

Lambda@Edgeの作成はそこまで複雑ではないため「簡単~~!」とナメていました...

ざっくりとしたLambda@Edge作成方法↓
1.CloudFrontのディストリビューションを作成する。
2.Lambda関数をバージニア北部で作成する。
3.該当Lambda関数でバージョンを発行する。
4.発行したバージョンのトリガーにCloudFrontを設定する。

参考: Lambda@Edge 関数の作成と使用の開始 - Amazon CloudFront

しかし、手順4「発行したバージョンのトリガーにCloudFrontを設定する。」際にエラーが発生してしまいました。

エラー内容はこれです↓

InvalidLambdaFunctionAssociationException: The function execution role must be assumable with edgelambda.amazonaws.com as well as lambda.amazonaws.com principals. Update the IAM role and try again.

Lambda関数に付けているIAMロールがエラー原因ということは分かりましたが、IAMロールのポリシー内容には特に問題がなく、どこを直せばよいのか分かりませんでした。

エラー原因

エラーの原因はIAMロールの「信頼関係」でした。

Lambda@Edge用のLambda関数にアタッチしているIAMロールには信頼関係に「edgelambda.amazonaws.com」がなければいけません。 f:id:swx-tomoe-furukawa:20210621120957p:plain

信頼関係に「edgelambda.amazonaws.com」がない場合、【信頼関係の編集】をクリックし、「Service」に「edgelambda.amazonaws.com」を追記します。

以下、信頼関係の書き方の例です。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "edgelambda.amazonaws.com",
          "lambda.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

このエラーが発生した経緯

私の場合、あらかじめ作成しておいたIAMロールをLambda関数にアタッチしたことが、このエラーに遭遇してしまった理由でした。
(※「前もって作成しておくことが悪い!」と言いたいのではありません。これはあくまでも私がミスをしてしまった経緯の話です!)

AWS公式の手順ではこんな感じでした↓

1.「AWS ポリシーテンプレートから新しいロールを作成」を選択する。
2.ポリシーテンプレートで「基本的な Lambda@Edge のアクセス権限(Basic Edge Lambda permissions)」を選択する。

f:id:swx-tomoe-furukawa:20210621122547p:plain

参考: Lambda コンソールで Lambda@Edge 関数を作成する - Amazon CloudFront

この手順でロールを作成・アタッチしていれば問題なくLambda@Edge用のIAMロールを作成することができるはずでした…

おわりに

「どうしても前もってIAMロールを作成しておきたいんだ!」という場合には信頼関係を必ずチェック!

あらかじめIAMロールを作成する必要がない場合は、AWS公式の手順で作成する!

古川智絵 (執筆記事の一覧)

2020年新卒入社 技術課(SRE1課)に所属 好きな食べ物はみそ汁