

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

# ロググループレベルのサブスクリプションフィルター
<a name="SubscriptionFilters"></a>

 Amazon Kinesis Data Streams、、Amazon Data Firehose AWS Lambda、または Amazon OpenSearch Service でサブスクリプションフィルターを使用できます。サブスクリプションフィルターを介してサービスに送信されるログは、base64 でエンコードされ、gzip 形式で圧縮されます。で集中ログを使用している場合は AWS Organizations、 `@aws.account`および `@aws.region`システムフィールドを出力して、組織内のどのアカウントとリージョンからどのデータを取得するかを特定できます。このセクションでは、Firehose、Lambda、Amazon Kinesis Data Streams、OpenSearch Service にログデータを送信する CloudWatch Logs サブスクリプションフィルターを作成する例を示します。

**注記**  
 ログデータを検索する場合は、「[Filter and pattern syntax](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html)」を参照してください。

**Topics**
+ [例 1: Amazon Kinesis Data Streams を使用したサブスクリプションフィルター](#DestinationKinesisExample)
+ [例 2: を使用したサブスクリプションフィルター AWS Lambda](#LambdaFunctionExample)
+ [例 3: Amazon Data Firehose を使用したサブスクリプションフィルター](#FirehoseExample)
+ [例 4: Amazon OpenSearch Service を使用したサブスクリプションフィルター](#OpenSearchExample)

## 例 1: Amazon Kinesis Data Streams を使用したサブスクリプションフィルター
<a name="DestinationKinesisExample"></a>

次の例では、 AWS CloudTrail イベントを含むロググループにサブスクリプションフィルターを関連付けます。サブスクリプションフィルターは、「Root AWS 」認証情報によって行われたすべての記録されたアクティビティを、「RootAccess」と呼ばれる Amazon Kinesis Data Streams のストリームに配信します。RootAccess." CloudWatch Logs に AWS CloudTrail イベントを送信する方法の詳細については、*AWS CloudTrail 「 ユーザーガイド*[」のCloudTrail イベントを CloudWatch Logs に送信する](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cw_send_ct_events.html)」を参照してください。

**注記**  
ストリームを作成する前に、生成するログデータのボリュームを計算します。このボリュームを処理するために十分なシャードで ストリームを作成するように注意してください。ストリームに十分なシャードがないと、ログストリームはスロットリングされます。ストリームボリューム制限に関する詳細は、「[クォータと制限](https://docs.aws.amazon.com/streams/latest/dev/service-sizes-and-limits.html)」を参照してください。  
スロットリングされた成果物は、最大 24 時間再試行されます。24 時間が経過すると、失敗した成果物は破棄されます。  
スロットリングのリスクを軽減するには、次のステップに従います。  
[PutSubscriptionFilter](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutSubscriptionFilter.html#CWL-PutSubscriptionFilter-request-distribution) または [put-subscription-filter](https://awscli.amazonaws.com/v2/documentation/api/2.4.18/reference/logs/put-subscription-filter.html) を使用してサブスクリプションフィルターを作成するときは、`distribution` に `random` を指定します。デフォルトでは、ストリームフィルターディストリビューションはログストリームによって行われ、スロットリングが発生する可能性があります。
CloudWatch メトリクスを使用したストリームのモニタリング これにより、スロットリングを特定し、必要に応じて構成を調整できます。たとえば、`DeliveryThrottling` メトリクスを使用してデータをサブスクリプション送信先に転送するときに CloudWatch Logs がスロットルされたログイベントの数を追跡できます。モニタリングの詳細については、「[CloudWatch メトリクスによるモニタリング](CloudWatch-Logs-Monitoring-CloudWatch-Metrics.md)」をご参照ください。
Amazon Kinesis Data Streams のストリームにオンデマンドキャパシティモードを使用します。オンデマンドモードは、ワークロードが増加または縮小すると、即座にワークロードに対応します。オンデマンドキャパシティモードの詳細については、「[オンデマンドモード](https://docs.aws.amazon.com/streams/latest/dev/how-do-i-size-a-stream.html#ondemandmode)」を参照してください。
Amazon Kinesis Data Streams のストリームの容量と一致するように CloudWatch サブスクリプションフィルターパターンを制限します。ストリームに送信するデータが多すぎる場合、フィルターサイズを小さくするか、フィルター条件を調整する必要があります。

**Amazon Kinesis Data Streams のサブスクリプションフィルターを作成するには**

1. 次のコマンドを使用して送信先ストリームを作成します。

   ```
   $ C:\>  aws kinesis create-stream --stream-name "RootAccess" --shard-count 1
   ```

1. ストリームが [アクティブ] になるまで待ちます (これには 1～2 分かかる可能性があります)。次の Amazon Kinesis Data Streams [describe-stream](https://docs.aws.amazon.com/cli/latest/reference/kinesis/describe-stream.html) コマンドを使用して、**StreamDescription.StreamStatus** プロパティを確認できます。さらに、後のステップで必要になるため **StreamDescription.StreamARN** 値を書き留めます。

   ```
   aws kinesis describe-stream --stream-name "RootAccess"
   ```

   出力例を次に示します。

   ```
   {
       "StreamDescription": {
           "StreamStatus": "ACTIVE",
           "StreamName": "RootAccess",
           "StreamARN": "arn:aws:kinesis:us-east-1:123456789012:stream/RootAccess",
           "Shards": [
               {
                   "ShardId": "shardId-000000000000",
                   "HashKeyRange": {
                       "EndingHashKey": "340282366920938463463374607431768211455",
                       "StartingHashKey": "0"
                   },
                   "SequenceNumberRange": {
                       "StartingSequenceNumber":
                       "49551135218688818456679503831981458784591352702181572610"
                   }
               }
           ]
       }
   }
   ```

1. ストリームにデータを置くアクセス許可を CloudWatch Logs に付与する IAM ロールを作成します。まず、ファイル (`~/TrustPolicyForCWL-Kinesis.json` など) で信頼ポリシーを作成する必要があります。テキストエディタを使用してこのポリシーを作成します。IAM コンソールを使用してポリシーを作成しないでください。

   このポリシーには、「混乱した代理」のセキュリティ上の問題を防止するための `aws:SourceArn` グローバル条件コンテキストキーが含まれています。詳細については、「[混乱した代理の防止](Subscriptions-confused-deputy.md)」を参照してください。

   ```
   {
     "Statement": {
       "Effect": "Allow",
       "Principal": { "Service": "logs.amazonaws.com" },
       "Action": "sts:AssumeRole",
       "Condition": { 
           "StringLike": { "aws:SourceArn": "arn:aws:logs:region:123456789012:*" } 
        }
      }
   }
   ```

1. **create-role** コマンドを使用し、信頼ポリシーファイルを指定して IAM ロールを作成します。後のステップで必要になるため、返された **Role.Arn** 値も書き留めます。

   ```
   aws iam create-role --role-name CWLtoKinesisRole --assume-role-policy-document file://~/TrustPolicyForCWL-Kinesis.json
   ```

   次は出力の例です。

   ```
   {
       "Role": {
           "AssumeRolePolicyDocument": {
               "Statement": {
                   "Action": "sts:AssumeRole",
                   "Effect": "Allow",
                   "Principal": {
                       "Service": "logs.amazonaws.com"
                   },
                   "Condition": { 
                       "StringLike": { 
                           "aws:SourceArn": { "arn:aws:logs:region:123456789012:*" }
                       } 
                   }
               }
           },
           "RoleId": "AAOIIAH450GAB4HC5F431",
           "CreateDate": "2015-05-29T13:46:29.431Z",
           "RoleName": "CWLtoKinesisRole",
           "Path": "/",
           "Arn": "arn:aws:iam::123456789012:role/CWLtoKinesisRole"
       }
   }
   ```

1. 権限ポリシーを作成し、CloudWatch Logs がアカウントで実行できるアクションを定義します。まず、ファイル (`~/PermissionsForCWL-Kinesis.json` など) で権限ポリシーを作成します。テキストエディタを使用してこのポリシーを作成します。IAM コンソールを使用してポリシーを作成しないでください。

   ```
   {
     "Statement": [
       {
         "Effect": "Allow",
         "Action": "kinesis:PutRecord",
         "Resource": "arn:aws:kinesis:region:123456789012:stream/RootAccess"
       }
     ]
   }
   ```

1. 次の [put-role-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/put-role-policy.html) コマンドを使用して、アクセス許可ポリシーをロールに関連付けます。

   ```
   aws iam put-role-policy  --role-name CWLtoKinesisRole  --policy-name Permissions-Policy-For-CWL  --policy-document file://~/PermissionsForCWL-Kinesis.json
   ```

1. ストリームが [**アクティブ**] 状態になり、IAM ロールを作成したら、CloudWatch Logs サブスクリプションフィルタを作成できます。サブスクリプションフィルタにより、選択されたロググループから ストリームへのリアルタイムログデータの流れがすぐに開始されます。

   ```
   aws logs put-subscription-filter \
       --log-group-name "CloudTrail/logs" \
       --filter-name "RootAccess" \
       --filter-pattern "{$.userIdentity.type = Root}" \
       --destination-arn "arn:aws:kinesis:region:123456789012:stream/RootAccess" \
       --role-arn "arn:aws:iam::123456789012:role/CWLtoKinesisRole"
   ```

1. サブスクリプションフィルタを設定したら、CloudWatch Logs によりフィルタパターンに一致するすべての受信ログイベントがストリームに転送されます。Amazon Kinesis Data Streams シャードイテレーターを取得し、Amazon Kinesis Data Streams get-records コマンドを使用して Amazon Kinesis Data Streams レコードを取得することで、これが起こっていることを確認できます。

   ```
   aws kinesis get-shard-iterator --stream-name RootAccess --shard-id shardId-000000000000 --shard-iterator-type TRIM_HORIZON
   ```

   ```
   {
       "ShardIterator":
       "AAAAAAAAAAFGU/kLvNggvndHq2UIFOw5PZc6F01s3e3afsSscRM70JSbjIefg2ub07nk1y6CDxYR1UoGHJNP4m4NFUetzfL+wev+e2P4djJg4L9wmXKvQYoE+rMUiFq+p4Cn3IgvqOb5dRA0yybNdRcdzvnC35KQANoHzzahKdRGb9v4scv+3vaq+f+OIK8zM5My8ID+g6rMo7UKWeI4+IWiK2OSh0uP"
   }
   ```

   ```
   aws kinesis get-records --limit 10 --shard-iterator "AAAAAAAAAAFGU/kLvNggvndHq2UIFOw5PZc6F01s3e3afsSscRM70JSbjIefg2ub07nk1y6CDxYR1UoGHJNP4m4NFUetzfL+wev+e2P4djJg4L9wmXKvQYoE+rMUiFq+p4Cn3IgvqOb5dRA0yybNdRcdzvnC35KQANoHzzahKdRGb9v4scv+3vaq+f+OIK8zM5My8ID+g6rMo7UKWeI4+IWiK2OSh0uP"
   ```

   Amazon Kinesis Data Streams がデータを返す前に、この呼び出しを数回行う必要がある場合があります。

   レコードの配列を含むレスポンスが表示されます。Amazon Kinesis Data Streams レコードのデータ****属性は base64 でエンコードされ、gzip 形式で圧縮されます。raw データは、コマンドラインから次の UNIX コマンドを使用して調べることができます。

   ```
   echo -n "<Content of Data>" | base64 -d | zcat
   ```

   base64 でデコードおよび解凍されたデータは、次の構造を使用して JSON としてフォーマットされます。

   ```
   {
       "owner": "111111111111",
       "logGroup": "CloudTrail/logs",
       "logStream": "111111111111_CloudTrail/logs_us-east-1",
       "subscriptionFilters": [
           "Destination"
       ],
       "messageType": "DATA_MESSAGE",
       "logEvents": [
           {
               "id": "31953106606966983378809025079804211143289615424298221568",
               "timestamp": 1432826855000,
               "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}"
           },
           {
               "id": "31953106606966983378809025079804211143289615424298221569",
               "timestamp": 1432826855000,
               "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}"
           },
           {
               "id": "31953106606966983378809025079804211143289615424298221570",
               "timestamp": 1432826855000,
               "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}"
           }
       ]
   }
   ```

   上のデータ構造の主な要素は次のとおりです。  
**owner (オーナー)**  
元のログデータの AWS アカウント ID。  
**logGroup**  
発行元ログデータのロググループ名。  
**logStream**  
発行元ログデータのログストリーム名。  
**subscriptionFilters**  
発行元ログデータと一致したサブスクリプションフィルタ名のリスト。  
**messageType**  
データメッセージは、"DATA\$1MESSAGE" 型を使用します。CloudWatch Logs は、主に送信先に到達可能かどうかを確認するために、「CONTROL\$1MESSAGE」タイプの Amazon Kinesis Data Streams レコードを出力することがあります。  
**logEvents**  
ログイベントレコードの配列として表される実際のログデータ。"id" プロパティは、各ログイベントの一意識別子です。

## 例 2: を使用したサブスクリプションフィルター AWS Lambda
<a name="LambdaFunctionExample"></a>

この例では、ログデータを AWS Lambda 関数に送信する CloudWatch Logs サブスクリプションフィルターを作成します。

**注記**  
Lambda 関数を作成する前に、生成するログデータのボリュームを計算します。このボリュームを処理できる関数を作成するように注意してください。関数に十分なボリュームがないと、ログストリームはスロットリングされます。Lambda の制限の詳細については、「[AWS Lambda の制限](https://docs.aws.amazon.com/lambda/latest/dg/limits.html)」を参照してください。

**Lambda のサブスクリプションフィルタを作成するには**

1.  AWS Lambda 関数を作成します。

   Lambda 実行ロールをセットアップ済みであることを確認します。詳細については、*AWS Lambda デベロッパーガイド*の「[ステップ 2.2: IAM ロール (実行ロール) を作成する](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)」を参照してください。

1. テキストエディターを開き、以下の内容で `helloWorld.js` という名前のファイルを作成します。

   ```
   var zlib = require('zlib');
   exports.handler = function(input, context) {
       var payload = Buffer.from(input.awslogs.data, 'base64');
       zlib.gunzip(payload, function(e, result) {
           if (e) { 
               context.fail(e);
           } else {
               result = JSON.parse(result.toString());
               console.log("Event Data:", JSON.stringify(result, null, 2));
               context.succeed();
           }
       });
   };
   ```

1. helloWorld.js ファイルを圧縮して `helloWorld.zip` という名前で保存します。

1. 次のコマンドを使用します。ロールは、最初のステップで設定した Lambda 実行ロールです。

   ```
   aws lambda create-function \
       --function-name helloworld \
       --zip-file fileb://file-path/helloWorld.zip \
       --role lambda-execution-role-arn \
       --handler helloWorld.handler \
       --runtime nodejs12.x
   ```

1. CloudWatch Logs に、関数を実行するためのアクセス権限を付与します。次のコマンドを使用します。プレースホルダーは自身のアカウントに置き換え、プレースホルダーロググループは処理するロググループに置き換えます。

   ```
   aws lambda add-permission \
       --function-name "helloworld" \
       --statement-id "helloworld" \
       --principal "logs.amazonaws.com" \
       --action "lambda:InvokeFunction" \
       --source-arn "arn:aws:logs:region:123456789123:log-group:TestLambda:*" \
       --source-account "123456789012"
   ```

1. 次のコマンドを使用してサブスクリプションフィルタを作成します。プレースホルダーアカウントは自身のアカウントに置き換え、プレースホルダーロググループは処理するロググループに置き換えます。

   ```
   aws logs put-subscription-filter \
       --log-group-name myLogGroup \
       --filter-name demo \
       --filter-pattern "" \
       --destination-arn arn:aws:lambda:region:123456789123:function:helloworld
   ```

1. (オプション) サンプルのログイベントを使用してテストします。コマンドプロンプトで、次のコマンドを実行します。これにより、サブスクライブしたストリームに単純なログメッセージが送信されます。

   Lambda 関数の出力を確認するには、Lambda 関数に移動して、/aws/lambda/helloworld にある出力を参照します。

   ```
   aws logs put-log-events --log-group-name myLogGroup --log-stream-name stream1 --log-events "[{\"timestamp\":<CURRENT TIMESTAMP MILLIS> , \"message\": \"Simple Lambda Test\"}]"
   ```

   Lambda の配列を含むレスポンスが表示されます。Lambda レコードの **[Data]** (データ) 属性は、base64 でエンコードされており、gzip 形式で圧縮されています。Lambda が受け取る実際のペイロードは、`{ "awslogs": {"data": "BASE64ENCODED_GZIP_COMPRESSED_DATA"} }` の形式になります。raw データは、コマンドラインから次の UNIX コマンドを使用して調べることができます。

   ```
   echo -n "<BASE64ENCODED_GZIP_COMPRESSED_DATA>" | base64 -d | zcat
   ```

   base64 でデコードおよび解凍されたデータは、次の構造を使用して JSON としてフォーマットされます。

   ```
   {
       "owner": "123456789012",
       "logGroup": "CloudTrail",
       "logStream": "123456789012_CloudTrail_us-east-1",
       "subscriptionFilters": [
           "Destination"
       ],
       "messageType": "DATA_MESSAGE",
       "logEvents": [
           {
               "id": "31953106606966983378809025079804211143289615424298221568",
               "timestamp": 1432826855000,
               "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}"
           },
           {
               "id": "31953106606966983378809025079804211143289615424298221569",
               "timestamp": 1432826855000,
               "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}"
           },
           {
               "id": "31953106606966983378809025079804211143289615424298221570",
               "timestamp": 1432826855000,
               "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}"
           }
       ]
   }
   ```

   上のデータ構造の主な要素は次のとおりです。  
**owner (オーナー)**  
元のログデータの AWS アカウント ID。  
**logGroup**  
発行元ログデータのロググループ名。  
**logStream**  
発行元ログデータのログストリーム名。  
**subscriptionFilters**  
発行元ログデータと一致したサブスクリプションフィルタ名のリスト。  
**messageType**  
データメッセージは、"DATA\$1MESSAGE" 型を使用します。CloudWatch Logs は、主に送信先が到達可能であるかどうかをチェックするために、"CONTROL\$1MESSAGE" 型の Lambda レコードを発行することがあります。  
**logEvents**  
ログイベントレコードの配列として表される実際のログデータ。"id" プロパティは、各ログイベントの一意識別子です。

## 例 3: Amazon Data Firehose を使用したサブスクリプションフィルター
<a name="FirehoseExample"></a>

この例では、CloudWatch Logs サブスクリプションを作成して、定義されたフィルターに一致する受信ログイベントを Amazon Data Firehose 配信ストリームに送信します。CloudWatch Logs から Amazon Data Firehose に送信されたデータは、既に gzip レベル 6 圧縮で圧縮されているため、Firehose 配信ストリーム内で圧縮を使用する必要はありません。その後、Firehose の解凍機能を使用して、ログを自動的に解凍できます。詳細については、「[CloudWatch Logs を Firehose に送信する](https://docs.aws.amazon.com/logs/SubscriptionFilters.html#FirehoseExample)」を参照してください。

**注記**  
Firehose ストリームを作成する前に、生成するログデータのボリュームを計算します。このボリュームを処理できる Firehose ストリームを作成するように注意してください。ストリームがこのボリュームを処理できない場合、ログストリームはスロットリングされます。Firehose ストリームボリュームの制限事項の詳細については、「[Amazon Data Firehose Data Limits](https://docs.aws.amazon.com/firehose/latest/dev/limits.html)」をご参照ください。

**Firehose のサブスクリプションフィルターを作成するには**

1. Amazon Simple Storage Service (Amazon S3) バケットを作成します。CloudWatch Logs 専用に作成したバケットを使用することをお勧めします。ただし、既存のバケットを使用する場合は、ステップ 2 に進みます。

   次のコマンドを実行します。プレースホルダーリージョンは、使用するリージョンに置き換えます。

   ```
   aws s3api create-bucket --bucket amzn-s3-demo-bucket2 --create-bucket-configuration LocationConstraint=region
   ```

   出力例を次に示します。

   ```
   {
       "Location": "/amzn-s3-demo-bucket2"
   }
   ```

1. Amazon S3 バケットにデータを置くためのアクセス許可を Amazon Data Firehose に付与する IAM ロールを作成します。

   詳細については、「*Amazon Data Firehose 開発者ガイド*」の「[Controlling Access with Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html)」を参照してください。

   まず、テキストエディタを使用して、次のようにファイル `~/TrustPolicyForFirehose.json` で信頼ポリシーを作成します。

   ```
   {
     "Statement": {
       "Effect": "Allow",
       "Principal": { "Service": "firehose.amazonaws.com" },
       "Action": "sts:AssumeRole"
       } 
   }
   ```

1. **create-role** コマンドを使用し、信頼ポリシーファイルを指定して IAM ロールを作成します。後のステップで必要になるため、返された **Role.Arn** 値を書き留めます。

   ```
   aws iam create-role \
    --role-name FirehosetoS3Role \
    --assume-role-policy-document file://~/TrustPolicyForFirehose.json
   
   {
       "Role": {
           "AssumeRolePolicyDocument": {
               "Statement": {
                   "Action": "sts:AssumeRole",
                   "Effect": "Allow",
                   "Principal": {
                       "Service": "firehose.amazonaws.com"
                   }
               }
           },
           "RoleId": "AAOIIAH450GAB4HC5F431",
           "CreateDate": "2015-05-29T13:46:29.431Z",
           "RoleName": "FirehosetoS3Role",
           "Path": "/",
           "Arn": "arn:aws:iam::123456789012:role/FirehosetoS3Role"
       }
   }
   ```

1. アクセス許可ポリシーを作成し、Firehose がアカウントで実行できるアクションを定義します。まず、テキストエディタを使用してファイル `~/PermissionsForFirehose.json` で権限ポリシーを作成します。

   ```
   {
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [ 
             "s3:AbortMultipartUpload", 
             "s3:GetBucketLocation", 
             "s3:GetObject", 
             "s3:ListBucket", 
             "s3:ListBucketMultipartUploads", 
             "s3:PutObject" ],
         "Resource": [ 
             "arn:aws:s3:::amzn-s3-demo-bucket2", 
             "arn:aws:s3:::amzn-s3-demo-bucket2/*" ]
       }
     ]
   }
   ```

1. 次の put-role-policy コマンドを使用して、アクセス許可ポリシーをロールに関連付けます。

   ```
   aws iam put-role-policy --role-name FirehosetoS3Role --policy-name Permissions-Policy-For-Firehose --policy-document file://~/PermissionsForFirehose.json
   ```

1. 次のように、送信先 Firehose 配信ストリームを作成します。**RoleARN** と **BucketARN** のプレースホルダー値を、作成したロールおよびバケット ARN に置き換えます。

   ```
   aws firehose create-delivery-stream \
      --delivery-stream-name 'my-delivery-stream' \
      --s3-destination-configuration \
     '{"RoleARN": "arn:aws:iam::123456789012:role/FirehosetoS3Role", "BucketARN": "arn:aws:s3:::amzn-s3-demo-bucket2"}'
   ```

   Firehose は、配信された Amazon S3 オブジェクトに対して、YYYY/MM/DD/HH UTC 時間形式のプレフィックスを自動的に使用することに注意してください。時間形式プレフィックスの前に、追加のプレフィックスを指定できます。プレフィックスの最後がフォワードスラッシュ (/) の場合は、Amazon S3 バケット内のフォルダとして表示されます。

1. ストリームがアクティブになるまで待ちます (これには数分かかる可能性があります)。Firehose **describe-delivery-stream** コマンドを使用して、**DeliveryStreamDescription.DeliveryStreamStatus** プロパティをチェックできます。さらに、後のステップで必要になるため、**DeliveryStreamDescription.DeliveryStreamARN** 値を書き留めます。

   ```
   aws firehose describe-delivery-stream --delivery-stream-name "my-delivery-stream"
   {
       "DeliveryStreamDescription": {
           "HasMoreDestinations": false,
           "VersionId": "1",
           "CreateTimestamp": 1446075815.822,
           "DeliveryStreamARN": "arn:aws:firehose:us-east-1:123456789012:deliverystream/my-delivery-stream",
           "DeliveryStreamStatus": "ACTIVE",
           "DeliveryStreamName": "my-delivery-stream",
           "Destinations": [
               {
                   "DestinationId": "destinationId-000000000001",
                   "S3DestinationDescription": {
                       "CompressionFormat": "UNCOMPRESSED",
                       "EncryptionConfiguration": {
                           "NoEncryptionConfig": "NoEncryption"
                       },
                       "RoleARN": "delivery-stream-role",
                       "BucketARN": "arn:aws:s3:::amzn-s3-demo-bucket2",
                       "BufferingHints": {
                           "IntervalInSeconds": 300,
                           "SizeInMBs": 5
                       }
                   }
               }
           ]
       }
   }
   ```

1. Firehose 配信ストリームにデータを置くためのアクセス許可を CloudWatch Logs に付与する IAM ロールを作成します。まず、テキストエディタを使用してファイル `~/TrustPolicyForCWL.json` で信頼ポリシーを作成します。

   このポリシーには、「混乱した代理」のセキュリティ上の問題を防止するための `aws:SourceArn` グローバル条件コンテキストキーが含まれています。詳細については、「[混乱した代理の防止](Subscriptions-confused-deputy.md)」を参照してください。

   ```
   {
     "Statement": {
       "Effect": "Allow",
       "Principal": { "Service": "logs.amazonaws.com" },
       "Action": "sts:AssumeRole",
       "Condition": { 
            "StringLike": { 
                "aws:SourceArn": "arn:aws:logs:region:123456789012:*"
            } 
        }
     }
   }
   ```

1. **create-role** コマンドを使用し、信頼ポリシーファイルを指定して IAM ロールを作成します。後のステップで必要になるため、返された **Role.Arn** 値を書き留めます。

   ```
   aws iam create-role \
   --role-name CWLtoKinesisFirehoseRole \
   --assume-role-policy-document file://~/TrustPolicyForCWL.json
   
   {
       "Role": {
           "AssumeRolePolicyDocument": {
               "Statement": {
                   "Action": "sts:AssumeRole",
                   "Effect": "Allow",
                   "Principal": {
                       "Service": "logs.amazonaws.com"
                   },
                   "Condition": { 
                        "StringLike": { 
                            "aws:SourceArn": "arn:aws:logs:region:123456789012:*"
                        } 
                    }
               }
           },
           "RoleId": "AAOIIAH450GAB4HC5F431",
           "CreateDate": "2015-05-29T13:46:29.431Z",
           "RoleName": "CWLtoKinesisFirehoseRole",
           "Path": "/",
           "Arn": "arn:aws:iam::123456789012:role/CWLtoKinesisFirehoseRole"
       }
   }
   ```

1. 権限ポリシーを作成し、CloudWatch Logs がアカウントで実行できるアクションを定義します。まず、テキストエディタを使用して権限ポリシーファイル (例: `~/PermissionsForCWL.json`) を作成します。

   ```
   {
       "Statement":[
         {
           "Effect":"Allow",
           "Action":["firehose:PutRecord"],
           "Resource":[
               "arn:aws:firehose:region:account-id:deliverystream/delivery-stream-name"]
         }
       ]
   }
   ```

1. put-role-policy コマンドを使用して、権限ポリシーをロールに関連付けます。

   ```
   aws iam put-role-policy --role-name CWLtoKinesisFirehoseRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL.json
   ```

1. Amazon Data Firehose 配信ストリームがアクティブ状態になり、IAM ロールを作成したら、CloudWatch Logs サブスクリプションフィルターを作成できます。サブスクリプションフィルターにより、選択されたロググループから Amazon Data Firehose 配信ストリームへのリアルタイムログデータのフローがすぐに開始されます。

   ```
   aws logs put-subscription-filter \
       --log-group-name "CloudTrail" \
       --filter-name "Destination" \
       --filter-pattern "{$.userIdentity.type = Root}" \
       --destination-arn "arn:aws:firehose:region:123456789012:deliverystream/my-delivery-stream" \
       --role-arn "arn:aws:iam::123456789012:role/CWLtoKinesisFirehoseRole"
   ```

1. サブスクリプションフィルターを設定したら、CloudWatch Logs からフィルタパターンに一致するすべての受信ログイベントが Amazon Data Firehose 配信ストリームに転送されます。Amazon Data Firehose 配信ストリームに設定された時間バッファ間隔に基づいて、Amazon S3 にデータが表示されるようになります。十分な時間が経過すると、Amazon S3 バケットをチェックしてデータを確認できます。

   ```
   aws s3api list-objects --bucket 'amzn-s3-demo-bucket2' --prefix 'firehose/'
   {
       "Contents": [
           {
               "LastModified": "2015-10-29T00:01:25.000Z",
               "ETag": "\"a14589f8897f4089d3264d9e2d1f1610\"",
               "StorageClass": "STANDARD",
               "Key": "firehose/2015/10/29/00/my-delivery-stream-2015-10-29-00-01-21-a188030a-62d2-49e6-b7c2-b11f1a7ba250",
               "Owner": {
                   "DisplayName": "cloudwatch-logs",
                   "ID": "1ec9cf700ef6be062b19584e0b7d84ecc19237f87b5"
               },
               "Size": 593
           },
           {
               "LastModified": "2015-10-29T00:35:41.000Z",
               "ETag": "\"a7035b65872bb2161388ffb63dd1aec5\"",
               "StorageClass": "STANDARD",
               "Key": "firehose/2015/10/29/00/my-delivery-stream-2015-10-29-00-35-40-7cc92023-7e66-49bc-9fd4-fc9819cc8ed3",
               "Owner": {
                   "DisplayName": "cloudwatch-logs",
                   "ID": "1ec9cf700ef6be062b19584e0b7d84ecc19237f87b6"
               },
               "Size": 5752
           }
       ]
   }
   ```

   ```
   aws s3api get-object --bucket 'amzn-s3-demo-bucket2' --key 'firehose/2015/10/29/00/my-delivery-stream-2015-10-29-00-01-21-a188030a-62d2-49e6-b7c2-b11f1a7ba250' testfile.gz
   
   {
       "AcceptRanges": "bytes",
       "ContentType": "application/octet-stream",
       "LastModified": "Thu, 29 Oct 2015 00:07:06 GMT",
       "ContentLength": 593,
       "Metadata": {}
   }
   ```

   Simple Storage Service (Amazon S3) オブジェクトのデータは、gzip 形式で圧縮されます。raw データは、コマンドラインから次の UNIX コマンドを使用して調べることができます。

   ```
   zcat testfile.gz
   ```

## 例 4: Amazon OpenSearch Service を使用したサブスクリプションフィルター
<a name="OpenSearchExample"></a>

この例では、CloudWatch Logs サブスクリプションを作成して、定義されたフィルターに一致する受信ログイベントを OpenSearch Service ドメインに送信します。

**OpenSearch Service のサブスクリプションフィルターを作成するには**

1. OpenSearch Service ドメインを作成します。詳細については、「[OpenSearch Service ドメインの作成](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/createupdatedomains.html#createdomains)」を参照してください。

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1.  ナビゲーションペインで、**[Log groups]** (ロググループ) を選択します。

1. ロググループの名前を選択します。

1. **[Actions]** (アクション)、**[Subscription filters]** (サブスクリプションフィルター)、**[Create Amazon OpenSearch Service subscription filter]** (Amazon OpenSearch Service サブスクリプションフィルターを作成) の順に選択します。

1. このアカウントのクラスターにストリーミングするか、別のアカウントにストリーミングするかを選択します。
   + **[このアカウント]** を選択した場合は、ステップ 1 で作成したドメインを選択します。
   + **[別のアカウント]** を選択した場合は、そのドメインの ARN とエンドポイントを入力します。

1.  別のアカウントを選択した場合は、ドメイン ARN とエンドポイントを指定します。

1. Amazon OpenSearch Service クラスターの場合、ロググループデータが配信されるクラスターの名前を選択します。

1. ログ形式を選択します。

1. [**サブスクリプションフィルターのパターン**] に、ログイベントで検索する用語やパターンを入力します。これにより、関心のあるデータだけが OpenSearch Service クラスターに送信されるようになります。詳細については、「[メトリクスフィルターのフィルターパターン構文](FilterAndPatternSyntaxForMetricFilters.md)」を参照してください。

1. (オプション) [**Select log data to test**] (テストするログデータの選択) を開き、ログストリームを選択してから、[**Test pattern**] (パターンをテスト) を選択して、期待通りの結果が出ることを確認します。

1. [**Start streaming**] (ストリーミングの開始) を選択します。