1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Amazon FSx for NetApp ONTAPのデータをS3アクセスポイント経由でSnowflakeに連携してみた

1
Posted at

NetAppでSales Specialistをしている小寺です。

今日は、Amazon FSx for NetApp ONTAP(以下、FSx for ONTAP)のデータをS3アクセスポイント経由で、Snowflakeにデータ連携してみたいと思います!

(1) こちらを参考にSnowflakeのS3互換ストレージ用外部ステージ機能を使い、データのロードを行うことを試してみます。

(2) S3のストレージ統合でS3アクセスポイントも合わせて試してみます。

予想では、S3のストレージ統合はS3アクセスポイントでは利用できず、S3互換として利用できるのではないかと思っています。が、Snowflakeを触るのが初めてなので、アカウントを作るところからやっていきましょう。

事前準備

(1) FSx for ONTAPでS3アクセスポイントを作成しておきます。
{77EF8E3B-3467-4629-AD4E-5E8AAD8D9F9E}.png

(2) Snowflakeのアカウントを作ります。
無料トライアルで400ドル相当の使用分が無料で含まれていて、30日間利用できるみたいです。

サインアップ後に400ドルのクレジットが提供されているのを確認できました。
{9430533F-5D1F-4C5E-A4B6-7489A3FE6A0D}.png

SnowflakeからS3互換としてS3アクセスポイントへ接続を試してみる

事前準備

(1) Amazon S3互換のエンドポイントは、すべてのアカウントで自動的に有効になるわけではないとのことで、Snowflakeのサポートケースを起票してみました。

(2) ケース起票をすると、「Summary」として問い合わせ内容がいい感じアップデートされて表示されています。
image.png

(3) サポートから回答があり、現在はAmazon S3のマルチリージョンアクセスポイントをサポートしていません、とのことでした。

Unfortunately, Snowflake does not currently support Multi-region Access Points for Amazon S3. As outlined in our documentation, Snowflake's S3-compatible storage feature is designed for traditional S3-compatible endpoints, not for AWS-specific features like Multi-region Access Points.
For S3-compatible storage integration with Snowflake, the endpoint must meet specific requirements as detailed in Working with Amazon S3-compatible storage:

  • The endpoint must be highly compliant with the S3 API and pass our public test suite
  • It should not contain AWS-specific features like Multi-region Access Points
  • The endpoint format should be a standard domain (e.g., my-s3-endpoint.company.com)

エンドポイントのフォーマットは確かに標準ドメインではないです・・。
ただ、FSx for ONTAPのS3アクセスポイントは、FSxファイルシステムに対してS3互換のAPIアクセスを提供する機能でして、FSxのボリュームをオブジェクトストレージとして扱えるようにするための仕組みで、特定のリージョンにあるFSxファイルシステムへ紐づいているんですよね。

何かアップデートがあれば、別途試してみようと思います。

Snowflakeからストレージ統合機能でS3バケットへ接続してみる

事前準備

(1) S3に対して、Snowflakeのアクセスを明示的に許可するため、SnowflakeアカウントのAmazon Virtual Private Cloud(Amazon VPC) IDs を許可します。

VPC IDの許可には、S3バケットがSnowflakeアカウントと同じ AWS リージョンに存在する必要があります。

まずはVPC IDを取得するために、以下のSQLを実行します。

USE ROLE ACCOUNTADMIN;
SELECT SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO();

image.png

VPCのIDが取得できました。

(2) こちらを参考に、
特定のVPCポリシーを記載します。

Snowflakeからストレージ統合を試してみる

Snowflakeのストレージ統合を使用して、Snowflakeが外部(つまり、S3)ステージで参照されるAmazon S3バケットに対してデータを読み書きを試してみます。

S3バケット以外にFSx for ONTAPのS3アクセスポイントへの統合も可能なのか確認します。

{B3A4B68D-AD8A-4629-A0DF-18E987EED1A2}.png

(1) IAMロールを作成します。
アタッチしたポリシーです。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:ap-northeast-1:AWSアカウントID:accesspoint/my-s3-access-points",
                "arn:aws:s3:ap-northeast-1:AWSアカウントID:accesspoint/my-s3-access-points/object/*"
            ]
        }
    ]
}

(2)合わせてS3アクセスポイントのバケットポリシーも設定します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowListViaAccessPoint",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::AWSアカウントID:IAMユーザ"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:ap-northeast-1:AWSアカウントID:accesspoint/my-s3-access-points"
        },
        {
            "Sid": "AllowObjectRWViaAccessPoint",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::AWSアカウントID:IAMユーザ"
            },
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion"
            ],
            "Resource": "arn:aws:s3:ap-northeast-1::accesspoint/my-s3-access-points/object/*"
        }
    ]
}

(3) Snowflakeでクラウドストレージ統合を作成します。
ストレージ統合はCREATE STORAGE INTEGRATIONコマンドをSnowflakeから実行します。
S3バケットとS3アクセスポイントを両方指定してみました。


CREATE OR REPLACE STORAGE INTEGRATION s3_int2
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'S3'
  ENABLED = TRUE
  STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::AWSアカウントID:role/mysnowflakerole'
  STORAGE_ALLOWED_LOCATIONS = (
    's3://snowflake-test-202512/',
    's3://my-s3-access-poi-k9iadx5dozhk1qpho9zqdwb4h48nsapn1b-ext-s3alias/'
  );


Integration S3_INT successfully created.メッセージが表示され、作成完了しました。

(4) DESC INTEGRATION s3_int2; コマンドで確認します。

image.png

(5) CREATE STAGE コマンドを使用して外部ステージ(S3ステージ)を作成します。ここでは、「my_s3_stage」という名前で作成しました。

{C87832B6-2178-4FB6-9D3C-D8207442DF92}.png

(6) FSx for ONTAPのvol1を/fsxにマウントした上で、test.txtを保管します。

$ pwd
/fsx
$ sudo touch test.txt
$ sudo vi test.txt

(7) (5)で作成したS3ステージをSnowflake画面から確認します。
{B07B1C00-4103-461E-833A-B2B215ABAA3A}.png

ストレージ統合を参照する、外部(S3)ステージがFSx for ONTAPのS3アクセスポイントに対して作成できていることが確認できました。

外部ステージ経由でSnowflakeにデータをロードすることもできるようです。

まとめ

FSx for ONTAPのS3アクセスポイント経由でSnowflakeにデータ連携する方法について、試してみました。
S3互換ストレージには、S3アクセスポイントは対応しておらず、S3の外部ステージ経由でS3アクセスポイントに接続ができることを確認できました。

せっかくクレジットも残っているので、Snowflake試してみたいと思います!

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?