O blog da AWS

Crie cópias de backup dos recursos do Data Lake dos provedores de telecomunicações

Por Lesly Reyes, Telco Solutions Architect e
Maddyzeth Ariza, Data Architect

Os data lakes oferecem a capacidade de carregar e consultar dados de forma natural. Atualmente, eles permitem que as organizações acelerem sua estratégia de dados. O principal desafio para gerenciar o data lake se deve ao armazenamento de dados brutos ou não supervisionados do conteúdo. Para que os dados do lago sejam utilizáveis, são necessários mecanismos definidos para catalogar e proteger esses dados. Para esse fim, existe o catálogo de dados do AWS Glue.

Os metadados são uma parte importante da governança e do gerenciamento de dados em uma organização. O catálogo de dados do AWS Glue fornece um repositório uniforme para armazenar e compartilhar metadados. Para um determinado conjunto de dados, o catálogo de dados pode armazenar a definição da tabela e a localização física, adicionar atributos e rastrear como os dados foram alterados ao longo do tempo.

O catálogo de dados do AWS Glue é compatível com uma variedade de aplicativos de big data, como o Apache Hive Metastore. Além disso, ele se integra ao serviço de consulta interativa Amazon Athena e à plataforma de big data na nuvem Amazon EMR.  Depois que as tabelas forem adicionadas ao catálogo de dados, elas estarão disponíveis para processos ET, consultas com Amazon Athena, Amazon EMR e Amazon Redshift Spectrum, tornando uma visão comum dos dados disponíveis entre esses serviços. Quando os dados já estão catalogados, é importante manter cópias de backup dos esquemas organizacionais dos dados, para que, em caso de falhas, tanto as informações quanto o esquema no qual foram armazenadas possam ser recuperados.

Neste artigo, demonstramos como usar o AWS Glue para fazer backup dos recursos do data lake usando os metadados armazenados no catálogo de dados.

Solução

A maioria das empresas tem uma grande quantidade de informações armazenadas em sua organização, mas elas ainda não estão amplamente acessíveis para outras equipes, e é por isso que nascem os data lakes. No entanto, a maneira pela qual esses dados serão organizados dentro do lago também é importante, e é por isso que as estruturas ou serviços que formarão o data lake são definidos.

Normalmente falamos sobre o backup das informações existentes em lagos de dados, mas também é importante apoiar os recursos que as compõem, como os esquemas dos bancos de dados que armazenam as informações. Para as operadoras de telecomunicações, isso não é exceção, pois elas armazenam grandes quantidades de dados de diferentes fontes, que serão depositados em data lakes dentro de sua organização, pois possuem dados heterogêneos; na maioria dos casos, são armazenados em bancos de dados ou tabelas diferentes, com cada um deles tabela seu próprio esquema. Portanto, também é importante ter os recursos de um data lake copiados para recuperar as informações em caso de falha e também a estrutura à medida que elas são armazenadas.

Neste post, vemos como podemos usar o catálogo de dados do AWS Glue para ajudar desenvolvedores e empresas a fazer backups incrementais dos recursos de um data lake.

Arquitetura geral

Para fazer os backups, precisamos usar a interface de linha de comando (AWS CLI) para executar uma série de instruções que nos permitem obter as tabelas e os bancos de dados que compõem o data lake. O resultado das instruções gera um arquivo no formato JSON que pode ser armazenado em um bucket do serviço Amazon Simple Storage (S3). Um arquivo JSON será gerado para cada banco de dados do qual foi feito backup.

Para implantar a solução de backup para recursos de data lake, é necessário ter os seguintes recursos, o bucket onde os backups de segurança serão armazenados, as funções e permissões para executar os backups e o acesso ao projeto associado do AWS CodeBuild. Usando uma função Lambda, você verificará se o bucket está vazio. Nesse caso, um script será executado solicitando a obtenção de dados de todos os bancos de dados existentes. Em seguida, para cada banco de dados, o mesmo script percorrerá cada banco de dados procurando as tabelas em cada banco de dados. O resultado do script é um arquivo no formato JSON com a definição de cada tabela no banco de dados.  O arquivo JSON obtido será empacotado no formato GNUZIP e armazenado no bucket do Amazon S3 dentro de uma subpasta com o nome da tabela, que por sua vez será encontrada em uma pasta com o nome do banco de dados.

Requisitos

Para começar a criar cópias de backup, os seguintes requisitos devem ser atendidos.

As seções a seguir demonstrarão como criar e instalar cada componente necessário no ambiente de nuvem da AWS.

Chave de acesso programática

Uma chave de acesso concede acesso programático aos seus recursos. O acesso programático é um tipo de acesso da interface de linha de comando da AWS usada pelos desenvolvedores. Além disso, como melhor prática, use chaves temporárias (funções do IAM) em vez de chaves de acesso. Para obter mais informações, consulte Práticas recomendadas para gerenciar chaves de acesso.

Para criar a chave de acesso, você deve fazer login no console do IAM. Na barra de navegação, você deve selecionar Usuários e criar um novo usuário. Ao criar o par de chaves de acesso Glue_developer, armazene o ID da chave de acesso e a chave de acesso secreta em um local seguro.  A chave de acesso secreta só está disponível no momento em que é criada.  Se você perder sua chave de acesso secreta, deverá excluí-la e criar uma nova.

Permissões

Para realizar backups, é necessário ter uma série de funções de serviço do IAM; a primeira é AWSBackupDefaultServiceRole, que terá as políticas gerenciadas necessárias para realizar o backup. As políticas estão listadas abaixo.

  • AWSBackupServiceRolePolicyForBackup: concede ao AWS Backup a permissão para fazer backup por meio dos serviços da AWS.
  • AWSBackupServiceRolePolicyForRestores: concede ao AWS Backup a permissão para restaurar estados dos serviços da AWS. Como excluir ou criar um volume do EBS, instâncias do RDS, entre outros.
  • AWSBackupServiceRolePolicyForS3Backup: concede ao AWS Backup a permissão para fazer backup de dados armazenados em um bucket do Amazon S3.
  • AWSBackupServiceRolePolicyForS3Restores: concede ao AWS Backup a permissão para restaurar buckets do S3.

Além disso, como parte dessa solução, é necessário ter funções para realizar as diferentes etapas do backup. As funções criadas pela solução são as seguintes.

  • RolelambaBackupCatalog: a função fornece permissões para a função Lambda no Catálogo de Dados.
  • sdfl-catalog-backup-lambda-role: concede permissões à função Lamba no Serveless Datalake Framework (SDLF).
  • sdfl-backup-event-role: A função fornece ao serviço Amazon EventBridge permissões sobre o SDLF.

Recursos da função Lambda

Antes de lançar o modelo de serviço do AWS CloudFormation, é necessário ter o código e a camada da função Lambda. Para que o modelo funcione sem modificações, os arquivos devem ser armazenados da seguinte forma.

A camada da função Lambda deve ser armazenada na pasta de backup do catálogo e os códigos a seguir devem ser armazenados no endereço mostrado na imagem.

código backup_catalog.sh


DATABASE_NAME=${1}
TABLE_NAME=${2}
BACKUP_BUCKET=${3}

echo "Getting table definition..."
cd /tmp/

/opt/aws glue get-table --name ${TABLE_NAME} --database-name ${DATABASE_NAME} > "${TABLE_NAME}.json"
zipfile="${TABLE_NAME}.gz"

echo "Compressing table and uploading to S3 bucket: ${BACKUP_BUCKET}/${DATABASE_NAME}"

tar -zcvf "${zipfile}" "${TABLE_NAME}.json"
/opt/aws s3 cp "${zipfile}" "s3://${BACKUP_BUCKET}/${DATABASE_NAME}/${TABLE_NAME}/${TABLE_NAME}.gz" --region $AWS_DEFAULT_REGION

rm "$zipfile"
rm -rf "$TABLE_NAME.json"
Backup_catalog
import os
import logging
import boto3
import subprocess

region = os.getenv('REGION')
bucket = os.getenv('BUCKET')

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    database_event = 'Glue Data Catalog Database State Change'
    table_event = 'Glue Data Catalog Table State Change'

    try:
        logger.info('Getting bucket Catalog Backup')
        logger.info(f"Event: {event}")
        detail_event = event['detail-type']
        database_name = event['detail']['databaseName']
        if detail_event == database_event:
            logger.info(f'Type of event: {database_event}')
            tables = event['detail']['changedTables']
            for table in tables:
                logger.info(f'Processing for table: {table}')
                subprocess.call(['./backup_catalog.sh', database_name, table, bucket], stderr=subprocess.STDOUT)
        elif detail_event == table_event:
            change = event['detail']['typeOfChange']
            logger.info(f'Type of event: {table_event} with change {change}')
            table = event['detail']['tableName']
            logger.info(f'Processing for table: {table}')
            subprocess.call(['./backup_catalog.sh', database_name, table, bucket], stderr=subprocess.STDOUT)
        else:
            logger.error('Event not identified!')

    except Exception as e:
        logger.error(e)
Lambda_function

Finalmente, no link a seguir, você pode baixar o código da camada da função lambda.

Solução detalhada

A solução implantará recursos como funções do IAM, uma função Lambda para backup e regras para o Amazon EventBridge Service.  Recursos da AWS, como os buckets do Amazon S3 e a função Lambda, serão criados automaticamente usando o modelo de serviço do CloudFormation.  As permissões necessárias foram listadas na seção anterior. Os recursos e regras que serão lançados na conta são os seguintes:

  • bucket de catálogo de backup: Esse é o bucket do Amazon S3 que armazenará os backups. O nome deve ser exclusivo, ele é gerado automaticamente usando a região e o ID da conta.
  • Catálogo de backup do Lambda: É a função Lambda que executará os backups verificando o status dos bancos de dados.
  • Camada de catálogo de backup Lambda: É a camada de biblioteca que a função Lambda exige.
  • layers-lambda-backup-catalog-bucket: É o bucket onde o código da função Lambda e a camada de bibliotecas necessárias serão armazenados.
  • cf-template-catalog-backup-bucket: Esse é o bucket em que o modelo do CloudFormation será armazenado.
  • Regra de eventos do catálogo do CloudWatch Glue: Essa é a regra que monitorará as alterações no catálogo do AWS Glue.
  • Banco de dados e regra de evento do CloudWatchGlue É a regra que monitorará as alterações no banco de dados.

O código do modelo para criar os recursos necessários está incluído abaixo. Antes de lançá-lo, é necessário substituir o AccountID pelo ID da conta que será usada. O nome que o modelo deve ter é template-backup.yaml.

Versão do formato de modelo da AWS: 2010-09-09
Transformar: AWS: :Sem servidor - 31/10/2016
Descrição: “Modelo de plano de backup para fazer backup de todos os recursos”

Parâmetros:
  Peças FactBucket:
    Tipo: Corda
  Nome do aplicativo:
    Tipo: Corda
    Padrão: backup

No geral:
  Função:
    Tempo de execução: python 3.7
    Manipulador: lambda_function.lambda_handler

Recursos:

  Função do evento do CloudWatch:
    Tipo: 'AWS: :IAM: :Role'
    Propriedades:
      Nome da função:! Subfunção do evento $ {pApplicationName}
      Vou assumir o Documento de Política:
        Versão: 2012-10-17
        Declaração:
          - Efeito: Permitir
            Principal:
              Serviço:
                - events.amazonaws.com
            Ação: “STS: AssumeRole”
      Caminho:/
      Políticas:
        - Nome da política:! Sub $ {pApplicationName} -execução
          Documento de política:
            Versão: 2012-10-17
            Declaração:
              - Efeito: Permitir
                Ação:
                  - 'lambda: invokeFunction'
                  - 'lambda: GetFunction'
                Recurso:! Obtenha um catálogo de backup do Lambda. ARN

  Regra de eventos do catálogo do CloudWatch Glue:
    Tipo: 'AWS: :Events: :Rule'
    Propriedades:
      Nome:! Sub $ {pApplicationName} -data-catalog-rule
      Padrão de evento:
        fonte:
          - aws.glue
        tipo de detalhe:
          - Alteração do estado da tabela do catálogo de dados do G
        detalhe:
          Tipo de alteração:
            - qualquer coisa, mas:
                - Criação de partição em lote
                - Excluir partição em lote
                - Partição de atualização em lote
      Alvos:
        - Arma:! Obtenha um catálogo de backup do Lambda. ARN
          ID: Backup-Catalog-Table-Eventbased
      Estado: HABILITADO

  Banco de dados e regra de evento do CloudWatchGlue
    Tipo: 'AWS: :Events: :Rule'
    Propriedades:
      Nome: backup-database-catalog-rule
      Padrão de evento:
        fonte:
          - aws.glue
        tipo de detalhe:
          - Alteração do estado do banco de dados do Glue
      Alvos:
        - Arma:! Obtenha um catálogo de backup do Lambda. ARN
          ID: Catálogo de backup, banco de dados, baseado em eventos
      Estado: HABILITADO

  Permissão para eventos de mesa em Vokelambda:
    Tipo: AWS: :Lambda: :Permissão
    Propriedades:
      Nome da função:! Catálogo de backup do Ref Lambda
      Ação: “Lambda: invokeFunction”
      Página principal: “events.amazonaws.com”
      Fonte: Earn:! Obtenha um catálogo do CloudWatchGlueVentrule.arn

  Permissão para Ford Bevents em Vokelambda:
    Tipo: AWS: :Lambda: :Permissão
    Propriedades:
      Nome da função:! Catálogo de backup do Ref Lambda
      Ação: “Lambda: invokeFunction”
      Página principal: “events.amazonaws.com”
      Fonte: Earn:! Obtenha um EventRule.arn do CloudWatchGlueDatabaseEventRul

  Balde de backup:
    Tipo: AWS: :S3: :Bucket
    Propriedades:
      Nome do bucket:
        ! Subbackup - $ {AWS: :Region} -$ {AWS: :accountId} -glue-catalog
      Configuração de controle de versão:
        Status: Habilitado
      Criptografia de bucket:
        Configuração de criptografia do lado do servidor:
          - Criptografia do lado do servidor por padrão:
              Algoritmo SSE: AES 256
      Configuração do bloco de acesso público:
        Block publica CLS: É verdade
        Política pública de bloqueio: É verdade
        Ignorar Publish CLS: É verdade
        Restrinja compartimentos públicos: É verdade

  Política de bucket:
    Tipo: Política da AWS: :S3: :Bucket
    Propriedades:
      Balde:! Balde de backup Ref
      Documento de política:
        Versão: 2012-10-17
        Declaração:
          - Disse: Permitir somente solicitações de SSL
            Ação: s3: *
            Efeito: Negar
            Recurso:
              -! Subnome: aws:s3: ::$ {backupBucket} /*
              -! Subnome: aws:s3: ::$ {backupBucket}
            Condição:
              Livro:
                AWS: Transporte seguro: Falso
            Principal: “*”

  Administrador do Lake Formation:
    Tipo: Configurações do AWS:: LakeFormation:: Datalake
    Propriedades:
      Administradores:
        - Identificador principal do DataLake:! Obtenha um catálogo de backup do Rolelambda. ARN

  Catálogo de backup do Lambda:
    Tipo: Função AWS: :Serverless::
    Propriedades:
      Códigos URI:.. /lambda/catalog-backup/src
      Nome da função:! Subcatálogo - $ {pApplicationName} -lambda
      Camadas:
        - {Ref.: Camada de catálogo de backup Lambda}
      Meio ambiente:
        Variáveis:
          REGIÃO:! Sub $ {AWS: :Region}
          BALDE:! Balde de backup Ref
      Descrição: Aciona o backup do catálogo
      Tamanho da memória: 256
      Tempo limite: 300
      Função:! Obtenha um catálogo de backup do Rolelambda. ARN
  Grupo de log do RLambdAdDB Streams:
    Tipo: AWS: :LogGroup: :LogGroup
    Propriedades:
      Nome do grupo de log:! Sub/aws/lambda/ $ {lambdaBackupCatalog}
      Retenção em dias: 365

  Camada de catálogo de backup Lambda:
    Tipo: Versão da camada AWS: :Lambda::
    Propriedades:
      Tempos de execução compatíveis:
        - Python 3.7
      Conteúdo:
        Balde S3:! Sub-"$ {partifactBucket}”
        Chave S3: “catalog-backup/awscli-lambda-layer.zip”
      Descrição: “Camada CLI para backup de catálogos”
      Nome da camada: “catalog-backup-libs”

  Catálogo de backup da Rolelambda:
    Tipo: Função da AWS: :IAM::
    Propriedades:
      Nome da função:! Subcatálogo - $ {pApplicationName} -lambda-role
      Vou assumir o Documento de Política:
        Versão: 2012-10-17
        Declaração:
          - Efeito: Permitir
            Principal:
              Serviço: lambda.amazonaws.com
            Ação: STS: Assumir papel
      Caminho:/
      Políticas:
        - Nome da política:! Subcatálogo - $ {pApplicationName} -lambda-policy
          Documento de política:
            Versão: 2012-10-17
            Declaração:
              - Efeito: Permitir
                Ação:
                  - registros: criar grupo de registros
                Recurso:! Subnome: aws:logs: $ {AWS: :Region} :$ {AWS: :accountId} :*
              - Efeito: “Permitir”
                Ação:
                  - “Cola: Get*”
                Recurso:
                  -! Sub-“ arn:aws:glue: $ {AWS: :Region} :$ {AWS: :accountId} :catalog”
                  -! Sub-“ arn:aws:glue: $ {AWS: :Region} :$ {AWS: :accountId} :database/*”
                  -! Sub-“ arn:aws:glue: $ {AWS: :Region} :$ {AWS: :accountId} :table/*”
              - Efeito: “Permitir”
                Ação:
                  - “Registros: Criar grupo de registros”
                  - “Registros: Criar LogStream”
                  - “registros: colocar eventos de registro”
                Recurso:! Subnome: aws:logs: $ {AWS: :Region} :$ {AWS: :accountId} :*
              - Efeito: “Permitir”
                Ação:
                  - “Formação do lago: lista*”
                  - “Formação do lago: descreva*”
                  - “Formação do lago: Get*”
                  - “Formação do lago: adicione tags LF ao recurso”
                  - “Formação do lago: remova as tags LF do recurso”
                  - “formação do lago: * Filtro de células de dados”
                  - “formação de lago: * etiqueta LF”
                  - “Lake Formation: obtenha acesso aos dados”
                  - “Formação do lago: iniciar o planejamento de consultas”
                  - “formação do lago: *Recurso”
                  - “formação do lago: *Permissões”
                Recurso: “*”
              - Efeito: “Permitir”
                Ação:
                  - “S3: colocar objeto”
                  - “S3: Lista*”
                Recurso:! Unir
                  - ""
                  - -! Obtenha um T T BackupBucket.arn
                    - "*"
              - Efeito: “Permitir”
                Ação:
                  - “S3: GetObject*”
                Recurso:
                  -! Sub-“ arn:aws:s3: ::$ {partifactBucket} /catalog-backup”
                  -! Sub-“ arn:aws:s3: ::$ {partifactBucket} /catalog-backup/ *”
              - Efeito: “Permitir”
                Ação:
                  - “S3: Lista de baldes”
                  - “S3: Obtenha um balde*”
                Recurso:! Sub-“ arn:aws:s3: ::$ {partifactBucket}”

  Buckets SSM de backup do S3:
    Tipo: “AWS: :SSM: :Parâmetro”
    Propriedades:
      Nome:! Sub-"/s3/BackupCatalogBucket”
      Tipo: “Corda”
      Valor:! Balde de backup Ref
      Descrição: “O bucket de backup do S3"
 
YAML

Antes de iniciar a solução, também é necessário copiar o código deploy_backup.sh que implantará o modelo e inserir os parâmetros exigidos por ele, que são os nomes dos buckets. Lembre-se de que os arquivos devem ser armazenados em subpastas, conforme mostrado na imagem a seguir.

#! /bin/bash
bflag=false
cflag=false

DIRNAME= $ (nome de usuário “$0")
STACK_NAME= 'cola e pilha de backup'

uso () {echo "
    -h — Abre esta mensagem de ajuda
    -b — Nome do bucket de artefatos
    -c — Nome do bucket do cloudformation
"; }
opções= ':n:c:b:s:h'
Enquanto getopts, a opção $options
Faça
    Caso “$option” em
        b) bflag=true; S3_BUCKET=$OPTARG;;
        c) cflag=true; CFN_S3_BUCKET=$OPTARG;
        h) uso; saída;
        \? ) echo “Opção desconhecida: -$OPTARG” >&2; exit 1;
        :) echo “Falta o argumento da opção -$OPTARG” >&2; exit 1;;
        *) echo “Opção não implementada: -$OPTARG” >&2; exit 1;
    Esac
Doe

echo “Carregando bibliotecas... ”
sincronização AWS S3. /catalog-backup/ s3://$S3_BUCKET/catalog-backup/

mkdir $dirname/output
pacote aws cloudformation —arquivo de modelo $dirname/stack/template-backup.yaml —s3-bucket $CFN_S3_BUCKET —s3-prefix backup —arquivo de modelo de saída $dirname/output/packaged-template.yaml

echo “Verificando se a pilha $STACK_NAME existe... ”
E se! aws cloudformation describe-stacks —stack-name $STACK_NAME; então
  echo -e “Stack não existe, criando... ”
  aws cloudformation create-stack\
    —nome da pilha $STACK_NAME\
    arquivo —template-body://$dirname/output/packaged-template.yaml\
    —parameters parameterKey=partifactBucket, parameterValue=$S3_bucket\
    —capacidades “CAPABILITY_NAMED_IAM” “CAPABILITY_AUTO_EXPAND”\

  echo “Aguardando a criação da pilha... ”
  aws cloudformation wait stack-create-complete\
    —nome da pilha $STACK_NAME
Senão
  echo -e “A pilha existe, tentando atualizar... ”

  Definir +e
  update_output= $ (aws cloudformation update-stack\
    —nome da pilha $STACK_NAME\
    arquivo —template-body://$dirname/output/packaged-template.yaml\
    —parameters parameterKey=partifactBucket, parameterValue=$S3_bucket\
    —capacidades “CAPABILITY_NAMED_IAM” (“CAPABILITY_AUTO_EXPAND”)
  status=$?
  Definir -e

  echo “$update_output”

  se [$status -ne 0]; então
    # Não falhe na atualização sem operação
    se [[$update_output == * “ValidationError” * && $update_output == * “Sem atualizações” *]]; então
      echo -e “\ nCriação/atualização concluída - nenhuma atualização a ser executada”;
      saída 0;
    Senão
      saia de $status
    Fi
  Fi

  echo “Aguardando a conclusão da atualização da pilha... ”
  aws cloudformation wait stack-update-complete\
    —nome da pilha $STACK_NAME
  echo “Criação/atualização concluída com sucesso! ”
Fi

echo “Obtendo o nome do bucket de backup no armazenamento de parâmetros”
BACKUP_BUCKET= $ (sed -e 's/^”//'-e' s/"$// '<<< “$ (aws ssm get-parameter —name /s3/BackupCatalogBucket —query “Parameter.Value”)”)

echo “Balde obtido $ {BACKUP_BUCKET}”

bucket_content= (`aws s3 ls s3://$BACKUP_BUCKET `)

echo “Verificando se o balde está vazio... ”

se [-z $ {bucket_content}]; então
  echo “Obtendo bancos de dados... ”

  declare -a databases =( `aws glue get-databases | jq -r '.DatabaseList [] .Name'`)

  para banco de dados em “$ {databases [@]}”
  Faça
      echo “[===== Obtendo tabelas para o banco de dados: $ {database} =====]”
      declare -a tabelas =( `aws glue get-tables —database-name $ {database} | jq -r '.tableList [] .Name'`)

      para tabela em $ {tables [@]}
      Faça
        echo “[===== Obtendo a definição da tabela $ {table} =====]”
        aws glue get-table —name $ {table} —database-name $ {database} > “$ {table} .json”
        zipfile= “$ {table} .gz”

        echo “Compactando a tabela e fazendo o upload para o bucket do S3: $ {BACKUP_BUCKET} /$ {database}”

        tar -zcvf “$ {zipfile}” “$ {table} .json”
        aws s3 pc “$ {zipfile}” "s3://${BACKUP_BUCKET}/${database}/${table}/${zipfile}”

        em $zipfile
        rm -rf “$table.json”

      Doe

  Doe
Senão
  echo “O balde já tem conteúdo”;
Fi
 
Deploy_backup

Para iniciar a solução, você deve executar o seguinte comando no console enquanto estiver na mesma pasta em que o arquivo deploy_backup.sh está localizado. 

./deploy_backup.sh -b layers-lambda-backup-catalog-bucket -c cf-template-catalog-backup-bucket
Deploy_backup

A imagem a seguir mostra os recursos, permissões e regras que serão criados pela pilha do CloudFormation.

A imagem a seguir mostra sequencialmente o que o código no arquivo deploy_backup.sh fará. Primeiro, você criará os eventos no serviço Amazon EventBridge para monitorar as alterações no catálogo de dados, por exemplo, se uma coluna foi adicionada ou excluída em um banco de dados. Em segundo lugar, ele lançará o modelo AWS CloudFormation. Lembre-se de que este serviço implanta infraestrutura em nuvem com o código .yaml, o modelo receberá como parâmetros os nomes dos buckets do Amazon S3 que ele usará para armazenar a camada do Lambda A função e o modelo também criará o bucket onde armazenará os arquivos de backup e também criará a função Lambda com todos os seus respectivos códigos para realizar os backups incrementais. O terceiro executará o primeiro backup.

Veja a seguir como a função Lambda criada e os eventos associados do Amazon EventBridge devem ser exibidos no console.

Além disso, os seguintes arquivos devem estar visíveis no código da função:

  • sh: Esse código percorrerá cada tabela no banco de dados e obterá o esquema no formato JSON e, em seguida, o empacotará no formato GNUZIP e o armazenará na subpasta correspondente.
  • py: Esse arquivo contém o código que executará a função Lambda, que consultará a região e o bucket do Amazon S3 onde os backups estão armazenados, também pesquisará os nomes dos bancos de dados e, para cada banco de dados, executará o script backup_catalog.sh.

Finalmente, a função lambda será executada pela primeira vez, que consultará o serviço AWS Glue em busca do esquema que os bancos de dados têm. Em seguida, o esquema que corresponde à definição de cada tabela será salvo em uma subpasta com o nome da tabela dentro da pasta com o nome do banco de dados. Aqui está um exemplo do caminho para uma cópia de backup de uma tabela.

bucket_backup_glue_catalog_name/database_name/table_name/table_name.gz


Backups incrementais

Os backups incrementais serão executados automaticamente. Sempre que forem detectadas alterações nos esquemas do banco de dados, o serviço Amazon EventBridge invocará a função Lambda que examinará cada tabela no banco de dados e salvará o esquema no bucket do banco de dados correspondente como table_name.gz. Esses backups também são versionados, pois os buckets do Amazon S3 criados pelo modelo têm essa opção habilitada.

Conclusão

Neste post, demonstramos que, com a ajuda dos serviços do AWS Glue e do Amazon Lambda, o backup dos recursos do data lake pode ser automatizado em minutos. O serviço AWS Glue é capaz de mapear bancos de dados e tabelas existentes em um data lake usando os metadados armazenados no catálogo de dados. Além disso, como os buckets do Amazon S3 são versionados, você pode ter versões diferentes das tabelas do banco de dados caso precise recuperar um esquema anterior. Se você quiser saber mais sobre governança de dados ou como organizar dados, este artigo fornecerá mais informações e você poderá continuar aprendendo consultando os

Você pode testar a implantação dessa solução na região Leste dos EUA (Norte da Virgínia). Para obter mais informações, consulte a página do AWS Glue ou o guia do usuário do AWS Glue.


Sobre as autoras

Lesly Reyes é arquiteta de soluções na Amazon Web Services para a vertical de telecomunicações com experiência em inteligência artificial e aprendizado de máquina.

 

 

 

 

 

Maddyzeth Ariza é arquiteta de dados na Amazon Web Services para a equipe da Intelligence Latam com experiência em Data Lakes e Analytics.