3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Autonomous Database:S3バケットにファイルがアップロードされたら自動的に表にロードするライブ表フィードを設定してみた

Last updated at Posted at 2024-07-24

はじめに

特定のS3バケットに新規にファイルがアップロードされたら、自動的にAutonomous Database内の表にデータをロードする方法がマニュアルに記載されたので、検証してみました。

仕組みとしては、S3バケットのイベント通知をAmazon SNS経由でAutonomos Databaseが受信し、データのロード(ライブ表フィード)を行うというものです。

1. S3バケットの作成とファイルのアップロード

今回は、my-bucket-forlivefeedというS3バケットを作成し、その中にempdataというフォルダを用意しました。
スクリーンショット 2024-07-24 14.54.45.png

初期データとして、empdataフォルダにこちらのempdata1.txtをアプロードします。

empdata1.txt
1,SMITH
2,ALLEN
3,WARD

スクリーンショット 2024-07-24 14.53.30.png

2. Amazon S3に対するクラウド・ストレージ・リンク(クラウドストアの場所)の作成

Amazon S3に対するクラウド・ストレージ・リンク(クラウドストアの場所)作成を作成します。

Autonomous DatatabaseのDatabase Actionのデータ・ロードにアクセスします。

スクリーンショット 2024-07-24 15.01.32.png

「接続」をクリックします。
スクリーンショット 2024-07-24 15.02.12.png

「作成」をクリックし、「新規クラウド・ストアの場所」を選択します。
スクリーンショット 2024-07-24 15.04.19.png

ここでは、クラウド・ストアの名前を「S3_empdata」とし、資格証明としてあらかじめ作成したARNベースのクレデンシャル「AWS_S3_CRED」を指定しました。

ARNベースのクレデンシャルの作成については、こちらの記事を参照ください。

また、バケットURIとして、1.で作成したフォルダのURIを指定しました。
入力が完了したら、「次」をクリックします。
スクリーンショット 2024-07-24 15.07.31.png

使用可能なオブジェクトとして、先ほどアップロードしたempdata1.txtが確認できたら、「作成」をクリックします。
スクリーンショット 2024-07-24 15.08.21.png

クラウド・ストアの場所「S3_empdata」が作成できました。
スクリーンショット 2024-07-24 15.08.46.png

3. ライブ表フィードの作成

Database Actionsのデータ・ロードからライブ表フィードを作成します。
「データ・ロード」をクリックします。
スクリーンショット 2024-07-24 15.10.13.png

「データのフィード」をクリックします。
スクリーンショット 2024-07-24 15.11.10.png

「ライブフィード表の作成」をクリックします。
スクリーンショット 2024-07-24 15.12.21.png

クラウド・ストアの場所として、2.で作成した「S3_empdata」を選択し、「次」をクリックします。
スクリーンショット 2024-07-24 15.13.35.png

表の設定画面が表示されます。
スクリーンショット 2024-07-24 15.14.51.png

今回はターゲット表名を「EMPDATA」に変更し、empdata1.txtのデータに合わせて、プロパティ・セクションの「列ヘッダー行」のチェックをオフにしました。
スクリーンショット 2024-07-24 15.17.42.png

マッピング・セクションでは、ターゲット列名をそれぞれempno、empnameに変更しました。
変更が完了したら、「次」をクリックします。
スクリーンショット 2024-07-24 15.17.49.png

プレビューが表示されるので、内容に問題がなければ「次」をクリックします。
スクリーンショット 2024-07-24 15.18.18.png

ライブ・フィードの設定画面が表示されます。
スクリーンショット 2024-07-24 15.21.43.png

「通知に対して有効」のチェックをオンにし、「スケジュール済」のチェックをオフにします。
スクリーンショット 2024-07-24 15.22.07.png

データをロードする際に使用するコンシューマ・グループを指定し、「作成」をクリックします。
スクリーンショット 2024-07-24 15.22.57.png

「今すぐライブ表フィードを実行」というダイアログが表示されるので、「はい」をクリックします。
スクリーンショット 2024-07-24 15.23.33.png

少し待つと、S3_EMPDATA_FEEDにデータがロードされた旨が表示されます。
この時点で、S3バケット内にあるempdata1.txtがロードされます。
スクリーンショット 2024-07-24 15.23.59.png

S3_EMPDATA_FEEDの右上にある3つの点の部分をクリックし、「通知URLの表示」をクリックします。
スクリーンショット 2024-07-24 15.26.11.png

S3_EMPDATA_FEEDの通知URLが表示されるので、この後の手順のために通知URLをコピーしてメモしておきます。
スクリーンショット 2024-07-24 15.26.58.png

4. Amazon SNSのトピックの作成

AWSコンソールからAmazon SNS(Simple Notification Service)にアクセスし、「トピックの作成」をクリックします。
スクリーンショット 2024-07-24 15.57.47.png
タイプは「スタンダード」を選択し、任意の名前を指定します。
今回は「s3_empdata_feed」としました。
スクリーンショット 2024-07-24 16.01.07.png

暗号化オプションが「オフ」になっていることを確認します。
スクリーンショット 2024-07-24 16.01.59.png

必要に応じてアクセスポリシーを指定します。
スクリーンショット 2024-07-24 16.04.16.png

今回はこちらのようなポリシーを設定しました。

{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__default_statement_ID",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "SNS:Publish",
        "SNS:RemovePermission",
        "SNS:SetTopicAttributes",
        "SNS:DeleteTopic",
        "SNS:ListSubscriptionsByTopic",
        "SNS:GetTopicAttributes",
        "SNS:AddPermission",
        "SNS:Subscribe"
      ],
      "Resource": "arn:aws:sns:ap-northeast-1:<アカウントID>:s3_empdata_feed",
      "Condition": {
        "StringEquals": {
          "AWS:SourceOwner": "<アカウントID>"
        }
      }
    },
    {
      "Sid": "s3_policy",
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": "SNS:Publish",
      "Resource": "arn:aws:sns:ap-northeast-1:<アカウントID>:s3_empdata_feed",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "<アカウントID>"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:s3:::my-bucket-for-livefeed"
        }
      }
    }
  ]
}

「トピックの作成」をクリックして、トピックを作成します。
スクリーンショット 2024-07-24 18.28.03.png

トピック「s3_empdata_feed」が作成できました。
スクリーンショット 2024-07-24 17.09.12.png

5. S3バケットのイベント通知の有効化

S3バケットのフォルダに新しいファイルがアップロードされた時に通知を行うように、イベント通知を有効化します。

バケットの「プロパティ」タブに移動します。
スクリーンショット 2024-07-24 17.11.31.png

「イベント通知を作成」をクリックします。
スクリーンショット 2024-07-24 17.11.48.png

任意のイベント名を入力します。ここでは「NewObjectCreated」としました。
プレフィックスとして、フォルダ名を入力します。
スクリーンショット 2024-07-24 17.13.11.png

イベントタイプのセクションでは「全てのオブジェクト作成イベント」のチェックをオンにします。
スクリーンショット 2024-07-24 17.13.56.png

送信先のセクションでは、送信先として「SNSトピック」を選択し、送信先トピックとして先ほど作成した「s3_empdata_feed」を選択します。
入力が完了したら、「変更の保存」をクリックします。
スクリーンショット 2024-07-24 17.13.42.png

イベント通知「NewObjectCreated」が作成されました。
スクリーンショット 2024-07-24 17.20.25.png

6. Amazon SNSのサブスクリプションの作成

先ほど作成したAmazon SNSのトピック「s3_empdata_feed」の詳細画面に移動し、「サブスクリプションの作成」をクリックします。
スクリーンショット 2024-07-24 17.22.29.png

トピックARNはデフォルトのままにし、プロトコルに「HTTPS」を選択します。
エンドポイントには、3.で確認したライブ表フィードS3_EMPDATA_FEEDの通知URLを入力します。
スクリーンショット 2024-07-24 17.24.11.png

他の項目はそのままでOKですが必要に応じて変更してください。
入力が完了したら、「サブスクリプションの作成」をクリックします。
スクリーンショット 2024-07-24 17.25.08.png

トピックs3_empdata_feedのサブスクリプションが作成できました。
スクリーンショット 2024-07-24 17.25.22.png

7. 通知が受信できるかの確認

ライブ表フィードS3_EMPDATA_FEEDの右上にある3つの点の部分をクリックし、「確認URLを表示」をクリックします。
スクリーンショット 2024-07-24 17.25.51.png

「S3_EMPDATA_FEEDの確認URL」のダイアログが表示されるので、表示されたリンクをクリックします。
スクリーンショット 2024-07-24 17.26.46.png

ブラウザで確認URLがオープンされ、以下のような内容が表示されます
スクリーンショット 2024-07-24 17.27.04.png

サブスクリプションのステータスを確認すると、「確認済み」になりました。
スクリーンショット 2024-07-24 17.27.36.png

確認URLのダイアログの「クラウド・ストア確認プロセスが完了している場合のみチェックします。」のチェックボックスをオンにして、「OK」をクリックします。
スクリーンショット 2024-07-24 17.28.28.png

以上で、ライブ表フィードの設定が完了しました。
スクリーンショット 2024-07-24 17.28.44.png

ここまでの設定をすることで、S3バケットmy-bucket-forlivefeed内のempdataというフォルダに新規にファイルがアップロードされるたびに、アップロードされたファイルの内容が表empdataに自動的にロードされるようになりました。

8. 動作確認

設定が完了したので、S3バケットmy-bucket-forlivefeed内のempdataというフォルダにファイルをアップロードして、自動的にデータがロードされるかを確認してみます。

S3バケットmy-bucket-forlivefeed内のempdataフォルダには、先ほど使用したempdata1.txtのみが格納されています。
スクリーンショット 2024-07-24 17.29.32.png

S3バケットmy-bucket-forlivefeed内のempdataフォルダに以下の内容のempdata2.txtをアップロードします。

empdata2.txt
4,JACKSON
5,BROWN
6,TURNER

スクリーンショット 2024-07-24 17.29.57.png

S3バケットmy-bucket-forlivefeed内のempdataフォルダにempdata2.txtがアップロードできました。
タイムスタンプは2024/7/24 05:30:03PM JST(2024/7/24 08:30.14 UTC)となっています。
スクリーンショット 2024-07-24 17.30.14.png

ライブ表フィードの実行の詳細を確認してみます。
スクリーンショット 2024-07-24 17.30.42.png

empdata2.txtの内容が表empdataにロードされていることがわかります。
スクリーンショット 2024-07-24 17.31.36.png

S3バケットmy-bucket-forlivefeed内のempdataフォルダにempdata2.txtをアップロードした時間と表empdataにデータがロードされた時間を比較してみます。

S3にファイルをアップロードしたタイムスタンプは2024/7/24 05:30:03PM JST(2024/7/24 08:30.04 UTC)となっています。
スクリーンショット 2024-07-24 17.32.34.png

表にempdata2.txtのデータがロードされたタイムスタンプは2024-08-24T08:30.09.250971Z(2024/7/24 08:30.09 UTC)となっていますので、S3バケットにファイルをロードした5秒後にはロードが完了していたことになります。
スクリーンショット 2024-07-24 17.33.10.png

以上で、ライブ表フィードを使用してAmazon S3にファイルがアップロードされたら自動的に表にデータをロードできることが確認できました。

参考情報

Creating a Notification-Based Live Table Feed using Amazon Simple Storage Service (S3)

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?