

# CloudFront Functions と Lambda@Edge の違い
<a name="edge-functions-choosing"></a>

CloudFront Functions と Lambda@Edge は、どちらでもCloudFront イベントに応答してコードを実行できます。

CloudFront Functions は、以下のユースケースにおける軽量で実行時間の短い関数に最適です。
+ **キャッシュキーの正規化** – HTTP リクエスト属性 (ヘッダー、クエリ文字列、Cookie、さらには URL パス) を変換して、最適な[キャッシュキー](understanding-the-cache-key.md)を作成します。これにより、キャッシュのヒット率を向上させることができます。
+ **ヘッダー操作** – リクエストまたはレスポンスに対する HTTP ヘッダーの挿入、変更、または削除を行います。たとえば、すべてのリクエストに `True-Client-IP` ヘッダーを追加できます。
+ **URL リダイレクトまたは書き換え** – リクエスト内の情報に基づいてビューワーを他のページにリダイレクトしたり、あるパスから別のパスにすべてのリクエストを書き換えたりします。
+ **リクエストの承認** – 承認ヘッダーや他のリクエストメタデータを調べることで、JSON ウェブトークン (JWT) などのハッシュ化された承認トークンを検証します。

CloudFront Functions の使用を開始するには、「[CloudFront Functions を使用してエッジでカスタマイズする](cloudfront-functions.md)」を参照してください。

Lambda@Edge は、以下のユースケースに最適です。
+ 完了までに数ミリ秒以上かかる関数。
+ 調整可能な CPU またはメモリを必要とする機能。
+ サードパーティライブラリに依存する関数 (他の AWS のサービスとの統合のため、AWS SDK を含む)。
+ 外部サービスを使用して処理するために、ネットワークアクセスを必要とする関数。
+ ファイルシステムへのアクセスまたは HTTP リクエストの本文へのアクセスを必要とする関数。

Lambda@Edge の使用を開始するには、「[Lambda@Edge を使用してエッジでカスタマイズする](lambda-at-the-edge.md)」を参照してください。

次の表を使用して CloudFront Functions と Lambda@Edge の違いを理解すると、ユースケースのオプションを選択しやすくなります。オリジン変更ヘルパーメソッドに適用される違いについての詳細は、「[CloudFront Functions と Lambda@Edge のどちらかを選択する](helper-functions-origin-modification.md#origin-modification-considerations)」を参照してください。


|  | CloudFront Functions | Lambda@Edge | 
| --- | --- | --- | 
| プログラミング言語 | JavaScript (ECMAScript 5.1 準拠) | Node.js と Python | 
| イベントソース |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/edge-functions-choosing.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/edge-functions-choosing.html)  | 
|  [Amazon CloudFront KeyValueStore](kvs-with-functions.md) をサポートする  |  はい CloudFront KeyValueStore は [JavaScript ランタイム 2.0](functions-javascript-runtime-20.md) のみをサポートします  |  いいえ  | 
| スケール | 1 秒あたり最大数百万のリクエスト | リクエスト数: 1 リージョンあたり毎秒 10,000 件まで | 
| 関数の持続時間 | サブミリ秒 |  最大 30 秒 (ビューワーリクエスト、ビューワーレスポンス) 最大 30 秒 (オリジンリクエスト、オリジンレスポンス)  | 
|  関数の最大メモリサイズ  | 2 MB |  128 MB (ビューワーリクエスト、ビューワーレスポンス) 10,240 MB (10 GB) (オリジンリクエスト、オリジンレスポンス) 詳細については、「[Lambda@Edge のクォータ](cloudfront-limits.md#limits-lambda-at-edge)」を参照してください。  | 
| 関数コードと含まれるライブラリの最大サイズ | 10 KB |  50 MB (ビューワーリクエスト、ビューワーレスポンス) 50 MB (オリジンリクエスト、オリジンレスポンス)  | 
| ネットワークアクセス | いいえ | はい | 
| ファイルシステムへのアクセス | いいえ | はい | 
| リクエスト本文へのアクセス | いいえ | はい | 
| 位置情報とデバイスデータへのアクセス | はい |  いいえ (ビューワーリクエスト、ビューワーレスポンス) はい (オリジンリクエスト、オリジンレスポンス)  | 
| CloudFront でビルドとテストをすべて実施可能 | はい | いいえ | 
| 関数のログとメトリクス | はい | はい | 