はじめに
皆さん、実はAmazon S3のデータをHeatWave on AWSから直接アクセスできることはご存知でしょうか。
以前投稿したブログ記事のRDS Aurora MySQL Snapshot to OCI HeatWave Lakehouseを試してみたでは、Amazon AuroraのスナップショットデータをAmazon S3バケットからOCI Object Storageに一度コピーしてからHeatWave Lakehouseにインポートする必要がありました。
そこで、今回はAmazon S3にエクスポートしたAmazon Auroraのスナップショットデータを直接HeatWave on AWSにインポートする方法をご紹介いたします。
前提
本ブログ記事の前提条件は以下の通りです。
- HeatWave on AWSのDBインスタンスが既に作成されていること
- Amazon S3にAmazon RDSまたはAmazon AuroraにDBスナップショットがエクスポートされていること
※エクスポート方法については、以前投稿した記事をご参照ください。
手順
1. AWSでIAMポリシーとIAMロールを作成する
HeatWave on AWS上からAmazon S3上のエクスポートデータに直接アクセスする権限を設定します。
今回は AWS CLIコマンドを使って、IAMポリシーとIAMロールを作成します。
1-1. IAMポリシーの作成
必要な情報は以下の2つで、事前にAWS上で確認しておきます。
- Amazon S3のバケットネーム
- (Amazon S3内のオブジェクトをKMSキーで暗号している場合)KMSキーのARN
IAMポリシー作成コマンドは以下の通りです。
Amazon S3に対するIAMポリシーの作成についてドキュメントに記載されていますので、詳細はこちらをご覧ください。
https://dev.mysql.com/doc/heatwave-aws/en/heatwave-aws-creating-iam-policy.html
ここでは、S3MappingPolicyKNDというポリシー名で、ss-knd-test-bucketというAmazon S3バケットに対するデータインポートの許可とKMSキーに対するアクセス許可を設定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
aws iam create-policy --policy-name S3MappingPolicyKND --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::ss-knd-test-bucket/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::ss-knd-test-bucket" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": [ "arn:aws:kms:ap-northeast-1:xxxxxxxxxxxx:key/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" ] } ] }' |
実行すると以下の実行結果が表示され、IAMポリシーが作成されます。このあと、IAMロールにポリシーをアタッチするため、ARNを確認しておきます。また、ARNはOCI上で設定する際にも使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "Policy": { "PolicyName": "S3MappingPolicyKND", "PolicyId": "xxxxxxxxxxxxxxxxxxxxx", "Arn": "arn:aws:iam::xxxxxxxxxxxx:policy/S3MappingPolicyKND", "Path": "/", "DefaultVersionId": "v1", "AttachmentCount": 0, "PermissionsBoundaryUsageCount": 0, "IsAttachable": true, "CreateDate": "2025-04-08T01:04:33+00:00", "UpdateDate": "2025-04-08T01:04:33+00:00" } |
1-2. IAMロールの作成
続いて、Amazon S3 バケットにアクセスするためのIAMロールの作成を行います。
IAMロール作成についてドキュメントに記載されていますので、詳細はこちらをご覧ください。
https://dev.mysql.com/doc/heatwave-aws/en/heatwave-aws-creating-iam-role.html
今回、IAMロール作成に必要なOCI情報は以下の2つで、事前にOCI上で確認しましょう。
- テナンシのOCID
- (特定のDB システムへのアクセスを許可する場合)HeatWave on AWSのリソースID
IAMロール作成コマンドは以下の通りです。
ここでは、s3-mapping-role-kndというロール名で、テナンシ内の特定のDBシステムへアクセス許可を設定しています。
< テナンシのOCID >/< HeatWave on AWSのリソースID >は、事前に確認した値で置き換えてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
aws iam create-role --role-name s3-mapping-role-knd --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": "xxxxxxxxxxxx" }, "Condition": { "StringLike": { "sts:ExternalId": "<テナンシのOCID>/<HeatWave on AWSのリソースID>" } } } ] }' |
実行するとIAMロールが作成されます。このあとIAMロールにポリシーをアタッチするため、ロール名を確認しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
{ "Role": { "Path": "/", "RoleName": "s3-mapping-role-knd", "RoleId": "xxxxxxxxxxxxxxxxxxxxx", "Arn": "arn:aws:iam::xxxxxxxxxxx:role/s3-mapping-role-knd", "CreateDate": "2025-04-08T00:47:04+00:00", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": "xxxxxxxxxxxx" }, "Condition": { "StringLike": { "sts:ExternalId": "ocid1.tenancy.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" } } } ] } } } |
1-3.IAMポリシーをIAMロールにアタッチする
以下のコマンドを実行します。
ここでは、ロール名:s3-mapping-role-kndに対して、ポリシー名:S3MappingPolicyKNDをアタッチしています。
1 |
aws iam attach-role-policy --policy-arn arn:aws:iam::xxxxxxxxxxxx:policy/S3MappingPolicyKND --role-name s3-mapping-role-knd |
以上でAWS側の設定は完了です。
2.HeatWave on AWSにIAMロールを設定する
続いて、OCI上でHeatwave on AWSに設定を行います。
HeatWave on AWSのDBインスタンスに接続し、「DBシステムの詳細画面」で「Edit DB System」をクリックします。
IAM roles項目の設定をします。
ここで「Custom Lakehouse role」を選択し、さきほど作成したAmazon S3アクセス用のIAMロールのARNを指定します。
3.AWS S3から直接HeatWave on AWSにスナップショットデータをインポートする
左側メニューから「Data Management」を選択し、画面上部で「Lakehouse Mapping」を選択します。
「Create Lakehouse Mapping画面」で以下のように設定し、HeatWave Lakehouseにスナップショットデータをインポートします。
今回はworldスキーマのcountryテーブルをインポートしてみます。
1 2 3 4 5 6 7 8 9 10 |
1. Source configuration - Use your own data 2. S3 files - File path type : Prefix - File path : インポートするテーブルのAWS S3格納したスナップショットデータのS3 URI 3. File parsing settings - Format : Parquet 4. Destination - Schema : インポートするスキーマ名 - Table : インポートするテーブル名 |
スナップショットデータが問題なくロードできると、インポート対象のテーブル定義と必要となるメモリー量の見積りが表示されます。
インポートが開始されると「Data Management画面」にデータのロード状況が表示されます。
下記のようにLoaded欄が100になれば、無事にインポート成功です。
念のため、きちんとインポートできているかどうかクエリを実行して確認してみます。
クエリ実行結果からもデータがインポートされていることが分かります。
まとめ
今回、Amazon S3のエクスポートデータを直接HeatWave on AWSへインポートできることを確認できました。
AWSにはAmazon Redshiftがありますが、今回ご紹介した手順で費用対効果/性能で優位性のあるHeatWave Lakehouseでデータ分析を行うことが可能になります。
こちらに関連した弊社ブログ記事で、Oracle社が公開する TPC-H 派生ベンチマークを基にHeatWaveとAmazon Redshiftを比較検証してみた記事もありますので、ぜひご参照いただければ幸いです。
この機会に、HeatWave on AWSとHeatWave Lakehouseをお試しください!