Amazon Data Firehose は、Amazon S3、Amazon Redshift、Amazon OpenSearch Service、Splunk、Apache Iceberg テーブル、カスタム HTTP エンドポイント、またはサポートされているサードパーティーのサービスプロバイダーが所有する HTTP エンドポイントなどのターゲットにリアルタイムのストリーミングデータ
テーブルバケットを AWS 分析サービスと統合した後、以下を行います。
-
S3 テーブルにデータを配信するように Firehose を設定します。そのためには、Firehose がテーブルにアクセスできるようにする AWS Identity and Access Management (IAM) サービスロールを作成します。
-
テーブルまたはテーブルの名前空間へのリソースリンクを作成します。
-
リソースリンクに対するアクセス許可を付与することで、Firehose サービスロールにテーブルまたはテーブルの名前空間に対する明示的なアクセス許可を付与します。
-
テーブルにデータをルーティングする Firehose ストリームを作成します。
Firehose が S3 テーブルを送信先として使用するロールの作成
Firehose には、AWS Glue テーブルにアクセスし、S3 テーブルにデータを書き込むための特定のアクセス許可を持つ IAM サービスロールが必要です。Firehose ストリームを作成する際に、この IAM ロールが必要です。
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
左のナビゲーションペインの [ポリシー] を選択します。
-
[ポリシーを作成] を選択し、ポリシーエディタで [JSON] を選択します。
-
データカタログ内のすべてのデータベースとテーブルにアクセス許可を付与する次のインラインポリシーを追加します。必要に応じて、特定のテーブルとデータベースにのみ許可を付与できます。このポリシーを使用するには、
をユーザー自身の情報に置き換えます。user input placeholders
{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3TableAccessViaGlueFederation", "Effect": "Allow", "Action": [ "glue:GetTable", "glue:GetDatabase", "glue:UpdateTable" ], "Resource": [ "arn:aws:glue:
region
:account-id
:catalog/s3tablescatalog/*", "arn:aws:glue:region
:account-id
:catalog/s3tablescatalog", "arn:aws:glue:region
:account-id
:catalog", "arn:aws:glue:region
:account-id
:database/*", "arn:aws:glue:region
:account-id
: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:region
:account-id
:stream/stream-name
" }, { "Sid": "RequiredWhenDoingMetadataReadsANDDataAndMetadataWriteViaLakeformation", "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": "*" }, { "Sid": "RequiredWhenUsingKMSEncryptionForS3ErrorBucketDelivery", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:region
:account-id
:key/KMS-key-id
" ], "Condition": { "StringEquals": { "kms:ViaService": "s3.region
.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:region
:account-id
:log-group:log-group-name
:log-stream:log-stream-name
" ] }, { "Sid": "RequiredWhenAttachingLambdaToFirehose", "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunctionConfiguration" ], "Resource": [ "arn:aws:lambda:region
:account-id
:function:function-name
:function-version
" ] } ] }このポリシーには、Kinesis Data Streams へのアクセス、Lambda 関数の呼び出し、AWS KMS キーへのアクセスを許可するステートメントが含まれています。これらのリソースを使用しない場合は、それぞれのステートメントを削除できます。
エラーログ記録が有効になっている場合、Firehose はデータ配信エラーを CloudWatch ロググループとストリームにも送信します。このためには、ロググループとログストリーム名を設定する必要があります。ロググループとログストリーム名については、「Monitor Amazon Data Firehose Using CloudWatch Logs」を参照してください。
-
ポリシーを作成したら、[信頼されたエンティティタイプ] として [AWS サービス] を使用して IAM ロールを作成します。
-
[サービスまたはユースケース] で、[Kinesis] を選択します。[ユースケース]で、[Kinesis Firehose] を選択します。
-
[次へ] を選択して、以前に作成したポリシーを選択します。
-
ロールに名前を付けます。ロールの詳細を確認し、[ロールの作成] を選択します。ロールには、以下の信頼ポリシーがあります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Principal": { "Service": [ "firehose.amazonaws.com" ] } } ] }
テーブルの名前空間へのリソースリンクの作成
テーブルにアクセスするには、Amazon Data Firehose でテーブルの名前空間をターゲットとするリソースリンクが必要です。リソースリンクは、データベースやテーブルなどの別のデータカタログリソースのエイリアスまたはポインタとして機能するデータカタログオブジェクトです。リンクは、作成されたアカウントまたはリージョンのデータカタログに保存されます。詳細については、「AWS Lake Formation デベロッパーガイド」の「リソースリンクの仕組み」を参照してください。
テーブルバケットを AWS 分析サービスと統合した後、Firehose でテーブルを操作するためのリソースリンクを作成できます。
テーブル名前空間へのリソースリンクを作成し、そのリンク名を Firehose に渡して、Firehose がリンクされたテーブルを操作できるようにします。
次の AWS CLI コマンドは、S3 テーブルを Firehose に接続するために使用できるリソースリンクを作成します。このコマンドの例を実行するには、
をユーザー自身の情報に置き換えます。user input
placeholders
aws glue create-database --region
us-east-1
\ --catalog-id "111122223333
" \ --database-input \ '{ "Name": "resource-link-name
", "TargetDatabase": { "CatalogId": "111122223333
:s3tablescatalog/amzn-s3-demo-table-bucket
", "DatabaseName": "my_namespace
" }, "CreateTableDefaultPermissions": [] }'
注記
リソースリンクとターゲット (リンク先) 名前空間の両方にアクセス許可を個別に付与する必要があります。詳細については、「リソースリンクに対するアクセス許可の付与」を参照してください。
リソースリンクに対するアクセス許可の付与
リソースリンクを使用してテーブルにアクセスする場合、リソースリンクとターゲット (リンク先) 名前空間またはテーブルの両方にアクセス許可を個別に付与する必要があります。Lake Formation コンソールまたは AWS CLI を通じて、テーブル名前空間にリンクされたリソースリンクに対する Lake Formation 許可を IAM プリンシパルに付与できます。
-
https://console.aws.amazon.com/lakeformation/
で AWS Lake Formation コンソールを開き、データレイク管理者としてサインインします。データレイク管理者の作成方法の詳細については、「AWS Lake Formation デベロッパーガイド」の「データレイク管理者を作成する」を参照してください。 ナビゲーションペインで、[データアクセス許可]、[付与] の順に選択します。
[アクセス許可の付与] ページの [プリンシパル] で、[IAM ユーザーとロール] を選択し、テーブルへのストリーミング用に作成したサービスロールを選択します。
-
[LF タグまたはカタログリソース] で、[名前付きのデータカタログリソース] を選択します。
[カタログ] で、[デフォルトカタログ] であるアカウント ID を選択します。
-
[データベース] で、テーブル名前空間用に作成したリソースリンクを選択します。
-
[リソースリンクの許可] で、[記述] を選択します。
-
[Grant] (付与) を選択します。
S3 テーブルへの Firehose ストリームの設定
次の手順は、コンソールを使用して S3 テーブルにデータを配信するように Firehose ストリームを設定する方法を示しています。S3 テーブルへの Firehose ストリームを設定するには、次の前提条件が必要です。
前提条件
-
ストリームの宛先となる 名前空間へのリソースリンクの作成。
注記
Firehose のリソースリンクを作成する場合、名前には大文字、小文字、アンダースコア (_) のみを使用できます。
テーブルにストリーミングするために作成した Firehose サービスロールに テーブルリソースに対する Lake Formation 許可の付与。
注記
リソースリンクとターゲット (リンク) 名前空間またはテーブルの両方にアクセス許可を個別に付与する必要があります。Firehose には、リソースリンクに対する 記述アクセス許可が必要です。
ストリームを設定するときに Firehose にルーティング情報を提供するには、名前空間用に作成したリソースリンクの名前をデータベース名として、その名前空間内のテーブルの名前として使用します。これらの値は、Firehose ストリーム設定の一意のキーセクションで使用して、データを 1 つのテーブルにルーティングできます。この値を使用して、JSON クエリ式を使用してテーブルにルーティングすることもできます。詳細については、「Route incoming records to a single Iceberg table」を参照してください。
S3 テーブルへの Firehose ストリームを設定するには (コンソール)
Firehose コンソール (https://console.aws.amazon.com/firehose/
) を開きます。 -
[Firehose ストリームを作成] を選択します。
-
[ソース] で、以下のいずれかのオプションを選択します。
-
Amazon Kinesis Data Streams
-
Amazon MSK
-
ダイレクト PUT
-
-
[送信先] で、[Apache Iceberg テーブル] を選択します。
-
Firehose ストリーム名を入力します。
-
[ソース設定] を構成します。
-
[送信先設定] で、[現在のアカウント] とストリーミング先のテーブルの [AWS リージョン] を選択します。
-
[一意のキー設定]、JSONQuery 式、または Lambda 関数を使用して、データベース名とテーブル名を設定します。詳細については、「Firehose デベロッパーガイド」の「着信レコードを単一の Iceberg テーブルにルーティングする」および「着信レコードを異なる Iceberg テーブルにルーティングする」を参照してください。
-
[バックアップ設定] で、[S3 バックアップバケット] を指定します。
-
[詳細設定] の [既存の IAM ロール] で、Firehose 用に作成した IAM ロールを選択します。
[Firehose ストリームを作成] を選択します。
ストリームに対して設定できるその他の設定の詳細については、「Amazon Firehose デベロッパーガイド」の「Firehose ストリームを設定する」を参照してください。