

# オリジン変更のヘルパーメソッド
<a name="helper-functions-origin-modification"></a>

このセクションは、CloudFront Functions コード内のリクエストで使用されているオリジンを動的に更新または変更する場合に適用されます。オリジンは、*ビューワーリクエスト* CloudFront Functions でのみ更新できます。CloudFront Functions には、オリジンを動的に更新または変更するためのヘルパーメソッドを提供するモジュールがあります。

このモジュールを使用するには、JavaScript ランタイム 2.0 を使用して CloudFront 関数を作成し、関数コードの最初の行に次のステートメントを含めます。

```
import cf from 'cloudfront';
```

詳細については、「[CloudFront Functions の JavaScript ランタイム 2.0 の機能](functions-javascript-runtime-20.md)」を参照してください。

**注記**  
テスト API およびテストコンソールページでは、オリジンの変更が発生したかどうかをテストしません。ただし、テストにより、関数コードがエラーなしで実行されることが保証されます。

## CloudFront Functions と Lambda@Edge のどちらかを選択する
<a name="origin-modification-considerations"></a>

CloudFront Functions または Lambda@Edge のどちらかを使用してオリジンを更新できます。

CloudFront Functions を使用してオリジンを更新する場合は、*ビューワーリクエスト*イベントトリガーを使用します。つまり、この関数を使用するたびに、このロジックがすべてのリクエストで実行されます。Lambda@Edge を使用する場合、オリジン更新機能は*オリジンリクエスト*イベントトリガーに存在します。つまり、このロジックはキャッシュミス時にのみ実行されます。

どちらを選択するかは、ワークロードと、ディストリビューションでの CloudFront Functions と Lambda@Edge の既存の使用状況に大きく依存します。以下の考慮事項は、CloudFront Functions と Lambda@Edge のどちらを使用してオリジンを更新するかを決定するのに役立ちます。

CloudFront Functions は、以下の場合に最も役立ちます。
+ リクエストが動的である (つまりキャッシュできない) ため、常にオリジンに送信される場合。CloudFront Functions は、パフォーマンスを向上させ、全体的なコストを削減します。
+ すべてのリクエストで動作する既存のビューワーリクエスト CloudFront 関数が既にある場合。オリジン更新ロジックを既存の関数内に追加できます。

CloudFront Functions を使用してオリジンを更新するには、以下のトピックでヘルパーメソッドを参照してください。

Lambda@Edge は、以下の場合に最も役立ちます。
+ 高度にキャッシュ可能なコンテンツがある場合。CloudFront Functions はすべてのリクエストで実行されるのに対して、Lambda@Edge はキャッシュミス時にのみ実行されるため、コスト効率が向上します。
+ 既存のオリジンリクエスト Lambda@Edge 関数が既にある場合。オリジン更新ロジックを既存の関数内に追加できます。
+ オリジン更新ロジックで、Amazon DynamoDB や Amazon S3 など、サードパーティのデータソースからデータを取得する必要がある場合。

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

## updateRequestOrigin() メソッド
<a name="update-request-origin-helper-function"></a>

`updateRequestOrigin()` メソッドは、リクエストのオリジン設定を更新するために使用します。このメソッドを使用して、ディストリビューションで既に定義されているオリジンの既存のオリジンプロパティを更新したり、リクエストの新しいオリジンを定義したりできます。これを行うには、変更するプロパティを指定します。

**重要**  
`updateRequestOrigin()` で指定しない設定は、既存のオリジンの設定から*同じ設定*を継承します。

`updateRequestOrigin()` メソッドで設定するオリジンは、任意の HTTP エンドポイントが可能であり、CloudFront ディストリビューション内の既存のオリジンである必要はありません。

**注意事項**  
オリジングループの一部であるオリジンを更新する場合、オリジングループの*プライマリオリジン*のみが更新されます。セカンダリオリジンは変更されません。フェイルオーバー条件に一致する変更されたオリジンからのレスポンスコードは、セカンダリオリジンへのフェイルオーバーをトリガーします。
オリジンタイプを変更し、OAC が有効になっている場合は、`originAccessControlConfig` のオリジンタイプが新しいオリジンタイプと一致することを確認してください。
`updateRequestOrigin()` メソッドを使用して [VPC オリジン](private-content-vpc-origins.md)を更新することはできません。リクエストは失敗します。

**[リクエスト**]

```
updateRequestOrigin({origin properties})
```

`origin properties` には、以下を含めることができます。

**domainName (オプション）**  
オリジンのドメイン名。これを指定しない場合、割り当てられたオリジンのドメイン名が代わりに使用されます。    
**カスタムオリジンの場合**  
DNS ドメイン名 (`www.example.com` など) を指定します。ドメイン名ではコロン (`:`) を使用できません。IP アドレスも使用できません。ドメイン名の最大長は 253 文字です。  
**S3 オリジンの場合**  
Amazon S3 バケットの DNS ドメイン名 (`amzn-s3-demo-bucket.s3.eu-west-1.amazonaws.com` など) を指定します。この名前は最大 128 文字で、すべて小文字であることが必要です。

**hostHeader (オプション、S3 カスタムオリジンでない場合)**  
オリジンにリクエストをするときに使用するホストヘッダー。これを指定しない場合、domainName パラメータの値が使用されます。ホストヘッダーまたはドメイン名パラメータのどちらも指定されていない場合、割り当てられたオリジンのドメイン名が使用されます。また、Forward to Origin (FTO) ポリシーにホストが含まれている場合は、受信リクエストのホストヘッダーが使用されます。ホストヘッダーではコロン (`:`) を使用できません。IP アドレスも使用できません。ホストヘッダーは最大 253 文字です。

**originPath (オプション)**  
リクエストがコンテンツを検索するオリジンのディレクトリパス。パスは、先頭をスラッシュ (/) にする必要があります。末尾をスラッシュ (/) にすることはできません。例えば、`example-path/` で終わることはできません。これを指定しない場合、割り当てられたオリジンのオリジンパスが使用されます。    
**カスタムオリジンの場合**  
パスは URL でエンコードし、255 文字以内で指定する必要があります。

**customHeaders (オプション）**  
各カスタムヘッダーの名前と値のペアを指定することで、カスタムヘッダーをリクエストに含めることができます。形式は、イベント構造のリクエストヘッダーおよびレスポンスヘッダーの形式とは異なります。次のキーと値のペアの構文を使用します。  

```
{"key1": "value1", "key2": "value2", ...}
```
許可されていないヘッダーは追加できません。また、同じ名前のヘッダーを受信リクエストの `headers` にも使用することはできません。関数コードでは、ヘッダー名を小文字にする必要があります。CloudFront Functions がイベントオブジェクトを HTTP リクエストに変換し直すと、ヘッダー名の各単語の先頭文字が大文字になり、各単語がハイフンで区切られます。  
例えば、関数コードが `example-header-name` というヘッダーを追加した場合、CloudFront は、これを HTTP リクエストで `Example-Header-Name` に変換します。詳細については、「[CloudFront でオリジンリクエストに追加できないカスタムヘッダー](add-origin-custom-headers.md#add-origin-custom-headers-denylist)」と「[エッジ関数に対する制限](edge-functions-restrictions.md)」を参照してください。  
これを指定しない場合、割り当てられたオリジンの任意のカスタムヘッダーが使用されます。

**connectionAttempts (オプション）**  
CloudFront がオリジンへの接続を試行する回数。最小値は 1、最大値は 3 です。これを指定しない場合、割り当てられたオリジンの接続試行が使用されます。

**originShield (オプション）**  
これにより、CloudFront Origin Shield を有効化または更新します。Origin Shield を使用すると、オリジンの負荷を軽減できます。詳細については、「[Amazon CloudFront Origin Shield の使用](origin-shield.md)」を参照してください。これを指定しない場合、割り当てられたオリジンの Origin Shield 設定が使用されます。    
**enabled (必須）**  
Origin Shield を有効または無効にするブール式。値として `true` または `false` を使用します。  
**region (有効にする場合は必須）**  
Origin Shield の AWS リージョン。オリジンへのレイテンシーが最も低い AWS リージョンを指定します。リージョン名ではなく、リージョンコードを使用します。例えば、米国東部 (オハイオ) リージョンを指定するには、`us-east-2` を使用します。  
CloudFront Origin Shield を有効にする場合は、AWS リージョンを指定する必要があります。利用可能な AWS リージョンのリストと、オリジンに最適なリージョンを選択する方法については、「[Origin Shield の AWS リージョンを選択する](origin-shield.md#choose-origin-shield-region)」を参照してください。

**originAccessControlConfig (オプション）**  
このオリジンのオリジンアクセスコントロール (OAC) の一意の識別子。オリジンが Amazon S3、Lambda 関数 URL、MediaStore、MediaPackage V2 などの CloudFront OAC をサポートしている場合にのみ使用されます。これを指定しない場合は、割り当てられたオリジンの OAC 設定が使用されます。  
レガシーオリジンアクセスアイデンティティ (OAI) はサポートされていません。詳細については、「[AWS オリジンへのアクセスを制限する](private-content-restricting-access-to-origin.md)」を参照してください。    
**enabled (必須）**  
OAC を有効または無効にするブール式。値として `true` または `false` を使用します。  
**signingBehavior (有効にする場合は必須）**  
CloudFront が署名する (認証情報を追加する) リクエストを指定します。最も一般的なユースケースには `always` を指定します。詳細については、「[オリジンアクセスコントロールの詳細設定](private-content-restricting-access-to-s3.md#oac-advanced-settings-s3)」を参照してください。  
このフィールドには以下の値のいずれかがあります。  
+ `always` - CloudFront はすべてのオリジンリクエストに署名し、ビューワーリクエストの `Authorization` ヘッダーが存在する場合は上書きします。
+ `never` - CloudFront はオリジンリクエストに署名しません。この値は、オリジンのオリジンアクセスコントロールをオフにします。
+ `no-override` - ビューワーリクエストに `Authorization` ヘッダーが含まれていない場合、CloudFront はオリジンリクエストに署名します。ビューワーリクエストに `Authorization` ヘッダーが含まれている場合、CloudFront はオリジンリクエストに署名せず、代わりにビューワーリクエストから `Authorization` ヘッダーを渡します。
**警告**  
ビューワーリクエストから `Authorization` ヘッダーを渡すには、このオリジンアクセスコントロールに関連付けられているオリジンを使用するすべてのキャッシュ動作で、このヘッダーをオリジンリクエストポリシーに追加する必要があります。詳細については、「[ポリシーを使用してオリジンリクエストを制御する](controlling-origin-requests.md)」を参照してください。  
**signingProtocol (有効にする場合は必須）**  
OAC の署名プロトコル。CloudFront でリクエストを署名 (認証) する方法を決定します。唯一の有効な値は `sigv4` です。  
**originType (有効にする場合は必須）**  
この OAC のオリジンのタイプ。有効な値は、`s3`、`mediapackagev2`、`mediastore`、および `lambda` です。

**timeouts (オプション)**  
CloudFront がオリジンからの応答やデータ送信を待機する時間を指定できるタイムアウト。これを指定しない場合、割り当てられたオリジンのタイムアウト設定が使用されます。  
指定されていない限り、これらのタイムアウトはカスタムオリジンと Amazon S3 オリジンの両方をサポートします。  
**readTimeout (オプション)**  
`readTimeout` は、次の両方の値に適用されます。  
+ CloudFront がリクエストをオリジンに転送してからレスポンスを受け取るまでの待機時間 (秒)
+ CloudFront がオリジンからレスポンスのパケットを受け取ってから次のパケットを受け取るまでの待機時間 (秒) 
最小のタイムアウトは 1 秒、最大は 120 秒です。詳細については、「[応答タイムアウト](DownloadDistValuesOrigin.md#DownloadDistValuesOriginResponseTimeout)」を参照してください。  
**responseCompletionTimeout (オプション)**  
CloudFront からオリジンへのリクエストを開いたままにして応答を待機できる時間 (秒単位)。この時間までにオリジンから完全な応答が受信されない場合、CloudFront は接続を終了します。  
`responseCompletionTimeout` の値は、`readTimeout` の値以上にする必要があります。詳細については、「[応答完了タイムアウト](DownloadDistValuesOrigin.md#response-completion-timeout)」を参照してください。  
**keepAliveTimeout (オプション)**  
このタイムアウトはカスタムオリジンにのみ適用され、Amazon S3 オリジンには適用されません (S3 オリジン設定では、これらの設定は無視されます。)   
`keepAliveTimeout` は、レスポンスの最後のパケットを受信した後、CloudFront がオリジンへの接続を維持しようとする時間を指定します。最小のタイムアウトは 1 秒、最大は 120 秒です。詳細については、「[キープアライブタイムアウト (カスタムオリジンおよび VPC オリジンのみ)](DownloadDistValuesOrigin.md#DownloadDistValuesOriginKeepaliveTimeout)」を参照してください。  
**connectionTimeout (オプション）**  
オリジンへの接続を確立しようとするときに CloudFront が待機する秒数。最小のタイムアウトは 1 秒、最大は 10 秒です。詳細については、「[接続タイムアウト](DownloadDistValuesOrigin.md#origin-connection-timeout)」を参照してください。

**customOriginConfig (オプション）**  
`customOriginConfig` を使用して、Amazon S3 バケット*ではない*オリジンの接続設定を指定します。1 つの例外があります。S3 バケットが静的ウェブサイトホスティングで設定されている場合は、これらの設定を指定できます (他のタイプの S3 バケット設定では、これらの設定は無視されます)。`customOriginConfig` を指定しない場合、割り当てられたオリジンの設定が使用されます。    
**port (必須)**  
CloudFront がオリジンに接続するために使用する HTTP ポート。オリジンがリッスンしている HTTP ポートを指定します。  
**protocol (必須)**  
CloudFront がオリジンへの接続に使用するプロトコル (HTTP または HTTPS) を指定します。有効な値は次のとおりです。  
+ `http` – CloudFront は常に HTTP を使用してオリジンに接続します。
+ `https` – CloudFront は常に HTTPS を使用してオリジンに接続します。  
**sslProtocols (必須）**  
HTTPS 経由でオリジンに接続するときに CloudFront で使用する最小の SSL/TLS プロトコルを指定するリスト。有効な値は、`SSLv3`、`TLSv1`、`TLSv1.1`、および `TLSv1.2` です。詳細については、「[最小限のオリジン SSL プロトコル](DownloadDistValuesOrigin.md#DownloadDistValuesOriginSSLProtocols)」を参照してください。  
**ipAddressType (オプション)**  
CloudFront がオリジンへの接続に使用する IP アドレスタイプを指定します。有効な値は、`ipv4`、`ipv6`、および `dualstack` です。`ipAddressType` の変更は、`domainName` プロパティも変更される場合にのみサポートされます。

**sni (オプション、S3 カスタムオリジンでない場合)**  
Server Name Indication (SNI) は、TLS ハンドシェイクプロセスの開始時に接続しようとしているホスト名をクライアントが示す Transport Layer Security (TLS) プロトコルの拡張機能です。この値は、オリジンサーバーの TLS 証明書の共通名と一致している必要があります。それ以外の場合、オリジンサーバーがエラーをスローする可能性があります。  
これを指定しない場合、`hostHeader` パラメータの値が使用されます。ホストヘッダーが指定されない場合、`domainName` パラメータの値が使用されます。  
ホストヘッダーまたはドメイン名パラメータのどちらも指定されていない場合、割り当てられたオリジンのドメイン名が使用されます。また、Forward to Origin (FTO) ポリシーにホストが含まれている場合は、受信リクエストのホストヘッダーが使用されます。SNI ではコロン (`:`) を使用できません。IP アドレスも使用できません。SNI は最大 253 文字です。

**allowedCertificateNames (オプション、S3 カスタムオリジンでない場合)**  
CloudFront が使用する有効な証明書名のリストを含めて、オリジンサーバーとの TLS ハンドシェイク中にオリジンサーバーの TLS 証明書のドメインマッチングを検証できます。このフィールドは有効なドメイン名の配列を想定しており、`*.example.com` などのワイルドカードドメインを含めることができます。  
最大 20 個の許可された証明書名を指定できます。それぞれの証明書名には最大 64 文字を使用できます。

**Example – Amazon S3 リクエストオリジンへの更新**  
次の例では、ビューワーリクエストのオリジンを S3 バケットに変更し、OAC を有効にして、オリジンに送信されたカスタムヘッダーをリセットします。  

```
cf.updateRequestOrigin({
    "domainName" : "amzn-s3-demo-bucket-in-us-east-1.s3.us-east-1.amazonaws.com",
    "originAccessControlConfig": {
        "enabled": true,
        "signingBehavior": "always",
        "signingProtocol": "sigv4",
        "originType": "s3"
    },
    // Empty object resets any header configured on the assigned origin
    "customHeaders": {}
});
```

**Example – Application Load Balancer リクエストオリジンへの更新**  
次の例では、ビューワーリクエストのオリジンを Application Load Balancer オリジンに変更し、カスタムヘッダーとタイムアウトを設定します。  

```
cf.updateRequestOrigin({
    "domainName" : "example-1234567890.us-east-1.elb.amazonaws.com",
    "timeouts": {
        "readTimeout": 30,
        "connectionTimeout": 5
    },
    "customHeaders": {
        "x-stage": "production",
        "x-region": "us-east-1"
    }
});
```

**Example – Origin Shield が有効になっているオリジンへの更新**  
次の例では、ディストリビューションのオリジンで Origin Shield が有効になっています。関数コードは、オリジンに使用されているドメイン名のみを更新し、他のすべてのオプションパラメータを省略します。この場合、Origin Shield パラメータは更新されていないため、Origin Shield は変更されたオリジンドメイン名で引き続き使用されます。  

```
cf.updateRequestOrigin({
    "domainName" : "www.example.com"
});
```

**Example - ホストヘッダー、SNI、および許可された証明書名を更新する**  
ほとんどのユースケースでは、オリジンへのリクエストにこのタイプの変更を使用する必要はありません。これらの値の変更による影響を理解していない限り、これらのパラメータを使用しないでください。
次の例では、ドメイン名、ホストヘッダー、SNI、およびオリジンへのリクエストで許可された証明書を変更します。  

```
cf.updateRequestOrigin({ 
    "domainName": "www.example.com", 
    "hostHeader": "test.example.com", 
    "sni": "test.example.net", 
    "allowedCertificateNames": ["*.example.com", "*.example.net"],
});
```

## selectRequestOriginById() メソッド
<a name="select-request-origin-id-helper-function"></a>

ディストリビューションで既に設定されている別のオリジンを選択して、既存のオリジンを更新するには、`selectRequestOriginById()` を使用します。このメソッドは、更新されたオリジンで定義されているすべての設定を使用します。

このメソッドは、関数の実行時に使用されたのと同じディストリビューションで既に定義されているオリジンのみを受け入れます。オリジンは、オリジンの設定時に定義したオリジン名であるオリジン ID によって参照されます。

ディストリビューション内で VPC オリジンが設定されている場合は、このメソッドを使用してオリジンを VPC オリジンに更新できます。詳細については、「[VPC オリジンを使用したアクセス制限](private-content-vpc-origins.md)」を参照してください。

**注意事項**  
`selectRequestOriginById()` 関数は、相互 TLS (オリジン) が有効になっているオリジンを選択できません。この関数を使用して相互 TLS (オリジン) 対応オリジンを選択しようとすると、検証エラーが発生します。
ユースケースで相互 TLS (オリジン) を使用した動的オリジン選択が必要な場合は、代わりに `updateRequestOrigin()` を使用し、すべてのターゲットオリジンが同じクライアント証明書を使用していることを確認します。

**[リクエスト**]

```
cf.selectRequestOriginById(origin_id, {origin_overrides})
```

前の例では、`origin_id` は、関数を実行しているディストリビューション内のオリジンのオリジン名を指す文字列です。`origin_overrides ` パラメータには、次を含めることができます。

**hostHeader (オプション、S3 カスタムオリジンでない場合)**  
オリジンにリクエストをするときに使用するホストヘッダー。これを指定しない場合、`domainName` パラメータの値が使用されます。  
ホストヘッダーまたはドメイン名パラメータのどちらも指定されていない場合、割り当てられたオリジンのドメイン名が使用されます。また、Forward to Origin (FTO) ポリシーにホストが含まれている場合は、受信リクエストのホストヘッダーが使用されます。ホストヘッダーではコロン (`:`) を使用できません。IP アドレスも使用できません。ホストヘッダーは最大 253 文字です。

**sni (オプション、S3 カスタムオリジンでない場合)**  
Server Name Indication (SNI) は、TLS ハンドシェイクプロセスの開始時に接続しようとしているホスト名をクライアントが示す Transport Layer Security (TLS) プロトコルの拡張機能です。この値は、オリジンサーバーの TLS 証明書の共通名と一致している必要があります。それ以外の場合、オリジンサーバーがエラーをスローする可能性があります。  
これを指定しない場合、`hostHeader` パラメータの値が使用されます。ホストヘッダーが指定されない場合、`domainName` パラメータの値が使用されます。  
ホストヘッダーまたはドメイン名パラメータのどちらも指定されていない場合、割り当てられたオリジンのドメイン名が使用されます。また、Forward to Origin (FTO) ポリシーにホストが含まれている場合は、受信リクエストのホストヘッダーが使用されます。SNI ではコロン (`:`) を使用できません。IP アドレスも使用できません。SNI は最大 253 文字です。

**allowedCertificateNames (オプション、S3 カスタムオリジンでない場合)**  
CloudFront が使用する有効な証明書名のリストを含めて、オリジンサーバーとの TLS ハンドシェイク中にオリジンサーバーの TLS 証明書のドメインマッチングを検証できます。このフィールドは有効なドメイン名の配列を想定しており、`*.example.com` などのワイルドカードドメインを含めることができます。  
最大 20 個の許可された証明書名を指定できます。それぞれの証明書名には最大 64 文字を使用できます。

**[リクエスト**]

```
selectRequestOriginById(origin_id)
```

前の例では、`origin_id` は、関数を実行しているディストリビューション内のオリジンのオリジン名を指す文字列です。

**Example – Amazon S3 リクエストオリジンを選択する**  
次の例では、ディストリビューションに関連付けられたオリジンのリストから `amzn-s3-demo-bucket-in-us-east-1` という名前のオリジンを選択し、`amzn-s3-demo-bucket-in-us-east-1` オリジンの設定をリクエストに適用します。  

```
cf.selectRequestOriginById("amzn-s3-demo-bucket-in-us-east-1");
```

**Example – Application Load Balancer リクエストオリジンを選択する**  
次の例では、ディストリビューションに関連付けられたオリジンのリストから `myALB-prod` という名前の Application Load Balancer オリジンを選択し、`myALB-prod` の設定をリクエストに適用します。  

```
cf.selectRequestOriginById("myALB-prod");
```

**Example - Application Load Balancer リクエストオリジンを選択し、ホストヘッダーを上書きする**  
前の例のように、次の例ではディストリビューションに関連付けられたオリジンのリストから `myALB-prod` という名前の Application Load Balancer オリジンを選択し、`myALB-prod` の設定をリクエストに適用します。ただし、この例では、`origin_overrides` を使用してホストヘッダー値を上書きします。  

```
cf.overrideRequestOrigin("myALB-prod",{ 
        "hostHeader" : "test.example.com"
});
```

## createRequestOriginGroup() メソッド
<a name="create-request-origin-group-helper-function"></a>

`createRequestOriginGroup()` を使用して、高可用性を必要とするシナリオでフェイルオーバー用の[オリジングループ](high_availability_origin_failover.md#concept_origin_groups.creating)として使用する 2 つのオリジンを定義します。

オリジングループには、2 つのオリジン (プライマリとセカンダリ) と指定したフェイルオーバー基準が含まれます。CloudFront でオリジンフェイルオーバーをサポートするオリジングループを作成します。このメソッドを使用してオリジングループを作成または更新する際に、単一のオリジンではなくオリジングループを指定できます。CloudFront は、フェイルオーバー基準を使用して、プライマリオリジンからセカンダリオリジンにフェイルオーバーします。

ディストリビューションに VPC オリジンが設定されている場合は、このメソッドを使用して、VPC オリジンを使用したオリジングループを作成できます。詳細については、「[VPC オリジンを使用したアクセス制限](private-content-vpc-origins.md)」を参照してください。

**注意事項**  
`createRequestOriginGroup()` 関数は、相互 TLS (オリジン) が有効なオリジンを含むオリジングループの作成をサポートしていません。相互 TLS (オリジン) オリジンを持つオリジングループは、CloudFront Functions を介して動的に作成することはできません。
Mutual TLS (オリジン) でオリジンフェイルオーバー機能が必要な場合は、関数で動的に作成するのではなく、CloudFront ディストリビューション設定でオリジングループを直接設定します。

### リクエスト
<a name="create-origin-group-request"></a>

```
createRequestOriginGroup({origin_group_properties})
```

上記の例で、`origin_group_properties` には以下を含めることができます。

**originIds (必須）**  
`origin_ids` の配列。`origin_id` は、関数を実行するディストリビューション内のオリジンのオリジン名を指す文字列です。配列の一部として 2 つのオリジンを指定する必要があります。リストの最初のオリジンはプライマリオリジンで、2 番目のオリジンはフェイルオーバー用のセカンダリオリジンとして機能します。

**originOverrides (オプション)**  
 `{origin_overrides}` パラメータを使用して、いくつかの詳細設定を上書きできます。`origin overrides` には、以下を含めることができます。    
**hostHeader (オプション、S3 カスタムオリジンでない場合)**  
オリジンにリクエストをするときに使用するホストヘッダー。これを指定しない場合、`domainName` パラメータの値が使用されます。  
ホストヘッダーまたはドメイン名パラメータのどちらも指定されていない場合、割り当てられたオリジンのドメイン名が使用されます。また、Forward to Origin (FTO) ポリシーにホストが含まれている場合は、受信リクエストのホストヘッダーが使用されます。ホストヘッダーではコロン (`:`) を使用できません。IP アドレスも使用できません。ホストヘッダーは最大 253 文字です。  
**sni (オプション、S3 カスタムオリジンでない場合)**  
Server Name Indication (SNI) は、TLS ハンドシェイクプロセスの開始時に接続しようとしているホスト名をクライアントが示す Transport Layer Security (TLS) プロトコルの拡張機能です。この値は、オリジンサーバーの TLS 証明書の共通名と一致している必要があり、それ以外の場合、オリジンサーバーがエラーをスローする可能性があります。  
これを指定しない場合、`hostHeader` パラメータの値が使用されます。ホストヘッダーが指定されない場合、`domainName` パラメータの値が使用されます。  
ホストヘッダーまたはドメイン名パラメータのどちらも指定されていない場合、割り当てられたオリジンのドメイン名が使用されます。また、Forward to Origin (FTO) ポリシーにホストが含まれている場合は、受信リクエストのホストヘッダーが使用されます。SNI ではコロン (`:`) を使用できません。IP アドレスも使用できません。SNI は最大 253 文字です。  
**allowedCertificateNames (オプション、S3 カスタムオリジンでない場合)**  
CloudFront が使用する有効な証明書名のリストを含めて、オリジンサーバーとの TLS ハンドシェイク中にオリジンサーバーの TLS 証明書のドメインマッチングを検証できます。このフィールドは有効なドメイン名の配列を想定しており、`*.example.com` などのワイルドカードドメインを含めることができます。  
最大 20 個の許可された証明書名を指定できます。それぞれの証明書名には最大 64 文字を使用できます。

**selectionCriteria (オプション)**  
`default` オリジンフェイルオーバー条件を使用するか、`media-quality-score` ベースのフェイルオーバーロジックを使用するかを選択します。有効な値は次のとおりです。  
+ `default` は、`failoverCriteria` で指定されたステータスコードに基づいてフェイルオーバー基準を使用します。関数で `selectionCriteria` を設定しない場合、`default` が使用されます。
+ `media-quality-score` は、メディア対応ルーティング機能を使用している場合に使用されます。

**failoverCriteria (必須）**  
プライマリオリジンから返されたステータスコードの配列。このステータスコードが返されると、CloudFront はセカンダリオリジンへのフェイルオーバーをトリガーします。既存のオリジングループを上書きすると、この配列はオリジングループの元の設定で設定されたすべてのフェイルオーバーステータスコードを上書きします。  
`media-quality-score` `selectionCriteria` を使用すると、CloudFront はメディア品質スコアに基づいてリクエストのルーティングを試みます。選択されたオリジンがこの配列に設定されているエラーコードを返した場合、CloudFront は他のオリジンにフェイルオーバーします。

**Example – リクエストオリジングループを作成する**  
次の例では、オリジン ID を使用してリクエストのオリジングループを作成します。これらのオリジン ID は、この関数の実行に使用されるディストリビューションのオリジングループ設定から取得されます。  
必要に応じて、`originOverrides` を使用して、`sni`、`hostHeader`、`allowedCertificateNames` のオリジングループ設定を上書きできます。  

```
import cf from 'cloudfront';

function handler(event) {
    cf.createRequestOriginGroup({
        "originIds": [
            {
                "originId": "origin-1",
                "originOverrides": {
                    "hostHeader": "hostHeader.example.com",
                    "sni": "sni.example.com",
                    "allowedCertificateNames": ["cert1.example.com", "cert2.example.com", "cert3.example.com"]
                }
            },
            {
                "originId": "origin-2",
                "originOverrides": {
                    "hostHeader": "hostHeader2.example.com",
                    "sni": "sni2.example.com",
                    "allowedCertificateNames": ["cert4.example.com", "cert5.example.com"]
                }
            }
        ],
        "failoverCriteria": {
            "statusCodes": [500]
        }
    });
    
    event.request.headers['x-hookx'] = { value: 'origin-overrides' };
    return event.request;
}
```