Habilitação de notificações de erro para tarefas usado AWS SNS

Este tópico fornece instruções para configurar o suporte de notificação de erros para tarefas que utilizam Amazon Web Services Simple Notification Service (AWS SNS).

Habilitação de notificações de erro usando Amazon AWS SNS

Para habilitar as notificações de tarefa, siga as etapas nas próximas seções.

Etapa 1: Criar um tópico do Amazon SNS

Crie um tópico SNS em sua conta AWS para lidar com todas as mensagens de erro. Registre o Amazon Resource Name (ARN) para o tópico SNS.

Nota

Apenas tópicos SNS padrão são suportados. Não crie tópicos SNS FIFO (primeiro a entrar, primeiro a sair) para uso com notificações de erro. Atualmente, as notificações de erro enviadas para tópicos FIFO falham silenciosamente.

Para reduzir a latência e evitar cobranças de saída de dados pelo envio de notificações entre regiões, recomendamos criar o tópico SNS na mesma região que sua conta Snowflake.

Para instruções, consulte o tópico Criar um tópico do Amazon SNS na documentação do SNS.

Etapa 2: Criar a política IAM

Crie uma política do AWS Identity and Access Management (IAM) que concede permissões para publicar no tópico SNS. A política define as seguintes ações:

  • sns:publish

    Publicar no tópico SNS.

  1. Faça login no Console de gerenciamento AWS.

  2. No painel inicial, escolha Identity & Access Management (IAM):

  3. Escolha Account settings no painel de navegação à esquerda.

  4. Expanda a lista Security Token Service Regions, encontre a região AWS correspondente à região onde sua conta está localizada e escolha Activate se o status for Inactive.

  5. Escolha Policies no painel de navegação à esquerda.

  6. Clique em Create Policy.

  7. Clique na guia JSON.

  8. Adicione um documento de política que defina as ações que podem ser tomadas sobre seu tópico SNS.

    Copie e cole o texto a seguir no editor de políticas:

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

    Substitua sns_topic_arn pelo ARN do tópico SNS que você criou em Etapa 1: Criar um tópico do Amazon SNS (neste tópico).

  9. Clique em Review policy.

  10. Digite o nome da política (por exemplo, snowflake_sns_topic) e uma descrição opcional. Clique em Create policy.

Etapa 3: Criar a função AWS IAM

Crie uma função AWS IAM na qual atribuir privilégios sobre o tópico SNS.

  1. Faça login no Console de gerenciamento AWS.

  2. No painel inicial, escolha Identity & Access Management (IAM):

  3. Escolha Roles no painel de navegação à esquerda.

  4. Clique no botão Create role.

  5. Selecione Another AWS account como o tipo de entidade confiável.

  6. No campo Account ID, digite temporariamente sua própria ID de conta AWS.

  7. Selecione a opção Require external ID. Esta opção permite que você conceda permissões sobre os recursos de sua conta Amazon (ou seja, SNS) a um terceiro (ou seja, Snowflake).

    Por enquanto, insira uma ID fictícia, como 0000. Mais tarde, você modificará a relação de confiança e substituirá a ID fictícia pela ID externa para o IAM do Snowflake gerado pelo usuário para sua conta. Uma condição na política de confiança para sua função IAM permite que seus usuários do Snowflake assumam a função usando o objeto de integração de notificação que você criará mais tarde.

  8. Clique no botão Next.

  9. Localize a política que você criou em Etapa 2: Criar a política IAM (neste tópico) e selecione essa política.

  10. Clique no botão Next.

  11. Digite um nome e descrição para a função e clique no botão Create role.

  12. Registre o valor Role ARN localizado na página de resumo de funções. Você especificará esse valor em uma ou mais etapas posteriores.

Etapa 4: Criar a integração de notificação

Crie uma integração de notificação usando CREATE NOTIFICATION INTEGRATION. Uma integração é um objeto Snowflake que faz referência ao tópico SNS que você criou.

Uma única integração de notificação pode oferecer suporte a múltiplas tarefas e canais.

Nota

Somente administradores de conta (usuários com a função ACCOUNTADMIN) ou uma função com o privilégio global CREATE INTEGRATION podem executar este comando SQL.

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

onde:

<nome_integração>

Nome da nova integração.

DIRECTION = OUTBOUND

Direção das mensagem em nuvem em relação ao Snowflake. Necessário somente ao configurar notificações de erro.

<arn_tópico>

ARN do tópico SNS que você registrou em Etapa 1: Criar um tópico do Amazon SNS (neste tópico).

<arn_função_iam>

A função IAM ARN que você registrou em Etapa 3: Criar a função AWS IAM (neste tópico).

Por exemplo:

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

Etapa 5: Conceder acesso do Snowflake ao tópico SNS

Recuperação do ARN do usuário IAM e da ID externa do tópico SNS

  1. Execute DESCRIBE INTEGRATION:

    DESC NOTIFICATION INTEGRATION <integration_name>;
    
    Copy

    onde:

    • integration_name é o nome da integração de notificação que você criou em Etapa 4: criar a integração de notificação (neste tópico).

    Por exemplo:

    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. Registre os seguintes valores gerados:

    SF_AWS_IAM_USER_ARN:

    ARN para o usuário IAM do Snowflake criado para sua conta. Os usuários em sua conta Snowflake assumirão a função IAM que você criou em Etapa 3: Criar a função AWS IAM apresentando a ID externa para esse usuário usando sua integração de notificação.

    SF_AWS_EXTERNAL_ID:

    ID externa para o usuário IAM do Snowflake criado para sua conta.

    Na próxima etapa, você atualizará a relação de confiança para a função IAM com esses valores.

Observe a propriedade DIRECTION, que indica a direção da mensagem em nuvem em relação ao Snowflake.

Modifique a relação de confiança na função IAM

  1. Faça login no Console de gerenciamento AWS.

  2. No painel inicial, escolha Identity & Access Management (IAM):

  3. Escolha Roles no painel de navegação à esquerda.

  4. Clique na função que você criou em Etapa 3: Criar a função AWS IAM (neste tópico).

  5. Clique na guia Trust relationships.

  6. Clique no botão Edit trust relationship.

  7. Modifique o documento da política com os valores de saída DESC NOTIFICATION INTEGRATION registrados em Recuperação do ARN do usuário IAM e da ID externa do tópico SNS (neste tópico):

    Documento de política da função 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

    onde:

    • sf_aws_iam_user_arn é o valor SF_AWS_IAM_USER_ARN que você registrou.

    • sf_aws_external_id é o valor SF_AWS_EXTERNAL_ID que você registrou.

  8. Clique no botão Update Trust Policy. As alterações são salvas.

Etapa 6: habilitar notificações de erro em tarefas

Você então ativa a notificação de erro, seja em uma tarefa autônoma ou raiz, definindo ERROR_INTEGRATION como nome da integração da notificação. Você pode definir a propriedade ao criar uma tarefa (usando CREATE TASK) ou mais tarde (usando ALTER TASK).

Para obter mais detalhes, consulte Configuração de uma tarefa para enviar notificações de erro.