

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# で MediaTailor と CDN を自動化する CloudFormation
<a name="automating-cdn-integration"></a>

を使用したコンテンツ配信ネットワーク (CDN) AWS Elemental MediaTailor による自動化により、広告挿入ワークフローが AWS CloudFormation 合理化され、信頼性が向上します。

このセクションでは、 AWS CloudFormation (AWS infrastructure as code service) を使用して、コンテンツ配信ネットワーク (CDN) AWS Elemental MediaTailor を自動的にセットアップする方法について説明します。前のセクションで説明したように、この統合を手動で設定できますが、 を使用すると、単一のテンプレートでプロセス全体を自動化することで、時間 CloudFormation を節約し、エラーを削減できます。

を初めて使用する場合は CloudFormation、必要なすべての AWS リソースを定義するテンプレートファイルを作成できるサービスです。このテンプレートをデプロイすると、 はそれらのリソース CloudFormation を自動的に作成して設定し、それらが正しく連携するようにします。

詳細については CloudFormation、[CloudFormation 「 ユーザーガイド](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)」を参照してください。の MediaTailor リソースタイプの詳細については CloudFormation、[AWS「::MediaTailor リソースタイプのリファレンス](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_MediaTailor.html)」を参照してください。

**Topics**
+ [を使用する理由 AWS CloudFormation](cloudformation-benefits.md)
+ [デプロイの準備](prepare-cloudformation-deployment.md)
+ [テンプレートをデプロイします。](deploy-cloudformation-template.md)
+ [デプロイされたリソースを使用する](use-deployed-resources.md)
+ [デプロイのテストと検証](test-validate-deployment.md)
+ [のデプロイ問題のトラブルシューティング](troubleshoot-deployment-issues.md)
+ [テンプレートをカスタマイズする](customize-cloudformation-template.md)
+ [テンプレートリファレンス](cloudformation-template-reference.md)

# MediaTailor と CDN の統合 CloudFormation に を使用する理由
<a name="cloudformation-benefits"></a>

AWS Elemental MediaTailor による オートメーション AWS CloudFormation は、ストリーミングワークフローを管理するブロードキャストプロフェッショナルに大きな利点をもたらします。MediaTailor をコンテンツ配信ネットワーク (CDN) で手動で設定すると、時間がかかり、エラーが発生しやすくなります。 CloudFormation 自動化を使用すると、次の利点があります。
+ **整合性**: 毎回同じ設定がデプロイされるようにし、人為的ミスを減らします。
+ **バージョン管理**: インフラストラクチャをコードとしてバージョン管理システムに保存し、変更を追跡します。
+ **迅速なデプロイ**: 手動設定ではなく、複雑な設定を数分でデプロイします。
+ **環境レプリケーション**: 開発、テスト、本番環境間で設定を簡単にレプリケートできます。
+ **ドキュメント**: テンプレート自体は、インフラストラクチャのドキュメントとして機能します。

自動ワークフローと手動設定の比較は次のとおりです。


| 手動セットアップ (複数ステップ) | 自動セットアップ (単一テンプレート) | 
| --- | --- | 
| MediaTailor 再生設定を作成する | パラメータを使用して 1 つの CloudFormation テンプレートをデプロイする | 
| CloudFront ディストリビューションを作成する | 
| キャッシュ動作を設定する | 
| セキュリティ設定をセットアップする | 

CloudFront で MediaTailor を設定するための自動ワークフローは、次のステップに従います。

1. コンテンツオリジンと広告サーバーパラメータを使用して CloudFormation テンプレートをデプロイする

1. CloudFormation は、必要なすべてのリソースを作成および設定します。
   + 広告挿入の MediaTailor 再生設定
   + 適切なキャッシュ動作を持つ CloudFront ディストリビューション
   + コンテンツ保護のセキュリティ設定

1.  CloudFormation 出力を使用して広告対応ストリーム URLs にアクセスする

1. 動的に挿入された広告でコンテンツをストリーミングする

# CDN と MediaTailor の統合の CloudFormation デプロイを準備する
<a name="prepare-cloudformation-deployment"></a>

AWS Elemental MediaTailor を使用した デプロイには、特定の前提条件と準備手順 AWS CloudFormation が必要です。を使用して MediaTailor と Amazon CloudFront CloudFormation を統合する前に、以下があることを確認してください。
+ MediaTailor、CloudFront、および CloudFormation リソースを作成するアクセス許可を持つ AWS アカウント
+ 動画コンテンツがホストされているコンテンツオリジン ( AWS Elemental MediaPackage Amazon S3 や別のオリジンサーバーなど)
+ VAST リクエストに応答できる広告決定サーバー (ADS)

 CloudFormation テンプレートをデプロイする前に、以下の必須パラメータを収集します。

`AdServerUrl`  
動的広告挿入用の VAST 広告サーバーの URL。テスト用に静的 VAST エンドポイントが用意されています。

`ContentOriginDomainName`  
プロトコルを使用しないコンテンツオリジンのドメイン名 (、*mediapackage-domain.mediapackagev2.us-west-2.amazonaws.com**mybucket.s3.amazonaws.com*、*custom-origin.example.com* など）。http:// または https:// プレフィックスやパスを含めないでください。

`ContentOriginType`  
コンテンツオリジンのタイプ:  
+ *mediapackagev2*: AWS Elemental MediaPackage オリジンの場合
+ *s3*: Amazon S3 バケットオリジンの場合
+ *custom*: 他のオリジンタイプの場合

テンプレートは、パーソナライズされた広告でコンテンツを配信するために連携する複数の AWS リソースを作成します。各コンポーネントの動作を以下に示します。

## オリジンアクセスコントロール
<a name="origin-access-control-resource"></a>

オリジンアクセスコントロール (OAC) は、オリジンサーバーから直接ではなく CloudFront 経由でのみコンテンツにアクセスできるようにするセキュリティ機能です。これにより、コンテンツを不正アクセスから保護できます。

MediaPackage および Amazon S3 オリジンの場合、テンプレートはコンテンツへのアクセスを保護するためのオリジンアクセスコントロール (OAC) リソースを作成します。

## MediaTailor の再生設定
<a name="mediatailor-resource"></a>

MediaTailor 再生設定は、広告挿入を処理するコアコンポーネントです。オリジンからコンテンツを受信し、広告サーバーから広告をリクエストし、それらを各ビューワーのパーソナライズされたストリームに結合します。

テンプレートは、以下の設定で MediaTailor 再生設定を作成します。
+ CloudFront ディストリビューションを指す動画コンテンツソース
+ 指定した VAST エンドポイントに設定された広告決定サーバー URL
+ ライブストリーム中の広告挿入のライブプリロール設定
+ 適切なセグメント URL プレフィックスを持つ CDN 設定

## CloudFront 配信
<a name="cloudfront-resource"></a>

CloudFront ディストリビューションは、低レイテンシーで世界中の視聴者にコンテンツを配信します。さまざまなタイプのリクエスト (マニフェスト、コンテンツセグメント、広告セグメント) を処理し、適切なオリジンにルーティングします。

CDNs、いくつかの重要な用語があります。

オリジン  
元のコンテンツが保存されているサーバー (MediaPackage や Amazon S3 など)

キャッシュ動作  
さまざまなタイプのコンテンツがどのようにキャッシュおよび配信されるかを決定するルール

キャッシュポリシー  
コンテンツのキャッシュ期間とキャッシュに影響するリクエストコンポーネントを制御する設定

テンプレートは、以下のコンポーネントを使用して CloudFront ディストリビューションを作成します。
+ 3 つのオリジン:
  + コンテンツオリジン (MediaPackage、Amazon S3、またはカスタム)
  + MediaTailor マニフェストオリジン
  + MediaTailor セグメントのオリジン
+ 適切なパターンで動作をキャッシュします。
  + コンテンツセグメントのデフォルトの動作
  + MediaTailor 広告セグメントの動作 (/tm/\$1)
  + MediaTailor インタースティシャルメディアの動作 (/v1/i-media/\$1)
  + パーソナライズされたマニフェストの動作 (/v1/\$1)
  + セグメントリダイレクトリクエストの動作 (/segment/\$1)
+ 動作ごとに最適化されたキャッシュポリシー:
  + `CachingOptimized` キャッシュ可能なコンテンツの
  + `CachingDisabled` パーソナライズされたマニフェスト用
+ 適切なヘッダー転送を確保するためのオリジンリクエストポリシー
+ CORS サポートのレスポンスヘッダーポリシー

# CDN と MediaTailor の統合用の CloudFormation テンプレートをデプロイする
<a name="deploy-cloudformation-template"></a>

AWS Elemental MediaTailor AWS CloudFormation テンプレートを使用したデプロイは、テンプレートが作成する内容を理解すると簡単です。このプロセスには約 15～30 分かかり、ほとんどの時間は CloudFront ディストリビューションのデプロイを待つために費やされます。

 CloudFormation テンプレートをデプロイし、自動広告挿入ワークフローを設定するには:

**MediaTailor CloudFormation テンプレートをデプロイするには**

1.  CloudFormation テンプレートを AWS Elemental MediaTailor GitHub リポジトリからダウンロードするか、 からコピーします[AWS CloudFormation AWS Elemental MediaTailor および Amazon CloudFront 統合の テンプレートリファレンス](cloudformation-template-reference.md)。

1. [CloudFormation コンソール](https://console.aws.amazon.com/cloudformation/home)を開きます。

1. **スタックの作成** > **新しいリソースを使用する (標準)** を選択します。

1. **テンプレートを指定** **で、テンプレートファイルをアップロード** を選択し、テンプレートをアップロードします。

1. スタック名を入力し、必要なパラメータの値を指定します。
   + **AdServerUrl**: VAST 広告サーバーの URL (例: https://*your-ad-server.com*/vast)
   + **ContentOriginDomainName**: プロトコルを使用しないコンテンツオリジンのドメイン名 ( など*mediapackage-domain.mediapackagev2.us-west-2.amazonaws.com*)
   + **ContentOriginType**: コンテンツオリジンのタイプを選択します。
     + *mediapackagev2*: AWS Elemental MediaPackage オリジンの場合
     + *s3*: Amazon S3 バケットオリジンの場合
     + *custom*: 他のオリジンタイプの場合

1. 設定を確認し、**スタックの作成**を選択します。

1. スタックの作成が完了するまで待ちます。通常は 5～10 分かかります。**イベント**タブで進行状況をモニタリングできます。

1. 完了したら、**出力**タブに移動して、HLS マニフェストと DASH マニフェストURLs を見つけます。

**注記**  
をコンテンツオリジン AWS Elemental MediaPackage として使用している場合は、MediaPackage エンドポイントが正しく設定され、アクセス可能であることを確認します。詳細については、「[MediaPackage CDN 統合](mediapackage-integration.md)」を参照してください。

# CDN と MediaTailor の統合に CloudFormation デプロイされたリソースを使用する
<a name="use-deployed-resources"></a>

AWS Elemental MediaTailor AWS CloudFormation スタックによってデプロイされた リソースには、広告挿入でコンテンツにアクセスするために使用する重要な出力がいくつか用意されています。 CloudFormation スタックが正常に作成されたら、出力を使用して広告が挿入されたコンテンツにアクセスする方法を理解する必要があります。これは、手動セットアップで MediaTailor URLs を使用する方法と似ていますが、 CloudFormation デプロイではこれらの URLsが自動的に提供されます。

デプロイが成功すると、 CloudFormation スタックには、広告挿入を使用してコンテンツにアクセスするために使用する重要な出力がいくつか用意されます。

`CloudFrontDomainName`  
CloudFront ディストリビューションのドメイン名 ( など*d1234abcdef.CloudFront.net*)

`HlsManifestUrl`  
広告挿入を含む HLS マニフェストの基本 URL (例: https://*d1234abcdef.CloudFront.net*/v1/master/*12345*/*my-playback-config*/)

`DashManifestUrl`  
広告挿入を含む DASH マニフェストの基本 URL (例: https://*d1234abcdef.CloudFront.net*/v1/dash/*12345*/*my-playback-config*/)

`MediaTailorPlaybackConfigName`  
作成された MediaTailor 再生設定の名前 (*my-stack-PlaybackConfig* など)

## 再生 URLs
<a name="construct-playback-urls"></a>

広告を含むコンテンツの完全な再生 URL を作成するには、 CloudFormation 出力のベース URL を特定のマニフェストパスと組み合わせる必要があります。これは、既存のコンテンツを広告挿入システムに接続するため、ブロードキャストプロフェッショナルが理解すべき重要なステップです。

1. 出力から適切なマニフェスト URL から開始します。

   ```
   HlsManifestUrl: https://d1234abcdef.CloudFront.net/v1/master/12345/my-playback-config/
   ```

1. 特定のマニフェストパスを追加します。

   ```
   Your manifest path: channel/index.m3u8
   ```

1. 完全な再生 URL は次のようになります。

   ```
   https://d1234abcdef.CloudFront.net/v1/master/12345/my-playback-config/channel/index.m3u8
   ```

動的に挿入された広告でコンテンツを再生するには、ビデオプレーヤーでこの URL を使用します。

**ヒント**  
マニフェストパスが不明な場合は、オリジンサーバーを確認してください。MediaPackage オリジンの場合、これはエンドポイントの HLS または DASH マニフェストへのパスです。Amazon S3 オリジンの場合、これはバケット内のマニフェストファイルへのパスです。

MediaTailor URL 構造の詳細については、「」を参照してください[MediaTailor との CDN 統合を設定する](cdn-configuration.md)。

## ビデオプレーヤーを設定する
<a name="configure-video-player"></a>

再生 URL を取得したら、それを使用するようにビデオプレーヤーを設定する必要があります。ブロードキャストプロフェッショナルの場合、これは任意の HLS または DASH ストリームにプレイヤーを設定するのに似ていますが、ストリームにはパーソナライズされた広告が含まれます。一般的なHLS.js プレイヤーを使用した簡単な例を次に示します。

```
<!DOCTYPE html>
<html>
<head>
    <title>MediaTailor Playback Example</title>
    <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
</head>
<body>
    <video id="video" controls style="width: 640px; height: 360px;"></video>
    
    <script>
        const video = document.getElementById('video');
        const mediaUrl = 'https://<replaceable>d1234abcdef.CloudFront.net</replaceable>/v1/master/<replaceable>12345</replaceable>/<replaceable>my-playback-config</replaceable>/<replaceable>channel/index.m3u8</replaceable>';
        
        if (Hls.isSupported()) {
            const hls = new Hls();
            hls.loadSource(mediaUrl);
            hls.attachMedia(video);
        } else if (video.canPlayType('application/vnd.apple.mpegurl')) {
            video.src = mediaUrl;
        }
    </script>
</body>
</html>
```

次のようなプロのブロードキャストプレイヤーを使用することもできます。
+ JW プレイヤー
+ Bitmovin プレイヤー
+ THEOplayer
+ Video.js

MediaTailor とのプレイヤー統合の詳細については、「」を参照してください[MediaTailor 広告サーバー統合要件](vast.md)。

# CDN と MediaTailor の統合に関する CloudFormation デプロイのテストと検証
<a name="test-validate-deployment"></a>

AWS Elemental MediaTailor デプロイの検証は、本番稼働前のブロードキャストプロフェッショナルにとって重要なステップです。このセクションでは、広告が正しく挿入され、コンテンツがスムーズに配信されるように、デプロイをテストする方法について説明します。

 CloudFormation テンプレートをデプロイしたら、以下の手順に従ってセットアップが正しく機能していることを確認します。

**MediaTailor と CloudFront の統合をテストするには**

1. コンソールで CloudFormation すべてのリソースが正常に作成されたことを確認します。

1. MediaTailor コンソールで [MediaTailor ](https://console.aws.amazon.com/mediatailor/home)再生設定がアクティブであることを確認します。

1. CloudFront [コンソールで CloudFront ](https://console.aws.amazon.com/CloudFront/home)ディストリビューションがデプロイされ、有効になっていることを確認します。

1. サンプルマニフェストを使用して再生をテストします。

   1. 「」の説明に従って、フル再生 URL を作成します[再生 URLs](use-deployed-resources.md#construct-playback-urls)。

   1. HLS または DASH をサポートするビデオプレーヤー (VLC、JW Player、 AWS コンソールプレーヤーなど) を使用します。

   1. コンテンツの再生と広告が予想されるブレークポイントに挿入されていることを確認します。

1. CloudWatch の MediaTailor ログに広告挿入エラーがないか確認します。

広告挿入をテストするときは、成功の指標を探します。
+ コンテンツと広告間のスムーズな移行
+ 広告は、予想されるブレークポイント (プリロール、ミッドロール、ポストロール) に表示されます。
+ 広告品質がコンテンツ品質と一致する
+ 広告の移行中にバッファリングエラーや再生エラーが発生しない

テスト手順の詳細については、「」を参照してください[AWS Elemental MediaTailor 広告挿入動作について](ad-behavior.md)。包括的な CDN 統合のテストと検証については、「」を参照してください[CDN と MediaTailor の統合のテストと検証](cdn-integration-testing.md)。

# CDN と MediaTailor の統合に関する一般的な CloudFormation デプロイの問題をトラブルシューティングする
<a name="troubleshoot-deployment-issues"></a>

AWS Elemental MediaTailor デプロイの問題は、デプロイ中または再生中のオートメーションでも発生する可能性があります。ブロードキャストプロフェッショナルとして、これらの問題のトラブルシューティング方法を理解することは、広告挿入で信頼性の高いストリーミングサービスを維持するのに役立ちます。

 CloudFormation デプロイまたは結果の MediaTailor と CloudFront の統合で問題が発生した場合は、以下の一般的な問題と解決策を参照してください。

## CloudFormation デプロイの問題
<a name="deployment-troubleshooting"></a>

スタックの作成が「リソースの作成に失敗しました」エラーで失敗する  
**考えられる原因:**  
+ 無効なコンテンツオリジンドメイン名形式
+ リソースを作成するアクセス許可が不十分
**解決策:** CloudFormation イベントタブで特定のリソースエラーを確認します。コンテンツオリジンドメイン名がプロトコルプレフィックスまたはパスなしで正しくフォーマットされていることを確認します。IAM ロールに、必要なすべてのリソースを作成するための十分なアクセス許可があることを確認します。

CloudFront ディストリビューションのデプロイに時間がかかる  
**原因:** CloudFront ディストリビューションが完全にデプロイされるまでに通常 15～30 分かかります。  
**解決策:** これは正常な動作です。テストする前に、ディストリビューションが「デプロイ済み」状態になるまで待ちます。

## 再生と広告挿入の問題
<a name="playback-troubleshooting"></a>

コンテンツは再生されるが広告は挿入されない  
**考えられる原因:**  
+ 広告決定サーバーが応答しない、または空の VAST を返さない
+ コンテンツに広告マーカーが含まれていない
**解決策:** 広告サーバーにアクセス可能であり、有効な VAST レスポンスを返すことを確認します。コンテンツに適切な広告マーカー (ライブコンテンツの場合は SCTE-35 マーカー、VOD の場合は広告ブレークタグ) があることを確認します。

403 コンテンツにアクセスするときに禁止されるエラー  
**考えられる原因:**  
+ オリジンアクセスコントロールが正しく設定されていない
+ オリジンバケットまたはエンドポイントのアクセス許可の問題
**解決策:** Amazon S3 オリジンの場合は、バケットポリシーが CloudFront ディストリビューションからのアクセスを許可していることを確認します。MediaPackage オリジンの場合、オリジンアクセスコントロールが正しく設定され、エンドポイントにアクセスできることを確認します。

再生エラーまたはバッファリング  
**考えられる原因:**  
+ キャッシュ動作パスパターンがコンテンツパスと一致しません
+ オリジンドメインの設定が正しくない
**解決策:** キャッシュ動作に、リクエストを適切なオリジンにルーティングするための正しいパスパターンがあることを確認します。CloudFront ログをチェックして、リクエストを処理しているオリジンを確認し、それが想定どおりであることを確認します。

ブロードキャストプロフェッショナルにとって、以下の追加のトラブルシューティングのヒントが役立ちます。
+ Amazon CloudWatch Logs Insights を使用して MediaTailor ログで特定のエラーパターンを検索する
+ 本番稼働用広告サーバーを使用する前に、まずシンプルな VAST 広告サーバー (テンプレートで提供されているデフォルトサーバーなど) でテストします。
+ コンソールの MediaTailor マニフェストインスペクターツールを使用してコンテンツの広告マーカーを検証する
+ ブラウザのデベロッパーツールのネットワークトラフィックをチェックして、広告サーバーへのリクエストが正しく行われているかどうかを確認します。

追加のトラブルシューティングについては、MediaTailor と CloudFront の両方の CloudWatch ログをチェックして、特定のエラーを特定します。

# CDN と MediaTailor の統合の CloudFormation テンプレートをカスタマイズする
<a name="customize-cloudformation-template"></a>

AWS Elemental MediaTailor テンプレートのカスタマイズにより、ブロードキャストプロフェッショナルは特定のワークフロー要件に合わせて AWS CloudFormation テンプレートを適応させることができます。基本的なテンプレートは多くのシナリオで機能しますが、これらのカスタマイズは、より複雑なニーズに対応するのに役立ちます。

以下の例は、テンプレートに追加できる YAML コードスニペットを示しています。YAML または CloudFormation 構文に精通していない場合は、開発者または AWS ソリューションアーキテクトと協力してこれらの変更を行うことを検討してください。

テンプレートは、特定のワークフロー要件を満たす CloudFormation ようにカスタマイズできます。

## オリジンの追加または変更
<a name="add-modify-origins"></a>

複数のコンテンツソース (プライマリソースやバックアップソース、異なるコンテンツライブラリなど) を使用するブロードキャストワークフローでは、CloudFront ディストリビューションにオリジンを追加できます。

```
Origins:
  # Add a new origin for additional content
  - Id: SecondaryContentOrigin
    DomainName: secondary-content.example.com
    CustomOriginConfig:
      OriginProtocolPolicy: 'https-only'
      OriginSSLProtocols: 
        - TLSv1.2
```

次に、対応するキャッシュ動作を追加して、特定のパターンをこのオリジンにルーティングします。

```
CacheBehaviors:
  - PathPattern: '/secondary-content/*'
    TargetOriginId: SecondaryContentOrigin
    ViewerProtocolPolicy: 'https-only'
    CachePolicyId: 658327ea-f89d-4fab-a63d-7e88639e58f6  # Managed-CachingOptimized
```

## カスタムキャッシュポリシーを作成する
<a name="create-custom-cache-policies"></a>

特定のキャッシュ要件 (品質選択パラメータやビューワー認証など) を持つブロードキャストワークフローでは、マネージドキャッシュポリシーを使用する代わりにカスタムキャッシュポリシーを作成できます。TTL 値とキャッシュ戦略の詳細については、「」を参照してください[CDN と MediaTailor の統合のキャッシュ最適化](cdn-optimize-caching.md)。

```
# Define a custom cache policy
CustomCachePolicy:
  Type: AWS::CloudFront::CachePolicy
  Properties:
    CachePolicyConfig:
      Name: !Sub '${AWS::StackName}-CustomCachePolicy'
      DefaultTTL: 86400  # 24 hours
      MaxTTL: 31536000   # 1 year
      MinTTL: 1          # 1 second
      ParametersInCacheKeyAndForwardedToOrigin:
        CookiesConfig:
          CookieBehavior: none
        HeadersConfig:
          HeaderBehavior: none
        QueryStringsConfig:
          QueryStringBehavior: whitelist
          QueryStrings:
            - quality
            - format

# Reference the custom policy in a cache behavior
CacheBehaviors:
  - PathPattern: '/custom-path/*'
    TargetOriginId: ContentOrigin
    ViewerProtocolPolicy: 'https-only'
    CachePolicyId: !Ref CustomCachePolicy
```

## MediaTailor 設定の強化
<a name="enhance-mediatailor-config"></a>

高度な広告挿入機能を必要とするブロードキャストワークフローでは、広告プリフェッチ (レイテンシーを低減するため）、パーソナライゼーションしきい値、バンパー広告などのオプションを使用して MediaTailor 設定を強化できます。

```
MediaTailorPlaybackConfig:
  Type: AWS::MediaTailor::PlaybackConfiguration
  Properties:
    # Add ad prefetching for improved performance
    AvailSuppression:
      Mode: BEHIND_LIVE_EDGE
      Value: 00:00:00
    # Add personalization parameters
    PersonalizationThresholdSeconds: 2
    # Add bumper ads
    Bumper:
      StartUrl: https://example.com/bumper-start.mp4
      EndUrl: https://example.com/bumper-end.mp4
    # Other existing properties...
```

MediaTailor 設定オプションの詳細については、「」を参照してください[AWS Elemental MediaTailor を使用して広告を挿入する](configurations.md)。

## セキュリティ機能を追加する
<a name="add-security-features"></a>

特定のセキュリティ要件 (地理的制限や DDoS 攻撃に対する保護など) を持つブロードキャストワークフローでは、 AWS WAF 統合と地理的制限を追加できます。

```
# Create a AWS WAF Web ACL
WebACL:
  Type: AWS::WAFv2::WebACL
  Properties:
    Name: !Sub '${AWS::StackName}-WebACL'
    Scope: CloudFront
    DefaultAction:
      Allow: {}
    VisibilityConfig:
      SampledRequestsEnabled: true
      CloudWatchMetricsEnabled: true
      MetricName: !Sub '${AWS::StackName}-WebACL'
    Rules:
      - Name: RateLimitRule
        Priority: 0
        Action:
          Block: {}
        VisibilityConfig:
          SampledRequestsEnabled: true
          CloudWatchMetricsEnabled: true
          MetricName: RateLimitRule
        Statement:
          RateBasedStatement:
            Limit: 1000
            AggregateKeyType: IP

# Reference the AWS WAF Web ACL in the CloudFront distribution
CloudFrontDistribution:
  Type: AWS::CloudFront::Distribution
  Properties:
    DistributionConfig:
      WebACLId: !GetAtt WebACL.Arn
      # Add geo-restriction
      Restrictions:
        GeoRestriction:
          RestrictionType: whitelist
          Locations:
            - US
            - CA
            - GB
      # Other existing properties...
```

 CloudFormation テンプレートの詳細については、[AWS CloudFormation 「 ユーザーガイド](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html)」を参照してください。

ブロードキャスト固有の CloudFormation テンプレートと例については、[AWS Media Services Tools GitHub リポジトリ](https://github.com/aws-samples/aws-media-services-tools)を参照してください。

# AWS CloudFormation AWS Elemental MediaTailor および Amazon CloudFront 統合の テンプレートリファレンス
<a name="cloudformation-template-reference"></a>

AWS Elemental MediaTailor Amazon CloudFront との統合は、次の完全な AWS CloudFormation テンプレートを使用して自動化できます。

```
AWSTemplateFormatVersion: '2010-09-09'
Description: | CloudFormation template that sets up AWS Elemental MediaTailor integration with CloudFront Distribution
  for server-side ad insertion. This template supports various content origins including MediaPackage, Amazon S3,
  and custom origins, making it versatile for different streaming architectures.

Parameters:
  AdServerUrl:
    Type: String
    Default: 'https://d1kbmkziz9rksx.CloudFront.net/VASTEndpoint.xml'
    Description: URL of the VAST ad server for dynamic ad insertion. Static VAST endpoint provided for testing. 

  ContentOriginDomainName:
    Type: String
    Description: |
      Domain name of your content origin without protocol (e.g., mediapackage-domain.mediapackagev2.us-west-2.amazonaws.com,
      mybucket.s3.amazonaws.com, or custom-origin.example.com).
      Do not include http:// or https:// prefixes or any paths.
    AllowedPattern: "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])$"
    ConstraintDescription: Must be a valid domain name (e.g., example.com) without protocol or path components. IP addresses are not allowed.

  ContentOriginType:
    Type: String
    AllowedValues:
      - mediapackagev2
      - s3
      - custom
    Default: mediapackagev2
    Description: |
      The type of content origin:
      - mediapackagev2: AWS Elemental MediaPackage V2
      - s3: Amazon S3 bucket
      - custom: Any other custom origin

Resources:
  #---------------------------------------------------------------------------
  # Origin Access Control (for securing MediaPackage V2 and Amazon S3 origins)
  #---------------------------------------------------------------------------
  CloudFrontOriginAccessControl:
    Type: AWS::CloudFront::OriginAccessControl
    Condition: IsNotCustomOrigin
    Properties:
      OriginAccessControlConfig:
        Name: !Sub '${AWS::StackName}-OAC'
        OriginAccessControlOriginType: !Ref ContentOriginType
        SigningBehavior: always
        SigningProtocol: sigv4
        Description: Origin Access Control for content origin

  #---------------------------------------------------------------------------
  # MediaTailor Playback Configuration
  #---------------------------------------------------------------------------
  MediaTailorPlaybackConfig:
    Type: AWS::MediaTailor::PlaybackConfiguration
    Properties:
      Name: !Sub '${AWS::StackName}-PlaybackConfig'
      # The video content source should point to your CloudFront distribution
      VideoContentSourceUrl: !Sub 'https://${CloudFrontDistribution.DomainName}/'
      # The Ad Decision Server URL is where MediaTailor will request ads
      AdDecisionServerUrl: !Ref AdServerUrl
      # Configuration for pre-roll ads during live streams
      LivePreRollConfiguration:
        AdDecisionServerUrl: !Ref AdServerUrl
        MaxDurationSeconds: 30
      # CDN configuration for integrating with CloudFront
      CdnConfiguration:
        AdSegmentUrlPrefix: '/'
        ContentSegmentUrlPrefix: '/'
      # Set a reasonable manifest segment timeout
      ManifestProcessingRules:
        AdMarkerPassthrough:
          Enabled: false

  #---------------------------------------------------------------------------
  # CloudFront Distribution
  #---------------------------------------------------------------------------
  CloudFrontDistribution:
    Type: AWS::CloudFront::Distribution
    Properties:
      DistributionConfig:
        Enabled: true
        HttpVersion: http2and3
        IPV6Enabled: true
        Comment: !Sub 'Distribution for MediaTailor ad insertion with ${ContentOriginType} origin'
        
        # Default cache behavior points to the content origin
        DefaultCacheBehavior:
          TargetOriginId: ContentOrigin
          ViewerProtocolPolicy: 'https-only'
          # Using managed policies for optimal performance and simplicity
          CachePolicyId: 658327ea-f89d-4fab-a63d-7e88639e58f6  # Managed-CachingOptimized
          OriginRequestPolicyId: 88a5eaf4-2fd4-4709-b370-b4c650ea3fcf # Managed-HostHeaderOnly
          ResponseHeadersPolicyId: eaab4381-ed33-4a86-88ca-d9558dc6cd63  # Managed-CORS-with-preflight-and-SecurityHeadersPolicy
          Compress: true
        
        # Define all the origins needed for the workflow
        Origins:
          # Main content origin (MediaPackage, Amazon S3, or Custom)
          - Id: ContentOrigin
            DomainName: !Ref ContentOriginDomainName
            # Apply Origin Access Control for secure origins
            OriginAccessControlId: !If [IsNotCustomOrigin, !GetAtt CloudFrontOriginAccessControl.Id, !Ref "AWS::NoValue"]
            # For custom origins, we need a CustomOriginConfig
            CustomOriginConfig:
              OriginProtocolPolicy: 'https-only'
              OriginSSLProtocols: 
                - TLSv1.2
              OriginKeepaliveTimeout: 5
              OriginReadTimeout: 30
              HTTPPort: 80
              HTTPSPort: 443
              
          # MediaTailor Manifests Origin - handles manifest manipulation for ad insertion
          - Id: MediaTailorManifests
            DomainName: !Sub 'manifests.mediatailor.${AWS::Region}.amazonaws.com'
            CustomOriginConfig:
              OriginProtocolPolicy: 'https-only'
              OriginSSLProtocols: 
                - TLSv1.2
              OriginKeepaliveTimeout: 5
              OriginReadTimeout: 30
            # Origin Shield improves caching efficiency 
            OriginShield:
              Enabled: true
              OriginShieldRegion: !Ref AWS::Region
              
          # MediaTailor Segments Origin - handles personalized ads
          - Id: MediaTailorSegments
            DomainName: !Sub 'segments.mediatailor.${AWS::Region}.amazonaws.com'
            CustomOriginConfig:
              OriginProtocolPolicy: 'https-only'
              OriginSSLProtocols: 
                - TLSv1.2
              OriginKeepaliveTimeout: 5
              OriginReadTimeout: 30
        
        # Cache behaviors to route specific request patterns to the right origin
        CacheBehaviors:
          # Handle MediaTailor segment requests for ad content which are cache-able
          - PathPattern: '/tm/*'
            TargetOriginId: MediaTailorSegments
            ViewerProtocolPolicy: 'https-only'
            CachePolicyId: 658327ea-f89d-4fab-a63d-7e88639e58f6  # Managed-CachingOptimized
            OriginRequestPolicyId: 88a5eaf4-2fd4-4709-b370-b4c650ea3fcf  # Managed-HostHeaderOnly
            ResponseHeadersPolicyId: eaab4381-ed33-4a86-88ca-d9558dc6cd63  # Managed-CORS-with-preflight-and-SecurityHeadersPolicy
            Compress: true
            
          # Handle MediaTailor interstitial (SGAI) media requests which are cache-able
          - PathPattern: '/v1/i-media/*'
            TargetOriginId: MediaTailorManifests
            ViewerProtocolPolicy: 'https-only'
            CachePolicyId: 658327ea-f89d-4fab-a63d-7e88639e58f6  # Managed-CachingOptimized
            OriginRequestPolicyId: 88a5eaf4-2fd4-4709-b370-b4c650ea3fcf  # Managed-HostHeaderOnly
            ResponseHeadersPolicyId: eaab4381-ed33-4a86-88ca-d9558dc6cd63  # Managed-CORS-with-preflight-and-SecurityHeadersPolicy
            Compress: true
            
          # Handle MediaTailor Personalized manifests which are not cache-able
          - PathPattern: '/v1/*'
            TargetOriginId: MediaTailorManifests
            ViewerProtocolPolicy: 'https-only'
            CachePolicyId: 4135ea2d-6df8-44a3-9df3-4b5a84be39ad # Managed-CachingDisabled
            OriginRequestPolicyId: 59781a5b-3903-41f3-afcb-af62929ccde1 # Managed-AllViewer
            ResponseHeadersPolicyId: eaab4381-ed33-4a86-88ca-d9558dc6cd63  # Managed-CORS-with-preflight-and-SecurityHeadersPolicy
            Compress: true
            
          # Handle MediaTailor segment *redirect* requests which are not cache-able (used for server side reporting)
          - PathPattern: '/segment/*'
            TargetOriginId: MediaTailorManifests
            ViewerProtocolPolicy: 'https-only'
            CachePolicyId: 4135ea2d-6df8-44a3-9df3-4b5a84be39ad # Managed-CachingDisabled
            OriginRequestPolicyId: 59781a5b-3903-41f3-afcb-af62929ccde1 # Managed-AllViewer
            ResponseHeadersPolicyId: eaab4381-ed33-4a86-88ca-d9558dc6cd63  # Managed-CORS-with-preflight-and-SecurityHeadersPolicy
            Compress: true

Conditions:
  IsNotCustomOrigin: !Not [!Equals [!Ref ContentOriginType, 'custom']]

Outputs:
  CloudFrontDomainName:
    Description: Domain name of the CloudFront distribution
    Value: !GetAtt CloudFrontDistribution.DomainName
    
  HlsManifestUrl:
    Description: URL for HLS manifest with ads inserted (append your manifest path)
    Value: !Sub 'https://${CloudFrontDistribution.DomainName}${MediaTailorPlaybackConfig.HlsConfiguration.ManifestEndpointPrefix}'
    
  DashManifestUrl:
    Description: URL for DASH manifest with ads inserted (append your manifest path)
    Value: !Sub 'https://${CloudFrontDistribution.DomainName}${MediaTailorPlaybackConfig.DashConfiguration.ManifestEndpointPrefix}'
    
  MediaTailorPlaybackConfigName:
    Description: Name of the MediaTailor playback configuration
    Value: !Ref MediaTailorPlaybackConfig
```