

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Amazon Data Firehose 將資料串流至資料表
<a name="s3-tables-integrating-firehose"></a>

Amazon Data Firehose 是一種全託管服務，可將即時[串流資料](https://aws.amazon.com//streaming-data/)交付到目的地，如 Amazon S3、Amazon Redshift、Amazon OpenSearch Service、Splunk、Apache Iceberg Tables，以及任何自訂 HTTP 端點或受支援的第三方服務提供者所擁有的 HTTP 端點。使用 Amazon Data Firehose，您將不再需要編寫應用程式或管理資源。將您的資料產生來源設定為把資料傳送至 Firehose，它就會將資料自動交付至您指定的目的地。您也可以將 Firehose 設定為在交付資料前轉換您的資料。若要進一步了解 Amazon Data Firehose，請參閱[什麼是 Amazon Data Firehose？](https://docs.aws.amazon.com//firehose/latest/dev/what-is-this-service.html)

請完成下列步驟，以設定 Firehose 串流至 S3 資料表儲存貯體中的資料表：

1.  [整合資料表儲存貯體與 AWS 分析服務](s3-tables-integrating-aws.md)。

1. 設定 Firehose 將資料交付到您的 S3 資料表。若要這樣做，您可以[建立允許 Firehose 存取資料表的 AWS Identity and Access Management (IAM) 服務角色](#firehose-role-s3tables)。

1. 將 Firehose 服務角色明確許可權授予資料表或資料表命名空間。如需詳細資訊，請參閱[授予必要的許可](https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-prereq.html#s3-tables-prerequisites)。

1. [建立 Firehose 串流，將資料路由到您的資料表。](#firehose-stream-tables)

## 為 Firehose 建立角色以使用 S3 資料表作為目的地
<a name="firehose-role-s3tables"></a>

Firehose 需要具有特定許可的 IAM [服務角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-service.html)，才能存取 AWS Glue 資料表並將資料寫入 S3 資料表。您需要在建立 Firehose 串流時提供此 IAM 角色。

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在左側導覽窗格中選擇**政策**。

1. 選擇**建立政策**，然後在政策編輯器中選擇 **JSON**。

1. 新增下列內嵌政策，授予資料目錄中的所有資料庫和資料表的許可。如有需要，您可以只授予特定資料表和資料庫的許可。若要使用此政策，請以您自己的資訊取代 `user input placeholders`。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "S3TableAccessViaGlueFederation",
               "Effect": "Allow",
               "Action": [
                   "glue:GetTable",
                   "glue:GetDatabase",
                   "glue:UpdateTable"
               ],
               "Resource": [
                   "arn:aws:glue:us-east-1:111122223333:catalog/s3tablescatalog/*",
                   "arn:aws:glue:us-east-1:111122223333:catalog/s3tablescatalog",
                   "arn:aws:glue:us-east-1:111122223333:catalog",
                   "arn:aws:glue:us-east-1:111122223333:database/*",
                   "arn:aws:glue:us-east-1:111122223333:table/*/*"
               ]
           },
           {
               "Sid": "S3DeliveryErrorBucketPermission",
               "Effect": "Allow",
               "Action": [
                   "s3:AbortMultipartUpload",
                   "s3:GetBucketLocation",
                   "s3:GetObject",
                   "s3:ListBucket",
                   "s3:ListBucketMultipartUploads",
                   "s3:PutObject"
               ],
               "Resource": [
                   "arn:aws:s3:::error delivery bucket",
                   "arn:aws:s3:::error delivery bucket/*"
               ]
           },
           {
               "Sid": "RequiredWhenUsingKinesisDataStreamsAsSource",
               "Effect": "Allow",
               "Action": [
                   "kinesis:DescribeStream",
                   "kinesis:GetShardIterator",
                   "kinesis:GetRecords",
                   "kinesis:ListShards"
               ],
               "Resource": "arn:aws:kinesis:us-east-1:111122223333:stream/stream-name"
           },
           {
               "Sid": "RequiredWhenDoingMetadataReadsANDDataAndMetadataWriteViaLakeformation",
               "Effect": "Allow",
               "Action": [
                   "lakeformation:GetDataAccess"
               ],
               "Resource": "*"
           },
           {
               "Sid": "RequiredWhenUsingKMSEncryptionForS3ErrorBucketDelivery",
               "Effect": "Allow",
               "Action": [
                   "kms:Decrypt",
                   "kms:GenerateDataKey"
               ],
               "Resource": [
                   "arn:aws:kms:us-east-1:111122223333:key/KMS-key-id"
               ],
               "Condition": {
                   "StringEquals": {
                       "kms:ViaService": "s3.us-east-1.amazonaws.com"
                   },
                   "StringLike": {
                       "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::error delivery bucket/prefix*"
                   }
               }
           },
           {
               "Sid": "LoggingInCloudWatch",
               "Effect": "Allow",
               "Action": [
                   "logs:PutLogEvents"
               ],
               "Resource": [
                   "arn:aws:logs:us-east-1:111122223333:log-group:log-group-name:log-stream:log-stream-name"
               ]
           },
           {
               "Sid": "RequiredWhenAttachingLambdaToFirehose",
               "Effect": "Allow",
               "Action": [
                   "lambda:InvokeFunction",
                   "lambda:GetFunctionConfiguration"
               ],
               "Resource": [
                   "arn:aws:lambda:us-east-1:111122223333:function:function-name:function-version"
               ]
           }
       ]
   }
   ```

------

   此政策具有允許存取 Kinesis Data Streams、叫用 Lambda 函數和存取 AWS KMS 金鑰的陳述式。如果您不使用任何這些資源，您可以移除個別的陳述式。

   如果啟用錯誤記錄，Firehose 也會一併將資料交付錯誤傳送至 CloudWatch 日誌群組與串流。為此，您必須設定日誌群組和日誌串流名稱。如需日誌群組和日誌串流名稱，請參閱[使用 CloudWatch Logs 監控 Amazon Data Firehose](https://docs.aws.amazon.com//firehose/latest/dev/controlling-access.html#using-iam-iceberg)。

1. 建立政策後，請使用 **AWS 服務**建立 IAM 角色，以作為**信任的實體類型**。

1. 針對**服務或使用案例**，選擇 **Kinesis**。針對**使用案例**，選擇 **Kinesis Firehose**。

1. 選取**下一步**，然後選取您稍早建立的政策。

1. 為您的角色命名。檢閱您的角色詳細資料，並選擇**建立角色**。角色會擁有下列信任政策。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "sts:AssumeRole"
               ],
               "Principal": {
                   "Service": [
                       "firehose.amazonaws.com"
                   ]
               }
           }
       ]
   }
   ```

------

## 建立定目的地為 S3 資料表的 Firehose 串流
<a name="firehose-stream-tables"></a>

下列程序說明如何建立 Firehose 串流，以使用主控台將資料交付至 S3 資料表。設定目的地為 S3 資料表的 Firehose 串流時，需要達成下列先決條件。

**先決條件**
+ [整合資料表儲存貯體與 AWS 分析服務](s3-tables-integrating-aws.md)。
  + [建立命名空間。](s3-tables-namespace-create.md).
  + [建立資料表](s3-tables-create.md).
+ 建立 [Firehose 的角色以存取 S3 Tables](#firehose-role-s3tables)。
+ 將[必要的許可授予](https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-prereq.html#s3-tables-prerequisites)您建立以存取資料表的 Firehose 服務角色。

若要在設定串流時為 Firehose 提供路由資訊，您可以使用您的命名空間做為資料庫名稱，以及該命名空間中資料表的名稱。您可以在 Firehose 串流組態的唯一鍵區段中使用這些值，將資料路由到單一資料表。您也可以使用此值，透過 JSON Query 表達式路由至資料表。如需詳細資訊，請參閱[將傳入記錄路由至單一 Iceberg 資料表](https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-format-input-record.html)。

**設定目的地為 S3 資料表的 Firehose 串流 (主控台)**

1. 開啟位於 [https://console.aws.amazon.com/firehose/](https://console.aws.amazon.com/firehose/) 的 Firehose 主控台。

1. 選擇**建立 Firehose 串流**。

1. 針對**來源**，選擇下列其中一個來源：
   + Amazon Kinesis Data Streams
   + Amazon MSK
   + 直接 PUT

1. 對於**目的地**，請選擇 **Apache Iceberg Tables**。

1. 輸入 **Firehose 串流名稱**。

1. 設定您的**來源設定**。

1. 對於**目的地設定**，選擇要串流至您帳戶中資料表的**目前帳戶**，或針對另一個帳戶中的資料表選擇**跨帳戶**。
   + 對於**目前帳戶**中的資料表，從**目錄**下拉式清單中選取您的 S3 Tables 目錄。
   + 對於**跨帳戶**中的資料表，輸入您要串流到另一個帳戶之目錄的**目錄 ARN**。

1. 使用**唯一鍵組態**、JSONQuery 運算式或在 Lambda 函式中，設定資料庫和資料表名稱。如需詳細資訊，請參閱《Amazon Data Firehose 開發人員指南》**中的[將傳入記錄路由至單一 Iceberg 資料表](https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-format-input-record.html)，以及[將傳入記錄路由至不同的 Iceberg 資料表](https://docs.aws.amazon.com//firehose/latest/dev/apache-iceberg-format-input-record-different.html)。

1. 在**備份設定**下，指定 **S3 備份儲存貯體**。

1. 針對**進階設定**下的**現有 IAM 角色**，選取您為 Firehose 建立的 IAM 角色。

1. 選擇**建立 Firehose 串流**。

如需有關您可以為串流設定之其他設定的詳細資訊，請參閱《Amazon Data Firehose 開發人員指南》**中的[設定 Firehose 串流](https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-stream.html)。