

# 相互 TLS (ビューワー) 検証用の CloudFront Connection Functions を作成する
<a name="create-connection-functions"></a>

CloudFront Connection Function は、2 つのステージで作成します。

1. 関数コードを JavaScript として作成します。CloudFront コンソールのデフォルトの例を使用することも、独自に記述することもできます。詳細については、以下の各トピックを参照してください。
   + mTLS 検証用の CloudFront Connection Function コードを記述する
   + CloudFront Connection Function のイベント構造とレスポンス形式
   + 接続関数のコード例

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

**Topics**
+ [CloudFront コントロール](#create-connection-function-console)
+ [AWS CLI](#create-connection-function-cli)

## CloudFront コントロール
<a name="create-connection-function-console"></a>

**Connection Function を作成するには**

1. AWS マネジメントコンソールにサインインし、[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) で CloudFront コンソールを開きます。

1. [**関数の作成**] を選択してください。

1. AWS アカウント内で一意の関数名を入力し、関数タイプとして **[接続関数]** を選択し、**[続行]** を選択します。

1. 新しい Connection Function の詳細ページが表示されます。
**注記**  
接続関数は JavaScript ランタイム 2.0 のみをサポートします。関数で CloudFront Connection Function KeyValueStore 統合を使用するには、このランタイムバージョンを使用する必要があります。

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

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

1. Connection Function コードが証明書失効チェックまたはデバイス検証に KeyValueStore を使用する場合、KeyValueStore を関連付ける必要があります。

   KeyValueStore は、関数を最初に作成する時に関連付けることができます。または、後で Connection Functions を関連付けることで関連付けることができます。

   KeyValueStore を今すぐ関連付けるには、次の手順に従います。
   + **[KeyValueStore を関連付け]** セクションに移動して、**[既存の KeyValueStore を関連付け]** を選択します。
   + Connection Function の証明書データを含む KeyValueStore を選択し、次に **[KeyValueStore を関連付ける]** を選択します。

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

## AWS CLI
<a name="create-connection-function-cli"></a>

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

**Connection Function を作成するには**

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

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

   ```
   aws cloudfront create-connection-function \
       --name CertificateValidator \
       --connection-function-config '{
           "Comment":"Device certificate validation",
           "Runtime":"cloudfront-js-2.0",
           "KeyValueStoreAssociations":{
               "Quantity":1,
               "Items":[{
                   "KeyValueStoreARN":"arn:aws:cloudfront::111122223333:key-value-store/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
               }]
           }
       }' \
       --connection-function-code fileb://certificate-validator.js
   ```
**注記**  
**ランタイム** - 接続関数は JavaScript ランタイム 2.0 (cloudfront-js-2.0) のみをサポートします。
**KeyValueStoreAssociations** - Connection Function が証明書の検証に KeyValueStore を使用する場合、関数の初回作成時に KeyValueStore を関連付けることができます。または、後で update-connection-function を使用して関連付けることもできます。各 Connection Function に関連付けることができる KeyValueStore は 1 つだけのため、Quantity は常に 1 です。

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

   ```
   ETag: ETVABCEXAMPLE
   ConnectionFunctionSummary:
     ConnectionFunctionConfig:
       Comment: Device certificate validation
       Runtime: cloudfront-js-2.0
       KeyValueStoreAssociations:
         Quantity: 1
         Items:
           - KeyValueStoreARN: arn:aws:cloudfront::111122223333:key-value-store/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111
     ConnectionFunctionMetadata:
       CreatedTime: '2024-09-04T16:32:54.292000+00:00'
       ConnectionFunctionARN: arn:aws:cloudfront::111122223333:connection-function/CertificateValidator
       LastModifiedTime: '2024-09-04T16:32:54.292000+00:00'
       Stage: DEVELOPMENT
     Name: CertificateValidator
     Status: UNPUBLISHED
   Location: https://cloudfront.amazonaws.com/2020-05-31/connection-function/arn:aws:cloudfront:::connection-function/CertificateValidator
   ```

   ほとんどの情報はリクエストから繰り返されます。その他の情報は CloudFront によって追加されます。
**注記**  
**ETag** - この値は、Connection Function を変更するたびに変わります。関数を更新または公開するには、この値が必要です。
**ステージ** - 新しい接続関数は開発ステージで開始されます。関数をディストリビューションに関連付ける前に発行してライブステージに移行する必要があります。
**ステータス** - 関数のステータスは、ライブステージに発行するまで未発行です。