

# Lambda@Edge 関数をトリガーできる CloudFront イベント
<a name="lambda-cloudfront-trigger-events"></a>

Amazon CloudFront ディストリビューションの各キャッシュ動作に、特定の CloudFront イベントの発生時に Lambda 関数を実行させるトリガー (関連付け) を 4 つまで追加できます。CloudFront トリガーは、次の図に示す、4 つの CloudFront イベントのいずれかに基づくことができます。

![\[Lambda 関数の CloudFront トリガーイベントが CloudFront と統合する仕組みを示す概念的なグラフィック。\]](http://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/images/cloudfront-events-that-trigger-lambda-functions.png)


Lambda@Edge 関数のトリガーに使用できる CloudFront イベントには、以下のものがあります。

**ビューワーリクエスト**  
CloudFront がビューワーからリクエストを受け取ると、リクエストされたオブジェクトが CloudFront キャッシュにあるかどうかを確認する前に関数が実行されます。  
次の場合には関数は実行されません。  
+ カスタムエラーページを取得する場合。
+ CloudFront で HTTP リクエストが自動的に HTTPS にリダイレクトされる場合 ([[ビューワープロトコルポリシー](DownloadDistValuesCacheBehavior.md#DownloadDistValuesViewerProtocolPolicy)] の値が **[Redirect HTTP to HTTPS]** の場合)

**オリジンリクエスト**  
CloudFront がリクエストをオリジンに転送したときに*のみ*、関数が実行されます。リクエストされたオブジェクトが CloudFront キャッシュ内にある場合、関数は実行されません。

**オリジンレスポンス**  
CloudFront がオリジンからのレスポンスを受け取った後、レスポンス内のオブジェクトをキャッシュする前に関数が実行されます。関数は、オリジンからエラーが返された場合でも実行されることに注意してください。  
次の場合には関数は実行されません。  
+ リクエストされたファイルが CloudFront キャッシュ内にあり、その有効期限が切れていない場合。
+ オリジンリクエストイベントによってトリガーされた関数からレスポンスが生成された場合。

**ビューワーレスポンス**  
リクエストされたファイルがビューワーに返される前に関数が実行されます。ファイルが CloudFront キャッシュ内に既に存在するかどうかに関係なく、関数が実行されることに注意してください。  
次の場合には関数は実行されません。  
+ オリジンが HTTP ステータスコードとして 400 以上を返した場合。
+ カスタムエラーページが返された場合。
+ ビューワーリクエストイベントによってトリガーされた関数からレスポンスが生成された場合。
+ CloudFront で HTTP リクエストが自動的に HTTPS にリダイレクトされる場合 ([[ビューワープロトコルポリシー](DownloadDistValuesCacheBehavior.md#DownloadDistValuesViewerProtocolPolicy)] の値が [**Redirect HTTP to HTTPS**] の場合)

同じキャッシュ動作に複数のトリガーを追加する場合、各トリガーに対して同じ関数を実行することも、異なる関数を実行することもできます。また、複数のディストリビューションに同じ関数を関連付けることもできます。

**注記**  
CloudFront イベントが Lambda 関数の実行をトリガーすると、その関数が終了するまで CloudFront は続行できません。**  
例えば、CloudFront ビューワーリクエストイベントによって Lambda 関数がトリガーされると、その Lambda 関数が実行を終了するまで、CloudFront からビューワーにレスポンスは返されず、リクエストはオリジンに転送されません。  
つまり、Lambda 関数をトリガーするリクエストごとにリクエストのレイテンシーが長くなるため、関数をできるだけ速く実行する必要があります。