AWS SNS を使用したタスクのエラー通知の有効化

このトピックでは、Amazon Web Services Simple Notification Service(AWS SNS)を使用したエラー通知サポートを構成する手順について説明します。

Amazon AWS SNS を使用したエラー通知の有効化

タスク通知を有効にするには、次のセクションのステップに従います。

ステップ1: Amazon SNS トピックの作成

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

注釈

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

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

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

ステップ2: 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ステップ1: Amazon SNS トピックを作成する (このトピック内)で作成した SNS トピックの ARN に置き換えます。

  9. Review policy をクリックします。

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

ステップ3: 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. ステップ2: IAM ポリシーを作成する (このトピック内)で作成したポリシーを検索し、このポリシーを選択します。

  10. Next ボタンをクリックします。

  11. ロールの名前と説明を入力し、 Create role ボタンをクリックします。

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

ステップ4: 通知統合を作成する

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

単一の通知統合で複数の タスクパイプ をサポートできます。

注釈

この SQL コマンドを実行できるのは、アカウント管理者(ACCOUNTADMIN ロールを持つユーザー)または CREATE INTEGRATION グローバル権限を持つロールのみです。

CREATE NOTIFICATION INTEGRATION <integration_name>
  ENABLED = true
  TYPE = QUEUE
  NOTIFICATION_PROVIDER = AWS_SNS
  DIRECTION = OUTBOUND
  AWS_SNS_TOPIC_ARN = '<topic_arn>'
  AWS_SNS_ROLE_ARN = '<iam_role_arn>'
Copy

条件:

<統合名>

新しい統合の名前。

DIRECTION = OUTBOUND

Snowflakeに関するクラウドメッセージングの方向。エラー通知を構成する場合にのみ必要です。

<トピックのARN>

ステップ1: Amazon SNS トピックで作成する (このトピック内)で記録した SNS トピックの ARN。

<IAMロールのARN>

ステップ3: AWS IAM ロールを作成する (このトピック内)で記録した IAM ロールの ARN。

例:

CREATE NOTIFICATION INTEGRATION my_notification_int
  ENABLED = true
  TYPE = QUEUE
  NOTIFICATION_PROVIDER = AWS_SNS
  DIRECTION = OUTBOUND
  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

ステップ5: SNS トピックにSnowflakeアクセスを許可する

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

  1. DESCRIBE INTEGRATION を実行します。

    DESC NOTIFICATION INTEGRATION <integration_name>;
    
    Copy

    条件:

    • integration_name は、 ステップ4: 通知統合を作成する (このトピック内)で作成した通知統合の名前です。

    例:

    DESC NOTIFICATION INTEGRATION my_notification_int;
    
    +---------------------------+-------------------+------------------------------------------------------+----------------------+
    |   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=   |                      |
    +---------------------------+-------------------+------------------------------------------------------+----------------------+
    
    Copy
  2. 生成された次の値を記録します。

    SF_AWS_IAM_USER_ARN

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

    SF_AWS_EXTERNAL_ID

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

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

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

IAM ロールの信頼関係の変更

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

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

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

  4. ステップ3: AWS IAM ロールを作成する (このトピック内)で作成したロールをクリックします。

  5. Trust relationships タブをクリックします。

  6. Edit trust relationship ボタンをクリックします。

  7. IAM ユーザーの ARN および SNS トピックの外部 ID (このトピック内)で記録した DESC NOTIFICATION INTEGRATION 出力値でポリシードキュメントを変更します。

    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 ボタンをクリックします。変更が保存されます。

ステップ6: タスクでエラー通知を有効にする

次に、通知統合の名前に ERROR_INTEGRATION を設定して、スタンドアロンまたはルートタスクでエラー通知を有効にします。プロパティは、タスクの作成時(CREATE TASK を使用)またはそれ以降(ALTER TASK を使用)に設定できます。

詳細については、 エラー通知を送信するタスクの構成 をご参照ください。