AWS

CloudFrontでLambda@Edgeを本番運用してわかった注意点

CloudFrontでLambda@Edgeを一年間運用しまして、気づいた注意点についてお話しします。

Lambdaはus-east-1(Virginia)リージョンに作る

Lambda@EdgeとしてCloudFrontに紐づけるためにはus-east-1リージョンに作る必要があります。

ただし、us-east-1に作ったとしても各リージョンに関数の複製が作成されるため、日本からアクセスした場合にも遅くなるということはありません。

各CloudFrontイベントに対して、設定できるLambda関数は1つだけ

Lambda@Edgeを設定できるCloudFrontは下記の4つがあります

  • ビューワーリクエスト
  • オリジンリクエスト
  • オリジンレスポンス
  • ビューワーレスポンス

これについてはAWSの公式のドキュメントにわかりやすい図があります。

Lambda@Edge

各イベントに設定できるLambda関数はそれぞれ1つだけですので、複数の処理を行いたい場合は、1つの関数にまとめる必要があります。

Lambda関数のエラー処理をしっかり行う

例えば、下記のようなLambda関数を作って、User-Agentに文字列を追加するとします。

exports.handler = function(event, context, callback) {
  var request = event.Records[0].cf.request;
  var user_agent = request.headers["user-agent"][0].value + " test string";
  request.headers["user-agent"] = [{"key": "User-Agent", "value":user_agent}];
  callback(null, request);
};

その場合、User-Agentがついていないリクエストが送られた場合、request.headers[“user-agent”]がundefinedとなり、ユーザーには500エラーが返されてしまいます。

私は実際に本番運用してからそのようなケースに気づきCloudFrontのアクセスログを確認したところx-edge-result-typeの項目にLambdaErrorと記録されていました。

User-Agentはほとんどのリクエストでついているため、そのようなケースは想定していなかったのですが、HTTP/1.1のRFCではUser-Agentヘッダーは必須となっていませんでした。

そのような場合は、下記のように関数を変更することで、エラーが起きないようにすることができます。

exports.handler = function(event, context, callback) {
  var request = event.Records[0].cf.request;
  if (request.headers["user-agent"]) {
    var user_agent = request.headers["user-agent"][0].value + " test string";
  } else {
    var user_agent = "test string";
  }
  request.headers["user-agent"] = [{"key": "User-Agent", "value":user_agent}];
  callback(null, request);
};

Lambdaの同時実行数の制限に気をつける

Lambda@Edge の制限

AWSアカウントにつき1000が同時実行数の制限があります。こちらはサポートに申請することで上限の緩和ができます。

関連記事

  1. AWS

    AWSでCloudFrontを使った方が良い理由

    今回はAWSでCloudFrontを使用する際に、設定しておいた方が良…

  2. PCI DSS準拠するためにAWSのセキュリティグループを使うためのポイント

    AWS

    PCI DSS準拠するためにAWSのセキュリティグループを使うためのポイント

    AWSでセキュリティグループはEC2やRDS(リレーショナルデータベー…

  3. AWS

    AWSでRDSに安全にデータを保存するための5つのポイント

    今回はAWSのRDSにデータを安全に保存する方法についてお話したい…

  4. AWSをセキュリティを高めて安全に使う方法

    AWS

    AWSをセキュリティを高めて安全に使う方法

    今回はAWSを安全に使うための方法についてご説明します。AWSは簡…

  5. AWS

    AWSでOSの脆弱性対策をする方法

    今回はAWSで作成したEC2インスタンスのOSの脆弱性対策をする方…

  6. AWS

    AWSでEC2インスタンスを安全に使うための3つの注意点

    今回はAWSでEC2インスタンスを起動した際に、安全に使うために行った…

最近の記事

  1. PCI DSS準拠するためにAWSのセキュリティグループを使うためのポイント

    AWS

    PCI DSS準拠するためにAWSのセキュリティグループを使うためのポイント
  2. AWS

    AWSでS3を安全に使うための2つのポイント
  3. AWS

    AWSでコンプライアンスのための監査ログを取得する方法
  4. AWS

    AWSを利用してPCI DSS準拠のシステムを構築する3つのメリット
  5. Amazon Linux2でOSS版tripwireを使って改ざん検知する方法

    AWS

    Amazon Linux2でOSS版tripwireを使って改ざん検知する方法
PAGE TOP