Utilizar um banco de dados Amazon Redshift como destino do AWS Database Migration Service - AWS Database Migration Service

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Utilizar um banco de dados Amazon Redshift como destino do AWS Database Migration Service

É possível migrar dados para bancos de dados Amazon Redshift utilizando o AWS Database Migration Service. O Amazon Redshift é um serviço de data warehouse totalmente gerenciado e em escala de petabytes na nuvem do . Com um banco de dados Amazon Redshift como destino, é possível migrar dados de todos os outros bancos de dados de origem compatíveis.

É possível utilizar o Amazon Redshift sem servidor como destino do AWS DMS. Para obter mais informações, consulte Utilizar o AWS DMS com o Amazon Redshift sem servidor como destino a seguir.

O cluster do Amazon Redshift deve estar na mesma conta da AWS e região da AWS que a instância de replicação.

Durante a migração de banco de dados para o Amazon Redshift, o AWS DMS primeiro move os dados para um bucket do Amazon S3. Quando os arquivos residem em um bucket do Amazon S3, o AWS DMS os transfere para as tabelas apropriadas no data warehouse do Amazon Redshift. O AWS cria o bucket do S3 na mesma região da AWS DMS que o banco de dados Amazon Redshift. A instância de replicação do AWS DMS deve estar na mesma região da AWS.

Se você utilizar a AWS CLI ou a API do DMS para migrar dados para o Amazon Redshift, configure um perfil do AWS Identity and Access Management (IAM) para permitir acesso ao S3. Para obter mais informações sobre a criação do perfil do IAM, consulte Criação de funções do IAM para usar com a AWS DMS API AWS CLI e.

O endpoint do Amazon Redshift fornece automação completa para:

  • Geração de schema e mapeamento de tipo de dados

  • Carregamento completo de tabelas de banco de dados de origem

  • Carregamento incremental de alterações feitas a tabelas de origem

  • Aplicação de alterações de schema em Data Definition Language (DDL - Linguagem de definição de dados) feitas a tabelas de origem

  • Sincronização entre processos de carregamento completo e de captura de dados de alteração (CDC).

O AWS Database Migration Service oferece suporte a operações de carregamento completo e de processamento de alterações. O AWS DMS lê os dados no banco de dados de origem e cria uma série de arquivos de valores separados por vírgula (.csv). Para operações de carga máxima, o AWS DMS cria arquivos para cada tabela. O AWS DMS copia os arquivos de cada tabela em uma pasta separada no Amazon S3. Quando os arquivos são carregados no Amazon S3, o AWS DMS envia um comando copy, e os dados nos arquivos são copiados no Amazon Redshift. Para operações de processamento de alterações, o AWS DMS copia as alterações líquidas nos arquivos .csv. O AWS DMS faz upload dos arquivos de alterações líquidas no Amazon S3 e copia os dados no Amazon Redshift.

Para obter mais detalhes sobre como trabalhar com o Amazon Redshift como destino para o AWS DMS, consulte as seguintes seções:

Pré-requisitos para a utilização de um banco de dados Amazon Redshift como destino do AWS Database Migration Service.

A lista a seguir descreve os pré-requisitos necessários para trabalhar com o Amazon Redshift como destino para a migração de dados:

  • Utilize o console de gerenciamento da AWS para iniciar um cluster do Amazon Redshift. Observe as informações básicas sobre a sua conta da AWS e o cluster do Amazon Redshift, como a senha, o nome do usuário e o nome do banco de dados. Esses valores são necessários para criar o endpoint de destino do Amazon Redshift.

  • O cluster do Amazon Redshift deve estar na mesma conta da AWS e na mesma região da AWS que a instância de replicação.

  • A instância de replicação do AWS DMS precisa de conectividade de rede com o endpoint do Amazon Redshift (nome do host e porta) que o cluster utiliza.

  • O AWS DMS utiliza um bucket do Amazon S3 para transferir dados para o banco de dados do Amazon Redshift. Para o AWS DMS criar um bucket, o console usa um perfil do IAM, dms-access-for-endpoint. Se você utilizar a AWS CLI ou a API do DMS para criar dados com o Amazon Redshift como o banco de dados de destino, é necessário criar esse perfil do IAM. Para obter mais informações sobre a criação do perfil, consulte Criação de funções do IAM para usar com a AWS DMS API AWS CLI e.

  • O AWS DMS converte BLOBs, CLOBs e NCLOBs para VARCHAR na instância do Amazon Redshift de destino. O Amazon Redshift não oferece suporte a tipos de dados VARCHAR maiores que 64 KB. Portanto, você não pode armazenar LOBs tradicionais no Amazon Redshift.

  • Defina a tarefa de metadados de destino configurando BatchApplyEnabled como true para que o AWS DMS manipule as alterações nas tabelas de destino do Amazon Redshift durante a CDC. É necessária uma chave primária na tabela de origem e de destino. Sem uma chave primária, as alterações são aplicadas instrução por instrução. E isso pode afetar negativamente o desempenho da tarefa durante a CDC, casando latência de destino e afetando a fila de confirmação do cluster.

Privilégios necessários para utilizar o Redshift como destino

Utilize o comando GRANT para definir os privilégios de acesso do usuário ou do grupo de usuários. Os privilégios incluem opções de acesso como leitura de dados em tabelas e exibições, gravação de dados e criação de tabelas. Para obter mais informações sobre como utilizar GRANT com o Amazon Redshift, consulte GRANT no Guia do desenvolvedor de banco de dados do Amazon Redshift.

Veja a seguir a sintaxe para fornecer privilégios específicos para uma tabela, banco de dados, esquema, perfil, procedimento ou privilégios em nível de linguagem em tabelas e visualizações do Amazon Redshift.

GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES } [,...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] } ON DATABASE db_name [, ...] TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] } ON SCHEMA schema_name [, ...] TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { FUNCTION function_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { PROCEDURE procedure_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL PROCEDURES IN SCHEMA schema_name [, ...] } TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT USAGE ON LANGUAGE language_name [, ...] TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

A seguir está a sintaxe para privilégios de nível de coluna em tabelas e visualizações do Amazon Redshift.

GRANT { { SELECT | UPDATE } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) } ON { [ TABLE ] table_name [, ...] } TO { username | GROUP group_name | PUBLIC } [, ...]

A seguir está a sintaxe para o privilégio ASSUMEROLE concedido a usuários e grupos com um perfil especificado.

GRANT ASSUMEROLE ON { 'iam_role' [, ...] | ALL } TO { username | GROUP group_name | PUBLIC } [, ...] FOR { ALL | COPY | UNLOAD } [, ...]

Limitações ao utilizar o Amazon Redshift como destino do AWS Database Migration Service

As seguintes limitações se aplicam ao utilizar um banco de dados Amazon Redshift como destino:

  • Não ative o versionamento para o bucket do S3 utilizado como armazenamento intermediário para o destino do Amazon Redshift. Se o versionamento do S3 for necessário, utilize políticas de ciclo de vida para excluir ativamente as versões antigas. Caso contrário, é possível encontrar falhas na conexão de teste de endpoint devido ao tempo limite de uma chamada list-object do S3. Para criar uma política de ciclo de vida para um bucket do S3, consulte Gerenciar o ciclo de vida do armazenamento. Para excluir a versão de um objeto do S3, consulte Excluir versões de objetos de um bucket com versionamento ativado.

  • O DDL a seguir não tem suporte:

    ALTER TABLE table name MODIFY COLUMN column name data type;
  • O AWS DMS não pode migrar ou replicar alterações para um esquema com um nome iniciado com sublinhado (_). Se você tiver esquemas com um nome que começa com um sublinhado, utilize transformações de mapeamento para renomear o esquema no destino.

  • O Amazon Redshift não oferece suporte a VARCHARs maiores que 64 KB. LOBs de bancos de dados tradicionais não podem ser armazenados no Amazon Redshift.

  • A aplicação de uma instrução DELETE a uma tabela com uma chave primária de várias colunas não tem suporte quando qualquer um dos nomes de coluna da chave primária usa uma palavra reservada. Acesse aqui para ver uma lista de palavras reservadas do Amazon Redshift.

  • Poderá haver problemas de desempenho se o sistema de origem executar operações UPDATE na chave primária de uma tabela de origem. Esses problemas de desempenho ocorrem ao aplicar alterações no destino. Isso ocorre porque as operações UPDATE (e DELETE) dependem do valor da chave primária para identificar a linha de destino. Se você atualizar a chave primária de uma tabela de origem, o log de tarefas conterá mensagens, como as seguintes:

    Update on table 1 changes PK to a PK that was previously updated in the same bulk update.
  • O DMS não é compatível com nomes DNS personalizados ao configurar um endpoint para um cluster do Redshift, e você precisa utilizar o nome DNS fornecido pela Amazon. Como o cluster do Amazon Redshift deve estar na mesma conta e região da AWS da instância de replicação, a validação falhará se você utilizar um endpoint de DNS personalizado.

  • O Amazon Redshift tem um tempo limite padrão de sessão ociosa de 4 horas. Quando não há nenhuma atividade na tarefa de replicação do DMS, o Redshift desconecta a sessão após 4 horas. Os erros podem resultar da incapacidade do DMS de se conectar e da possível necessidade de reinicialização. Como solução alternativa, defina um limite de SESSION TIMEOUT maior que 4 horas para o usuário de replicação do DMS. Ou consulte a descrição de ALTER USER no Guia do desenvolvedor do banco de dados Amazon Redshift.

  • Quando o AWS DMS replica os dados da tabela de origem sem uma chave primária ou exclusiva, a latência da CDC pode ser alta, resultando em um nível de desempenho inaceitável.

Configurar um banco de dados Amazon Redshift como destino do AWS Database Migration Service

O AWS Database Migration Service deve estar configurado para trabalhar com a instância do Amazon Redshift. A tabela a seguir descreve as propriedades de configuração disponíveis para o endpoint do Amazon Redshift.

Propriedade

Descrição

servidor

O nome do cluster do Amazon Redshift que você está utilizando.

porta

O número da porta do Amazon Redshift. O valor padrão é 5439.

username

Um nome de usuário do Amazon Redshift de um usuário registrado.

password

A senha do usuário nomeado na propriedade username.

banco de dados

O nome do data warehouse (serviço) do Amazon Redshift com o qual você está trabalhando.

Se quiser adicionar atributos de string de conexão adicional ao endpoint do Amazon Redshift, especifique os atributos maxFileSize e fileTransferUploadStreams. Para obter mais informações sobre esses atributos, consulte Configurações de endpoint ao utilizar o Amazon Redshift como destino do AWS DMS.

Utilizar o roteamento aprimorado da VPC com o Amazon Redshift como destino do AWS Database Migration Service

Se você utilizar o roteamento aprimorado da VPC com o destino do Amazon Redshift, todo o tráfego de COPY entre o cluster do Amazon Redshift e os repositórios de dados trafegarão pela VPC. Como o roteamento aprimorado da VPC afeta a maneira como o Amazon Redshift acessa outros recursos, os comandos COPY poderão falhar se você não configurar a VPC corretamente.

O AWS DMS pode ser afetado por esse comportamento, já que utiliza o comando COPY para mover dados no S3 para um cluster do Amazon Redshift.

Veja a seguir as etapas que o AWS DMS realiza para carregar dados em um destino do Amazon Redshift:

  1. O AWS DMS copia dados da origem para arquivos .csv no servidor de replicação.

  2. O AWS DMS utiliza o SDK da AWS para copiar arquivos .csv em um bucket do S3 na conta.

  3. O AWS DMS utiliza o comando COPY no Amazon Redshift para copiar dados dos arquivos .csv no S3 em uma tabela apropriada no Amazon Redshift.

Se o roteamento aprimorado da VPC não estiver ativado, o Amazon Redshift roteará o tráfego pela internet, incluindo o tráfego para outros serviços na rede da AWS. Se o recurso não estiver habilitado, não será necessário configurar o caminho de rede. Se o recurso estiver habilitado, você deverá criar especificamente um caminho de rede entre o cluster do VPC e os recursos de dados. Para obter mais informações sobre a configuração necessária, consulte Roteamento aprimorado da VPC na documentação do Amazon Redshift.

Criar e utilizar as chaves do AWS KMS para criptografar os dados de destino do Amazon Redshift

É possível criptografar os dados de destino enviados ao Amazon S3 antes que sejam copiados no Amazon Redshift. Para isso, é possível criar e utilizar as chaves personalizadas do AWS KMS. É possível utilizar a chave criada para criptografar os dados de destino utilizando um dos seguintes mecanismos ao criar o endpoint de destino do Amazon Redshift:

Para criptografar os dados de destino do Amazon Redshift utilizando uma chave do KMS, você precisa de um perfil do AWS Identity and Access Management (IAM) que tenha permissões para acessar os dados do Amazon Redshift. Esse perfil do IAM é acessado em uma política (uma política de chaves) anexada à chave de criptografia criada. É possível fazer isso no console do IAM criando o seguinte:

  • Um perfil do IAM com uma política gerenciada pela AWS.

  • A chave do KMS com uma política de chaves que faz referência a esse perfil.

Os procedimentos a seguir descrevem como fazer isso.

Como criar um perfil do IAM com a política gerenciada pela AWS necessária
  1. Abra o console do IAM em https://console.aws.amazon.com/iam/.

  2. No painel de navegação, escolha Funções. A página Roles (Funções) é aberta.

  3. Selecione Criar perfil. A página Create role (Criar função) é aberta.

  4. Com o Serviço da AWS escolhido como uma entidade confiável, escolha DMS como o serviço que utilizará esse perfil.

  5. Escolha Próximo: permissões. A página Attach permissions policies (Anexar políticas de permissões) é exibida.

  6. Encontre e selecione a política AmazonDMSRedshiftS3Role.

  7. Escolha Próximo: etiquetas. A página Adicionar tags é exibida. Aqui, você pode adicionar todas as tags desejadas.

  8. Escolha Next: Review (Próximo: revisar) e reveja os resultados.

  9. Se as configurações forem o que você precisa, insira um nome para o perfil (por exemplo, DMS-Redshift-endpoint-access-role), e qualquer descrição adicional e escolha Criar função. A página Roles (Funções) é aberta com uma mensagem indicando que o perfil foi criado.

Agora, você criou o perfil para acessar os recursos do Amazon Redshift para criptografia com um nome especificado, por exemplo DMS-Redshift-endpoint-access-role.

Como criar uma chave de criptografia do AWS KMS com uma política de chave que faz referência ao seu perfil do IAM
nota

Para obter mais informações sobre como AWS DMS funciona com chaves de criptografia do AWS KMS, consulte Definir uma chave de criptografia e especificar permissões do AWS KMS.

  1. Faça login no AWS Management Console e abra o console do AWS Key Management Service (AWS KMS) em https://console.aws.amazon.com/kms.

  2. Para alterar a Região da AWS, use o Region selector (Seletor de regiões) no canto superior direito da página.

  3. No painel de navegação, escolha Customer managed keys (Chaves gerenciadas pelo cliente).

  4. Escolha Create key (Criar chave). A página Configure key (Configurar chave) é aberta.

  5. Para Key type (Tipo de chave), escolha Symmetric (Simétrica).

    nota

    Ao criar essa chave, você só pode criar uma chave simétrica, pois todos os serviços da AWS, como o Amazon Redshift, funcionam somente com chaves de criptografia simétricas.

  6. Escolha Opções avançadas. Para Key material origin (Origem do material da chave), certifique-se de que o KMS está escolhido e escolha Next (Próximo). A página Add labels (Adicionar rótulos) é aberta.

  7. Em Create alias and description (Criar alias e descrição), insira um alias para a chave (por exemplo, DMS-Redshift-endpoint-encryption-key) e qualquer descrição adicional.

  8. Em Tags, adicione todas as tags desejadas para ajudar a identificar a chave e controlar seu uso e escolha Next (Próximo). A página Define key administrative permissions (Definir permissões administrativas de chaves) é aberta mostrando uma lista de usuários e funções que podem ser escolhidos.

  9. Adicione os usuários e as funções desejados para gerenciar a chave. Certifique-se de que esses usuários e funções tenham as permissões necessárias para gerenciar a chave.

  10. Em Key deletion (Exclusão de chaves), escolha se os administradores de chaves podem excluir a chave e escolha Next (Próximo). A página Define key usage permissions (Definir permissões de uso de chaves) é aberta mostrando uma lista adicional de usuários e funções que podem ser escolhidos.

  11. Para Esta conta, escolha os usuários disponíveis que deseja que executem operações criptográficas em destinos do Amazon Redshift. Escolha também o perfil criado anteriormente em Perfis para ativar o acesso à criptografia dos objetos de destino do Amazon Redshift, por exemplo, DMS-Redshift-endpoint-access-role).

  12. Se quiser adicionar outras contas não listadas para ter esse mesmo acesso, em Outras contas da AWS, escolha Adicionar outra conta da AWS e escolha Próximo. A página Review and edit key policy (Rever e editar política de chave) é aberta mostrando o JSON da política de chave que você pode revisar e editar digitando no JSON existente. Aqui, a política de chave que faz referência à função e aos usuários é mostrada (por exemplo, Admin e User1) que você escolheu na etapa anterior. Você também pode ver as diferentes ações de chaves permitidas para as várias entidades principais (usuários e perfis), conforme mostrado no exemplo a seguir.

    { "Id": "key-consolepolicy-3", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/Admin" ] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/DMS-Redshift-endpoint-access-role", "arn:aws:iam::111122223333:role/Admin", "arn:aws:iam::111122223333:role/User1" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/DMS-Redshift-endpoint-access-role", "arn:aws:iam::111122223333:role/Admin", "arn:aws:iam::111122223333:role/User1" ] }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } } ]
  13. Escolha Terminar. A página Chaves de criptografia é aberta com uma mensagem indicando que a AWS KMS key foi criada.

Agora, você criou uma nova chave do KMS com um alias especificado (por exemplo, DMS-Redshift-endpoint-encryption-key). Essa chave permite que o AWS DMS criptografe os dados de destino do Amazon Redshift.

Configurações de endpoint ao utilizar o Amazon Redshift como destino do AWS DMS

É possível utilizar as configurações de endpoint para configurar o destino do Amazon Redshift de forma semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de destino utilizando o console do AWS DMS ou o comando create-endpoint na AWS CLI, com a sintaxe --redshift-settings '{"EndpointSetting": "value", ...}' do JSON.

A tabela a seguir mostra as configurações de endpoint que é possível utilizar com o Amazon Redshift como destino.

Nome Descrição

MaxFileSize

Especifica o tamanho máximo (em KB) de um arquivo .csv utilizado para transferir dados para o Amazon Redshift.

Valor padrão: 32768 KB (32 MB)

Valores válidos: 1 a 1.048.576

Exemplo: --redshift-settings '{"MaxFileSize": 512}'

FileTransferUploadStreams

Especifica o número de threads utilizados para fazer upload de um único arquivo.

Valor padrão: 10

Valores válidos: 1 a 64

Exemplo: --redshift-settings '{"FileTransferUploadStreams": 20}'

Acceptanydate

Especifica se qualquer formato de data será aceito incluindo formatos de data inválidos, como 0000-00-00. Valor booleano.

Valor padrão: falso

Valores válidos: true | false

Exemplo: --redshift-settings '{"Acceptanydate": true}'

Dateformat

Especifica o formato de data. Esta é uma sequência de entrada e, por padrão, está vazia. O formato padrão é AAAA-MM-DD, mas é possível alterá-lo para, por exemplo, DD-MM-AAAA. Se os valores de data ou hora utilizarem outros formatos, utilize o argumento auto com o parâmetro Dateformat. O argumento auto reconhece vários formatos não compatíveis ao utilizar uma string Dateformat. A palavra-chave auto diferencia maiúsculas de minúsculas.

Valor padrão: vazio

Valores válidos: "dateformat_string" ou auto

Exemplo:--redshift-settings '{"Dateformat": "auto"}'

Timeformat

Especifica o formato de hora. Esta é uma sequência de entrada e, por padrão, está vazia. O argumento auto reconhece vários formatos que não são compatíveis com a utilização de uma string Timeformat Se os valores de data e hora utilizarem formatos diferentes um do outro, utilize o argumento auto com o parâmetro Timeformat.

Valor padrão: 10

Valores válidos: "Timeformat_string" | "auto" | "epochsecs" | "epochmillisecs"

Exemplo:--redshift-settings '{"Timeformat": "auto"}'

Emptyasnull

Especifica se o AWS DMS deve migrar campos CHAR e VARCHAR vazios como nulos. Um valor de true define os campos CHAR e VARCHAR vazios como nulos.

Valor padrão: falso

Valores válidos: true | false

Exemplo: --redshift-settings '{"Emptyasnull": true}'

TruncateColumns

Trunca dados em colunas no número apropriado de caracteres, de maneira que ele caiba na especificação da coluna. Aplica-se somente a colunas com um tipo de dados VARCHAR ou CHAR e linhas com 4 MB ou menos.

Valor padrão: falso

Valores válidos: true | false

Exemplo: --redshift-settings '{"TruncateColumns": true}'

RemoveQuotes

Remove as aspas de strings nos dados recebidos. Todos os caracteres entre aspas, inclusive delimitadores, são mantidos. Para obter mais informações sobre como remover cotas de um destino do Amazon Redshift, consulte o Guia do desenvolvedor do Amazon Redshift.

Valor padrão: falso

Valores válidos: true | false

Exemplo: --redshift-settings '{"RemoveQuotes": true}'

TrimBlanks

Remove os caracteres de espaço em branco à direita de uma string VARCHAR. Esse parâmetro se aplica somente a colunas com um tipo de dados VARCHAR.

Valor padrão: falso

Valores válidos: true | false

Exemplo: --redshift-settings '{"TrimBlanks": true}'

EncryptionMode Especifica o modo de criptografia do lado do servidor que você deseja utilizar para enviar os dados para o S3 antes que sejam copiados no Amazon Redshift. Os valores válidos são SSE_S3 (criptografia no lado do servidor do S3) ou SSE_KMS (criptografia da chave do KMS). Se você escolher SSE_KMS, defina o parâmetro ServerSideEncryptionKmsKeyId como o Nome do recurso da Amazon (ARN) para a chave do KMS a ser usada para a criptografia.
nota

Você também pode utilizar o comando modify-endpoint da CLI para alterar o valor da configuração de EncryptionMode um endpoint existente de SSE_KMS para SSE_S3. Mas não é possível alterar o valor de EncryptionMode de SSE_S3 para SSE_KMS.

Valor padrão: SSE_S3

Valores válidos: SSE_S3 ou SSE_KMS

Exemplo:--redshift-settings '{"EncryptionMode": "SSE_S3"}'

ServerSideEncryptionKmsKeyId Se você definir EncryptionMode como SSE_KMS, defina esse parâmetro como o ARN da chave do KMS. É possível encontrar esse ARN selecionando o alias da chave na lista de chaves do AWS KMS criada para a sua conta. Ao criar a chave, você deve associar políticas e perfis específicos a ela. Para obter mais informações, consulte Criar e utilizar as chaves do AWS KMS para criptografar os dados de destino do Amazon Redshift.

Exemplo: --redshift-settings '{"ServerSideEncryptionKmsKeyId":"arn:aws:kms:us-east-1:111122223333:key/11a1a1a1-aaaa-9999-abab-2bbbbbb222a2"}'

EnableParallelBatchInMemoryCSVFiles A configuração de EnableParallelBatchInMemoryCSVFiles melhora o desempenho de tarefas de carga máxima maiores com vários threads, fazendo com que o DMS grave em disco em vez de na memória. O valor padrão é false.
CompressCsvFiles Utilize esse atributo para compactar dados enviados para um destino do Amazon Redshift durante a migração. O valor padrão é true, e a compactação é ativada por padrão.

Utilizar uma chave de criptografia de dados e um bucket do Amazon S3 como armazenamento intermediário

É possível utilizar as configurações de endpoint do Amazon Redshift para configurar o seguinte:

  • A chave de criptografia de dados personalizada do AWS KMS. É possível utilizar essa chave para criptografar os dados enviados ao Amazon S3 antes que sejam copiados no Amazon Redshift.

  • Um bucket do S3 personalizado como armazenamento intermediário para dados migrados para o Amazon Redshift.

  • Mapeie um booleano como booleano de uma origem do PostgreSQL. Por padrão, um tipo BOOLEAN é migrado como varchar(1). É possível especificar MapBooleanAsBoolean para permitir que o destino do Redshift migre o tipo booleano como booleano, conforme mostrado no exemplo a seguir.

    --redshift-settings '{"MapBooleanAsBoolean": true}'

    Observe que você deve definir essa configuração nos endpoints de origem e de destino para que ela tenha efeito.

Configurações de chave do KMS para criptografia de dados

Os exemplos a seguir mostram como configurar uma chave personalizada do KMS para criptografar os dados enviados por push ao S3. Para começar, é possível fazer a seguinte chamada de create-endpoint utilizando a AWS CLI.

aws dms create-endpoint --endpoint-identifier redshift-target-endpoint --endpoint-type target --engine-name redshift --username your-username --password your-password --server-name your-server-name --port 5439 --database-name your-db-name --redshift-settings '{"EncryptionMode": "SSE_KMS", "ServerSideEncryptionKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/24c3c5a1-f34a-4519-a85b-2debbef226d1"}'

Aqui, o objeto JSON especificado pela opção --redshift-settings define dois parâmetros. Um é um parâmetro EncryptionMode com o valor SSE_KMS. O outro é um parâmetro ServerSideEncryptionKmsKeyId com o valor arn:aws:kms:us-east-1:111122223333:key/24c3c5a1-f34a-4519-a85b-2debbef226d1. Esse valor é um Nome de recurso da Amazon (ARN) para a chave personalizada do KMS.

Por padrão, a criptografia dos dados do S3 ocorre usando a criptografia do lado do servidor do S3. Para o destino do Amazon Redshift do exemplo anterior, isso também é equivalente a especificar as configurações de endpoint, como no exemplo a seguir.

aws dms create-endpoint --endpoint-identifier redshift-target-endpoint --endpoint-type target --engine-name redshift --username your-username --password your-password --server-name your-server-name --port 5439 --database-name your-db-name --redshift-settings '{"EncryptionMode": "SSE_S3"}'

Para obter mais informações sobre como trabalhar com a criptografia do lado do servidor do S3, consulte Proteger dados utilizando criptografia do lado do servidor no Guia do usuário do Amazon Simple Storage Service.

nota

Também é possível utilizar o comando modify-endpoint na CLI para alterar o valor do parâmetro EncryptionMode para um endpoint existente de SSE_KMS para SSE_S3. Mas não é possível alterar o valor de EncryptionMode de SSE_S3 para SSE_KMS.

Configurações do bucket do Amazon S3

Ao migrar dados para um endpoint de destino do Amazon Redshift, o AWS DMS utiliza um bucket padrão do Amazon S3 como armazenamento intermediário de tarefa antes de copiar os dados migrados para o Amazon Redshift. Por exemplo, os exemplos mostrados para a criação de um endpoint de destino do Amazon Redshift com uma chave de criptografia de dados do AWS KMS utilizam esse bucket padrão do S3 (consulte Configurações de chave do KMS para criptografia de dados).

É possível, em vez disso, especificar um bucket do S3 personalizado para esse armazenamento intermediário incluindo os seguintes parâmetros no valor da opção --redshift-settings no comando create-endpoint da AWS CLI:

  • BucketName: uma string que você especifica como o nome do armazenamento do bucket do S3. Se o perfil de acesso ao serviço for baseado na política AmazonDMSRedshiftS3Role, esse valor deverá ter um prefixo de dms-, por exemplo, dms-my-bucket-name.

  • BucketFolder: (opcional) uma string que é possível especificar como o nome da pasta de armazenamento no bucket do S3 especificado.

  • ServiceAccessRoleArn: o ARN de um perfil do IAM que permite acesso administrativo ao bucket do S3. Normalmente, você cria esse perfil com base na política AmazonDMSRedshiftS3Role. Para obter um exemplo, consulte o procedimento para criar um perfil do IAM com a política gerenciada pela AWS necessária em Criar e utilizar as chaves do AWS KMS para criptografar os dados de destino do Amazon Redshift.

    nota

    Se você especificar o ARN de outro perfil do IAM utilizando a opção --service-access-role-arn do comando create-endpoint, essa opção de perfil do IAM terá precedência.

O exemplo a seguir mostra como é possível utilizar esses parâmetros para especificar um bucket personalizado do Amazon S3 na seguinte chamada de create-endpoint utilizando a AWS CLI.

aws dms create-endpoint --endpoint-identifier redshift-target-endpoint --endpoint-type target --engine-name redshift --username your-username --password your-password --server-name your-server-name --port 5439 --database-name your-db-name --redshift-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "BucketName": "your-bucket-name", "BucketFolder": "your-bucket-folder-name"}'

Configurações de tarefas de vários threads para o Amazon Redshift

É possível melhorar o desempenho de tarefas de carga máxima e captura de dados de alteração (CDC) para um endpoint de destino do Amazon Redshift utilizando configurações de tarefas de vários threads. Elas permitem especificar os threads simultâneos e o número de registros a serem armazenados em um buffer.

Configurações de tarefas de vários threads para o Amazon Redshift

Para promover o desempenho da carga máxima, é possível utilizar as seguintes configurações da tarefa ParallelLoad*:

  • ParallelLoadThreads: especifica o número de threads simultâneos que o DMS utiliza durante uma carga máxima para enviar registros de dados para um endpoint de destino do Amazon Redshift. O valor padrão é zero (0) e o valor máximo é 32. Para obter mais informações, consulte Configurações de tarefa de carregamento completo.

    É possível utilizar o atributo enableParallelBatchInMemoryCSVFiles definido como false ao utilizar a configuração da tarefa ParallelLoadThreads. O atributo melhora o desempenho de tarefas de carga máxima maiores com vários threads, fazendo com que o DMS grave em disco em vez de na memória. O valor padrão é true.

  • ParallelLoadBufferSize: especifica o máximo de solicitações de registros de dados ao utilizar threads de carga paralela com o destino do Redshift. O valor padrão é 100 e o valor máximo é 1.000. É recomendável utilizar essa opção quando ParallelLoadThreads > 1 (maior que um).

nota

Compatibilidade com a utilização de configurações da tarefa ParallelLoad* durante FULL LOAD para endpoints de destino do Amazon Redshift está disponível nas versões 3.4.5 e superiores do AWS DMS.

A configuração de ReplaceInvalidChars do endpoint do Redshift não é compatível para utilização durante a captura de dados de alteração (CDC) ou durante uma tarefa de migração FULL LOAD ativada para carga paralela. Ela é compatível com a migração FULL LOAD quando a carga paralela não está ativada. Para obter mais informações, consulte RedshiftSettings na Referência da API do AWS Database Migration Service.

Configurações de tarefas de CDC de vários threads para o Amazon Redshift

Para promover o desempenho da CDC, é possível utilizar as seguintes configurações da tarefa ParallelApply*:

  • ParallelApplyThreads: especifica o número de threads simultâneos que o AWS DMS utiliza durante uma carga de CDC para enviar registros de dados para um endpoint de destino do Amazon Redshift. O valor padrão é zero (0) e o valor máximo é 32. O valor mínimo recomendado é igual ao número de fatias no cluster.

  • ParallelApplyBufferSize: especifica o máximo de solicitações de registro de dados ao utilizar threads de aplicação paralelos com o destino do Redshift. O valor padrão é 100 e o valor máximo é 1.000. É recomendável utilizar essa opção quando ParallelApplyThreads > 1 (maior que um).

    Para obter o máximo benefício do Redshift como destino, é recomendável que o valor de ParallelApplyBufferSize seja pelo menos duas vezes (o dobro ou mais) do número de ParallelApplyThreads.

nota

Compatibilidade com a utilização de configurações da tarefa ParallelApply* durante a CDC para endpoints de destino do Amazon Redshift está disponível nas versões 3.4.3 e superiores do AWS DMS.

O nível de paralelismo aplicado depende da correlação entre o tamanho do lote e o tamanho máximo do arquivo utilizado para transferir dados. Ao utilizar configurações de tarefas CDC de vários threads com um destino do Redshift, os benefícios são obtidos quando o tamanho do lote é grande em relação ao tamanho máximo do arquivo. Por exemplo, é possível utilizar a seguinte combinação de configurações de endpoint e de tarefa para ajustar o desempenho ideal.

// Redshift endpoint setting MaxFileSize=250000; // Task settings BatchApplyEnabled=true; BatchSplitSize =8000; BatchApplyTimeoutMax =1800; BatchApplyTimeoutMin =1800; ParallelApplyThreads=32; ParallelApplyBufferSize=100;

Utilizando as configurações do exemplo anterior, um cliente com uma workload transacional pesada se beneficia com seu buffer de lote, contendo 8.000 registros, sendo preenchido em 1800 segundos, utilizando 32 threads paralelos com um tamanho máximo de arquivo de 250 MB.

Para obter mais informações, consulte Configurações de ajuste de processamento de alterações.

nota

As consultas do DMS executadas durante a replicação contínua em um cluster do Redshift podem compartilhar a mesma fila do WLM (gerenciamento da workload) com outras consultas de aplicações em execução. Portanto, considere configurar adequadamente as propriedades do WLM para influenciar o desempenho durante a replicação contínua para um destino do Redshift. Por exemplo, se outras consultas ETL paralelas estiverem em execução, o DMS será executado mais lentamente e os ganhos de desempenho serão perdidos.

Tipos de dados de destino do Amazon Redshift

O endpoint do Amazon Redshift para o AWS DMS é compatível com a maioria dos tipos de dados do Amazon Redshift. A tabela a seguir mostra os tipos de dados de destino compatíveis do Amazon Redshift ao utilizar o AWS DMS e o mapeamento padrão em tipos de dados do AWS DMS.

Para obter mais informações sobre os tipos de dados do AWS DMS, consulte Tipos de dados do AWS Database Migration Service.

Tipos de dados do AWS DMS

Tipos de dados do Amazon Redshift

BOOLEAN

BOOL

BYTES

VARCHAR (tamanho)

DATA

DATA

TIME

VARCHAR(20)

DATETIME

Se a escala for => 0 e =< 6, dependendo do tipo de coluna de destino do Redshift, uma das seguintes opções:

TIMESTAMP (s)

TIMESTAMPTZ (s): se o timestamp de origem contiver um deslocamento de zona (como no SQL Server ou Oracle), ele será convertido em UTC na inserção/atualização. Se ele não contiver um deslocamento, a hora já será considerada em UTC.

Se a escala for => 7 e =< 9, use:

VARCHAR (37)

INT1

INT2

INT2

INT2

INT4

INT4

INT8

INT8

NUMERIC

Se a escala for => 0 e =< 37, use:

NUMERIC (p,s)

Se a escala for => 38 e =< 127, use:

VARCHAR (tamanho)

REAL4

FLOAT4

REAL8

FLOAT8

STRING

Se o tamanho for de 1 a 65.535, utilize VARCHAR (tamanho em bytes)

Se o tamanho for de 65.536 a 2.147.483.647, utilize VARCHAR (65535)

UINT1

INT2

UINT2

INT2

UINT4

INT4

UINT8

NUMERIC (20,0)

WSTRING

Se o tamanho for de 1 a 65.535, utilize NVARCHAR (tamanho em bytes)

Se o tamanho for de 65.536 a 2.147.483.647, utilize NVARCHAR (65535)

BLOB

VARCHAR (tamanho máximo de LOB *2)

O tamanho máximo de LOB não pode exceder 31 KB. O Amazon Redshift não oferece suporte a VARCHARs maiores que 64 KB.

NCLOB

NVARCHAR (tamanho máximo de LOB)

O tamanho máximo de LOB não pode exceder 63 KB. O Amazon Redshift não oferece suporte a VARCHARs maiores que 64 KB.

CLOB

VARCHAR (tamanho máximo de LOB)

O tamanho máximo de LOB não pode exceder 63 KB. O Amazon Redshift não oferece suporte a VARCHARs maiores que 64 KB.

Utilizar o AWS DMS com o Amazon Redshift sem servidor como destino

O AWS DMS é compatível com a utilização do Amazon Redshift sem servidor como endpoint de destino. Para obter informações sobre como utilizar o Amazon Redshift sem servidor, consulte Amazon Redshift sem servidor no Guia de gerenciamento do Amazon Redshift.

Este tópico descreve como utilizar um endpoint do Amazon Redshift sem servidor com o AWS DMS.

nota

Ao criar um endpoint do Amazon Redshift sem servidor, para o campo DatabaseName da configuração de endpoint RedshiftSettings, utilize o nome do data warehouse do Amazon Redshift ou o nome do endpoint do grupo de trabalho. Para o campo ServerName, utilize o valor de endpoint exibido na página Grupo de trabalho do cluster com tecnologia sem servidor (por exemplo, default-workgroup.093291321484.us-east-1.redshift-serverless.amazonaws.com). Para obter informações sobre como criar um endpoint, consulte Criar endpoints de origem e de destino. Para obter informações sobre o endpoint do grupo de trabalho, consulte Conexão com o Amazon Redshift sem servidor.

Política de confiança com o Amazon Redshift sem servidor como destino

Ao utilizar o Amazon Redshift sem servidor como um endpoint de destino, adicione a seguinte seção destacada à política de confiança. Essa política de confiança é anexada ao perfil dms-access-for-endpoint.

{ "PolicyVersion": { "CreateDate": "2016-05-23T16:29:57Z", "VersionId": "v3", "Document": { "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:CreateNetworkInterface", "ec2:DescribeAvailabilityZones", "ec2:DescribeInternetGateways", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DeleteNetworkInterface", "ec2:ModifyNetworkInterfaceAttribute" ], "Resource": "arn:aws:service:region:account:resourcetype/id", "Effect": "Allow" }, { "Sid": "", "Effect": "Allow", "Principal": { "Service": "redshift-serverless.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }, "IsDefaultVersion": true } }

Para obter mais informações sobre como utilizar as políticas de confiança com o AWS DMS, consulte Criação de funções do IAM para usar com a AWS DMS API AWS CLI e.

Limitações ao utilizar o Amazon Redshift sem servidor como destino

A utilização do Redshift sem servidor como destino apresenta as seguintes limitações: