Amazon SNSトピックに通知を送信する通知統合の作成

Amazon SNSトピックに通知を送信するには、そのトピック用の通知統合を作成する必要があります。これを実行するには、

  1. Amazon SNSトピックを作成する

  2. このトピックへの公開を許可するIAMポリシーを作成します

  3. このポリシーに添付するIAMロールを作成します

  4. 通知統合を作成します

  5. トピックへのSnowflakeアクセスを付与します

注釈

現在この機能は、 AWSでホストされているSnowflakeアカウントに限定されています。

Amazon SNS トピックの作成

AWSアカウントにSNSトピックを作成して、すべてのエラーメッセージを処理します。SNS トピックのAmazonリソースネーム(ARN)を記録します。

注釈

SNS の標準トピックのみをサポートしています。エラー通知で使用する SNS FIFO (先入れ先出し)トピックは作成しないでください。現在、 FIFO トピックに送信されたエラー通知は警告なしで失敗します。

リージョン 間で通知を送信する際に遅延を低減し、 データエグレス の料金を回避するには、Snowflakeアカウントと同じリージョンに SNS トピックを作成することをお勧めします。

手順については、 SNS ドキュメントの Amazon SNS トピック の作成をご参照ください。

IAM ポリシーの作成

SNS トピックに公開するための権限を付与する、 AWS Identity and Access Management(IAM)ポリシーを作成します。ポリシーは、次のアクションを定義します。

  • sns:publish:SNSトピックに公開します。

  1. AWS 管理コンソールにログインします。

  2. ホームダッシュボードから、 Identity & Access Management (IAM)を選択します。

  3. 左側のナビゲーションペインから Account settings を選択します。

  4. Security Token Service Regions リストを展開し、アカウントがある 地域 に対応する AWS 地域を見つけ、ステータスが Inactive の場合は Activate を選択します。

  5. 左側のナビゲーションペインから Policies を選択します。

  6. Create Policy を選択します。

  7. JSON タブを選択します。

  8. SNS トピックで実行できるアクションを定義するポリシードキュメントを追加します。

    次のテキストをコピーしてポリシーエディターに貼り付けます。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "sns:Publish"
          ],
          "Resource": "<sns_topic_arn>"
        }
      ]
    }
    
    Copy

    sns_topic_arn を、先に作成した SNS トピック の ARN に置き換えます。

  9. Review policy を選択します。

  10. ポリシー名(例: snowflake_sns_topic)とオプションの説明を入力して、 Create policy を選択します。

AWS IAM ロールの作成

SNS トピックに権限を割り当てる AWS IAM ロールを作成します。

  1. AWS 管理コンソールにログインします。

  2. ホームダッシュボードから、 Identity & Access Management (IAM)を選択します。

  3. 左側のナビゲーションペインから Roles を選択します。

  4. Create role を選択します。

  5. 信頼できるエンティティタイプとして Another AWS account を選択します。

  6. Account ID フィールドに、自分の AWS アカウントID を一時的に入力します。

  7. Require external ID オプションを選択します。このオプションを使用すると、Amazonアカウントリソース(つまり SNS)に対するアクセス許可をサードパーティ(つまりSnowflake)に付与できます。

    今は、 0000 などのダミー ID を入力します。後で、信頼関係を変更し、アカウント用に生成されたSnowflake IAM ユーザーのダミー ID を外部 ID に置き換えます。IAM ロールの信頼ポリシーの条件により、Snowflakeユーザーは、後で作成する通知統合オブジェクトを使用してロールを引き受けることができます。

  8. Next を選択します。

  9. 先ほど作成したポリシー を探し、このポリシーを選択します。

  10. Next を選択します。

  11. ロールの名前と説明を入力し、 Create role を選択します。

  12. ロールの概要ページにある Role ARN 値を記録します。この値は、後にある1つ以上のステップで指定します。

通知統合を作成する

CREATE NOTIFICATION INTEGRATION コマンドを実行して、通知統合を作成します。統合は、作成した SNS トピックを参照するSnowflakeオブジェクトです。

注釈

タスク または パイプ のエラーに関する通知に統合を使用する場合、1つの通知統合で複数のタスクまたはパイプをサポートできます。

コマンドを実行する際には、これらのパラメーターを以下の値に設定します。

例:

CREATE NOTIFICATION INTEGRATION my_notification_int
  ENABLED = TRUE
  DIRECTION = OUTBOUND
  TYPE = QUEUE
  NOTIFICATION_PROVIDER = AWS_SNS
  AWS_SNS_TOPIC_ARN = 'arn:aws:sns:us-east-2:111122223333:sns_topic'
  AWS_SNS_ROLE_ARN = 'arn:aws:iam::111122223333:role/error_sns_role';
Copy

SNS トピックへのSnowflakeアクセスの許可

IAMユーザーARNとSNSトピック外部IDを取得する

  1. DESCRIBE INTEGRATION コマンドを実行して、作成したばかりの通知統合のプロパティを表示します。

    例えば、 my_notification_int という名前の通知統合のプロパティを表示するには:

    DESC NOTIFICATION INTEGRATION my_notification_int;
    
    Copy
    +---------------------------+-------------------+------------------------------------------------------+----------------------+
    |   property                |   property_type   |   property_value                                     |   property_default   |
    +---------------------------+-------------------+------------------------------------------------------+----------------------+
    |   ENABLED                 |   Boolean         |   true                                               |   false              |
    |   NOTIFICATION_PROVIDER   |   String          |   AWS_SNS                                            |                      |
    |   DIRECTION               |   String          |   OUTBOUND                                           |   INBOUND            |
    |   AWS_SNS_TOPIC_ARN       |   String          |   arn:aws:sns:us-east-2:111122223333:myaccount       |                      |
    |   AWS_SNS_ROLE_ARN        |   String          |   arn:aws:iam::111122223333:role/myrole              |                      |
    |   SF_AWS_IAM_USER_ARN     |   String          |   arn:aws:iam::123456789001:user/c_myaccount         |                      |
    |   SF_AWS_EXTERNAL_ID      |   String          |   MYACCOUNT_SFCRole=2_a123456/s0aBCDEfGHIJklmNoPq=   |                      |
    +---------------------------+-------------------+------------------------------------------------------+----------------------+
    
  2. 以下のプロパティの値を記録します。

    • SF_AWS_IAM_USER_ARN

      アカウント用に作成されたSnowflake IAM ユーザーの ARN。Snowflakeアカウントのユーザーは、通知統合を使用してこのユーザーの外部 ID を送信することにより、 IAM ロールを作成する で作成したロールを引き受けます。

    • SF_AWS_EXTERNAL_ID

      使用するアカウント用に作成されたSnowflake IAM ユーザーの外部 ID。

    次のステップでは、 IAM ロールの信頼関係をこれらの値で更新します。

DIRECTION プロパティは、Snowflakeに関するクラウドメッセージングの方向を示していることに注意してください。

IAMロールの信頼関係を変更する

  1. AWS 管理コンソールにログインします。

  2. ホームダッシュボードから、 Identity & Access Management (IAM)を選択します。

  3. 左側のナビゲーションペインから Roles を選択します。

  4. 先ほどに作成したロール を選択します。

  5. Trust relationships タブを選択します。

  6. Edit trust relationship を選択します。

  7. 以前に記録した通知統合プロパティの値 を使用するようにポリシードキュメントを修正します。

    IAM ロールのポリシードキュメント

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "",
          "Effect": "Allow",
          "Principal": {
            "AWS": "<sf_aws_iam_user_arn>"
          },
          "Action": "sts:AssumeRole",
          "Condition": {
            "StringEquals": {
              "sts:ExternalId": "<sf_aws_external_id>"
            }
          }
        }
      ]
    }
    
    Copy

    条件:

    • sf_aws_iam_user_arn は、記録した SF_AWS_IAM_USER_ARN 値です。

    • sf_aws_external_id は、記録した SF_AWS_EXTERNAL_ID 値です。

  8. Update Trust Policy を選択します。変更が保存されます。