

# 関数を作成する
<a name="create-function"></a>

関数は 2 段階で作成します。

1. 関数コードを JavaScript として作成します。CloudFront コンソールのデフォルトの例を使用することも、独自に記述することもできます。詳細については、以下の各トピックを参照してください。
   + [関数コードを記述する](writing-function-code.md)
   + [CloudFront Functions のイベント構造](functions-event-structure.md)
   + [CloudFront の CloudFront Functions の例](service_code_examples_cloudfront_functions_examples.md)

1. CloudFront を使用して関数を作成し、コードを含めます。コードは関数内にあります (リファレンスとしてではありません)。

------
#### [ Console ]

**関数を作成するには**

1. CloudFront コンソール ([https://console.aws.amazon.com/cloudfront/v4/home#/functions](https://console.aws.amazon.com/cloudfront/v4/home#/functions)) にサインインし、**[関数]** ページを選択します。

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

1. AWS アカウント内での一意な関数名を入力し、Java Script バージョンを選択して、**[続行]** を選択します。新しい関数の詳細ページが表示されます。
**注記**  
関数で [[キーと値のペア]](kvs-with-functions.md) を使用する場合は、Java Script ランタイム 2.0 を選択する必要があります。

1. **[関数コード]** セクションで、**[ビルド]** タブを選択し、関数コードを入力します。**[ビルド]** タブに含まれるサンプルコードは、関数コードの基本的な構文を示しています。

1. [**Save changes**] (変更の保存) をクリックします。

1. 関数コードでキーと値のペアを使用する場合は、キー値ストアを関連付ける必要があります。

   キー値ストアは、関数の作成時に関連付けることができます。または、後で[関数を更新](update-function.md)して関連付けることもできます。

   キーと値のストアを今すぐ関連付けるには、次の手順に従います。
   + **[KeyValueStore を関連付け]** セクションに移動して、**[既存の KeyValueStore を関連付け]** を選択します。
   + 関数のキーと値のペアを含むキーバリューストアを選択し、**[KeyValueStore を関連付ける]** を選択します。

   CloudFront はストアを直ちに関数に関連付けます。関数を保存する必要はありません。

------
#### [ CLI ]

CLI を使用する場合、通常は最初に関数コードをファイルに作成し、次に AWS CLI を使用して関数を作成します。

**関数を作成するには**

1. 関数コードをファイルに作成し、コンピュータが接続できるディレクトリに保存します。

1. 次の例に示すようにコマンドを実行します。この例では、`fileb://` 表記を使用してファイルを渡します。コマンドを読みやすくするために改行も含まれています。

   ```
   aws cloudfront create-function \
       --name MaxAge \
       --function-config '{"Comment":"Max Age 2 years","Runtime":"cloudfront-js-2.0","KeyValueStoreAssociations":{"Quantity":1,"Items":[{"KeyValueStoreARN":"arn:aws:cloudfront::111122223333:key-value-store/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"}]}}' \
       --function-code fileb://function-max-age-v1.js
   ```
**メモ**  
`Runtime` – Java Script のバージョン。関数で[キーと値のペア](kvs-with-functions.md)を使用するには、バージョン 2.0 を指定する必要があります。
`KeyValueStoreAssociations` – 関数がキーと値のペアを使用する場合、関数の初回作成時にキー値ストアを関連付けることができます。または、`update-function` を使用して後で関連付けることもできます。各関数に関連付けることができるキー値ストアは 1 つだけのため、`Quantity` は常に `1` です。

   コマンドが成功した場合は、以下のような出力が表示されます。

   ```
   ETag: ETVABCEXAMPLE
   FunctionSummary:
     FunctionConfig:
       Comment: Max Age 2 years
       Runtime: cloudfront-js-2.0
       KeyValueStoreAssociations= \
         {Quantity=1, \
         Items=[{KeyValueStoreARN='arn:aws:cloudfront::111122223333:key-value-store/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111'}]} \
     FunctionMetadata:
       CreatedTime: '2021-04-18T20:38:56.915000+00:00'
       FunctionARN: arn:aws:cloudfront::111122223333:function/MaxAge
       LastModifiedTime: '2023-11-19T20:38:56.915000+00:00'
       Stage: DEVELOPMENT
     Name: MaxAge
     Status: UNPUBLISHED
   Location: https://cloudfront.amazonaws.com/2020-05-31/function/arn:aws:cloudfront:::function/MaxAge
   ```

   ほとんどの情報はリクエストから繰り返されます。その他の情報は CloudFront によって追加されます。
**メモ**  
`ETag` – この値は、キー値ストアを変更するたびに変わります。この値と関数名を使用して、以後、この関数を参照します。必ず現在の `ETag` を使用してください。
`FunctionARN` – CloudFront 関数の ARN。
111122223333 – AWS アカウント。
`Stage` – 関数のステージ (`LIVE` または `DEVELOPMENT`）。
`Status` – 関数のステータス (`PUBLISHED` または `UNPUBLISHED`)。

------

関数を作成すると、`DEVELOPMENT` ステージに追加されます。関数は、[テスト](test-function.md)してから[発行](publish-function.md)することをお勧めします。関数を発行すると、関数のステージは `LIVE` に変わります。