

# Lambda@Edge 関数を記述および作成する
<a name="lambda-edge-create-function"></a>

Lambda@Edge を使用するには、AWS Lambda 関数のコードを*記述*します。Lambda@Edge 関数の記述については、以下のリソースを参照してください。
+  [Lambda@Edge イベント構造](lambda-event-structure.md) – Lambda@Edge で使用するイベント構造を理解します。
+ [Lambda@Edge 関数の例](lambda-examples.md) – A/B テストや HTTP リダイレクトの生成などの関数の例。

Lambda@Edge で Node.js または Python を使用するためのプログラミングモデルは、AWS リージョン で Lambda を使用するプログラミングモデルと同じです。詳細については、「*AWS Lambda デベロッパーガイド*」の「[Node.js を使用した Lambda 関数の作成](https://docs.aws.amazon.com/lambda/latest/dg/lambda-nodejs.html)」または「[Python を使用した Lambda 関数の作成](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)」を参照してください。

Lambda@Edge 関数で、`callback` パラメータを含めて、リクエストまたはレスポンスイベントの該当するオブジェクトを返します。
+ **リクエストイベント** - レスポンスに `cf.request` オブジェクトを含めます。

  レスポンスを生成している場合は、レスポンスに `cf.response` オブジェクトを含めます。詳細については、「[リクエストトリガーでの HTTP レスポンスを生成する](lambda-generating-http-responses.md#lambda-generating-http-responses-in-requests)」を参照してください。
+ **レスポンスイベント** - レスポンスに `cf.response` オブジェクトを含めます。

独自のコードを記述するか、いずれかの例を使用した後で、Lambda で関数を作成します。関数を作成したり、既存の関数を編集したりするには、以下のトピックを参照してください。

**Topics**
+ [Lambda@Edge 関数を作成する](lambda-edge-create-in-lambda-console.md)
+ [Lambda 関数を編集する](lambda-edge-edit-function.md)

 Lambda で関数を作成したら、トリガーと呼ばれる特定の CloudFront イベントに基づいて関数を実行するように Lambda を設定します。**詳細については、「[Lambda@Edge 関数のトリガーを追加する](lambda-edge-add-triggers.md)」を参照してください。

# Lambda@Edge 関数を作成する
<a name="lambda-edge-create-in-lambda-console"></a>

CloudFront イベントに基づく Lambda 関数を実行するように AWS Lambda をセットアップするには、この手順を実行します。<a name="lambda-edge-create-function-procedure"></a>

**ターゲットの Lambda@Edge 関数を作成するには**

1. AWS マネジメントコンソール にサインインして AWS Lambda コンソール ([https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)) を開きます。

1. 1 つ以上の Lambda 関数が既にある場合は、[**Create function**] を選択します。

   関数がない場合は、[**Get Started Now**] を選択します。

1. ページの上部にあるリージョンのリストで、[**米国東部 (バージニア北部)**] を選択します。

1. 独自のコードを使用して関数を作成するか、CloudFront の設計図で始まる関数を作成します。
   + 独自のコードを使用して関数を作成するには、[**Author from scratch**] を選択します。
   + CloudFront のブループリントを一覧表示するには、フィルタフィールドに「**cloudfront**」と入力し、**Enter** キーを選択します。

     使用するブループリントを見つけたら、ブループリントの名前を選択します｡

1. **[基本情報]** セクションで、以下の値を指定します。

   1. **名前** - 関数の名前を入力します。

   1. **ロール** – すぐに開始するには、**[テンプレートから新しいロールを作成する複数]** を選択します。**[既存のロールを選択]** または **[カスタムロールを作成]** を選択し、プロンプトに従ってこのセクションの情報を完了することもできます。

   1. **ロール名** - ロールの名前を入力します。

   1. **ポリシーテンプレート** – **[基本的な Edge Lambda のアクセス許可]** を選択します。

1. ステップ 4 で [**Author from scratch**] を選択した場合は、ステップ 7 に進んでください。

   ステップ 4 で設計図を選択した場合は、[**cloudfront**] セクションで、この関数を CloudFront ディストリビューションおよび CloudFront イベントのキャッシュに関連付ける 1 つのトリガーを作成できます。この時点で [**Remove**] を選択することをお勧めします。そのため、関数の作成時にトリガーはありません。後でトリガーを追加できます。
**ヒント**  
トリガーを追加する前に、関数をテストおよびデバッグすることをお勧めします。代わりにトリガーを追加する場合、関数を作成するとすぐに関数が実行され、世界各地の AWS ロケーションへのレプリケーションが完了し、対応するディストリビューションがデプロイされます。

1. [**関数の作成**] を選択します。

   Lambda は関数 \$1LATEST とバージョン 1 の 2 つのバージョンを作成します。\$1LATEST バージョンのみを編集できますが、コンソールに最初はバージョン 1 が表示されます。

1. 関数を編集するには、関数の ARN の下にあるページの上部にある [**Version 1**] を選択します。次に [**Versions**] タブで [**\$1LATEST**] を選択します。(その関数をそのままにしてから戻った場合、ボタンラベルは [**Qualifiers**] となります)。

1. [**Configuration**] タブで、該当する [**Code entry type**] を選択します。次に、プロンプトに従ってコードを編集またはアップロードします。

1. [**ランタイム**] で、関数のコードに基づいて値を選択します。

1. [**Tags**] セクションで、該当するタグを追加します。

1. [**Actions**] を選択し、[**Publish new version**] を選択します。

1. 新しいバージョンの関数に関する説明を入力します。

1. [**Publish**] を選択します。

1. 関数をテストおよびデバッグします。Lambda コンソールでのテストの詳細については、「AWS Lambda 開発者ガイド」の「[コンソールを使用して Lambda 関数を呼び出す](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html#get-started-invoke-manually)」を参照してください。**

1. CloudFront イベントに対して関数を実行する準備ができたら、別のバージョンを公開し、トリガーを追加する関数を編集します。詳細については、「[Lambda@Edge 関数のトリガーを追加する](lambda-edge-add-triggers.md)」を参照してください。

# Lambda 関数を編集する
<a name="lambda-edge-edit-function"></a>

Lambda@Edge 関数を作成したら、Lambda コンソールを使用して関数を編集できます。

**注意事項**  
元のバージョンのラベルは [\$1LATEST] です。
\$1LATEST バージョンのみを編集できます。
\$1LATEST バージョンを編集するたびに、新しい番号付きバージョンを公開する必要があります。
\$1LATEST のトリガーを作成することはできません。
新しいバージョンの関数を発行する場合、Lambda は以前のバージョンから新しいバージョンにトリガーを自動的にコピーしません。新しいバージョン用のトリガーを再現する必要があります。
CloudFront イベントのトリガーを関数に追加する場合、同じディストリビューション、キャッシュ動作、および同じ関数の以前のバージョン用のイベント用のトリガーが既に存在している場合、Lambda は以前のバージョンからトリガーを削除します。
トリガーを追加するなど、CloudFront ディストリビューションを更新した後で、トリガーで指定した関数が機能する前に、変更がエッジロケーションに伝達されるのを待つ必要があります。<a name="lambda-edge-edit-function-procedure"></a>

**Lambda 関数を編集するには**

1. AWS マネジメントコンソール にサインインして AWS Lambda コンソール ([https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)) を開きます。

1. ページの上部にあるリージョンのリストで、[**米国東部 (バージニア北部)**] を選択します。

1. 関数のリストで、関数の名前を選択します。

   デフォルトでは、\$1LATEST バージョンがコンソールに表示されます。以前のバージョンを表示することはできますが ([**Qualifiers**] を選択します)、編集できるのは \$1LATEST のみです。

1. [**Code (コード)**] タブの [**Code entry type (コードの入力タイプ)**] で、ブラウザでのコードの編集、.zip ファイルのアップロード、または Amazon S3 からのファイルのアップロードを選択します。

1. [**Save**] または [**Save and test**] を選択します。

1. [**Actions**] を選択し、[**Publish new version**] を選択します。

1. [**Publish new version from \$1LATEST**] ダイアログボックスで、新しいバージョンの説明を入力します。この説明は、自動的に生成されたバージョン番号とともにバージョンのリストに表示されます。

1. [**Publish**] を選択します。

   新しいバージョンが自動的に最新バージョンになります。バージョン番号はページの左上隅にある **[バージョン]**に表示されます。
**注記**  
関数のトリガーをまだ追加していない場合は、「[Lambda@Edge 関数のトリガーを追加する](lambda-edge-add-triggers.md)」を参照してください。

1. [**Triggers**] タブを選択します。

1. [**Add trigger**] を選択します。

1. [**Add trigger (トリガーの追加)**] ダイアログボックスでチェックボックスをオンにし、[**CloudFront**] を選択します。
**注記**  
関数の 1 つまたは複数のトリガーを作成済みの場合、CloudFront がデフォルトのサービスになります。

1. Lambda 関数をいつ実行するかを示す、次の値を指定します。

   1. **ディストリビューション ID **– トリガーの追加先となるディストリビューションの ID を選択します。

   1. **キャッシュ動作** – 関数を実行するオブジェクトを指定するキャッシュ動作を選択します。

   1. **CloudFront イベント** – 関数を実行させる CloudFront イベントを選択します。

   1. **Enable trigger and replicate** – このチェックボックスをオンにし、Lambda が関数を AWS リージョン に対してグローバルにレプリケートするようにします。

1. **[送信]** を選択します。

1. この関数のトリガーをさらに追加するには、ステップ 10～13 を繰り返します。

Lambda コンソールで関数をテストおよびデバッグする方法の詳細については、「AWS Lambda 開発者ガイド」の「[コンソールを使用して Lambda 関数を呼び出す](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html#get-started-invoke-manually)」を参照してください。**

CloudFront イベントに対して関数を実行する準備ができたら、別のバージョンを公開し、トリガーを追加する関数を編集します。詳細については、「[Lambda@Edge 関数のトリガーを追加する](lambda-edge-add-triggers.md)」を参照してください。