Saiba como usar a descoberta AWS Cloud Map de serviços com atributos personalizados - AWS Cloud Map

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á.

Saiba como usar a descoberta AWS Cloud Map de serviços com atributos personalizados

Este tutorial demonstra como você pode usar a descoberta AWS Cloud Map de serviços com atributos personalizados que podem ser descobertos usando a AWS Cloud Map API. Este tutorial explica como criar e executar aplicativos cliente usando AWS CloudShell o. Os aplicativos usam duas funções Lambda para gravar dados em uma tabela do DynamoDB e depois ler a tabela. As funções Lambda e a tabela do DynamoDB são registradas como instâncias de serviço. AWS Cloud Map O código nos aplicativos cliente e nas funções do Lambda usa atributos AWS Cloud Map personalizados para descobrir os recursos necessários para realizar o trabalho.

Importante

Você criará AWS recursos durante o workshop, o que acarretará um custo em sua AWS conta. É recomendável limpar os recursos assim que terminar o workshop para minimizar o custo.

Pré-requisitos

Antes de começar, conclua as etapas em Configurado para usar AWS Cloud Map.

Etapa 1: criar um AWS Cloud Map namespace

Nesta etapa, você cria um AWS Cloud Map namespace. Um namespace é uma construção usada para agrupar serviços para um aplicativo. Ao criar o namespace, você especifica como os recursos serão descobertos. Neste tutorial, os recursos criados nesse namespace poderão ser descobertos com chamadas de AWS Cloud Map API usando atributos personalizados. Você aprenderá mais sobre isso em uma etapa posterior.

  1. Faça login no AWS Management Console e abra o AWS Cloud Map console em https://console.aws.amazon.com/cloudmap/.

  2. Escolha Create namespace (Criar namespace).

  3. Para Nome do namespace, especifique. cloudmap-tutorial

  4. (Opcional) Para a descrição do namespace, especifique uma descrição para o que você pretende usar o namespace.

  5. Em Descoberta de instâncias, selecione Chamadas de API.

  6. Deixe o resto dos valores padrão e escolha Criar namespace.

Etapa 2: criar uma tabela do DynamoDB

Nesta etapa, você cria uma tabela do DynamoDB que é usada para armazenar e recuperar dados para o aplicativo de amostra criado posteriormente neste tutorial.

Para obter informações sobre como criar um DynamoDB, consulte Etapa 1: Criar uma tabela no DynamoDB no DynamoDB Developer Guide e use a tabela a seguir para determinar quais opções especificar.

Opção Valor

Nome da tabela

mapa da nuvem
Chave de partição

id

Mantenha os valores padrão para o restante das configurações e crie a tabela.

Etapa 3: criar um serviço de AWS Cloud Map dados e registrar a tabela do DynamoDB como uma instância

Nessa etapa, você cria um AWS Cloud Map serviço e depois registra a tabela do DynamoDB criada na última etapa como uma instância de serviço.

  1. Abra o AWS Cloud Map console em https://console.aws.amazon.com/cloudmap/

  2. Na lista de namespaces, selecione o cloudmap-tutorial namespace e escolha Exibir detalhes.

  3. Na seção Serviços, escolha Criar serviço e faça o seguinte.

    1. Em Nome do serviço, digite data-service.

    2. Deixe o resto dos valores padrão e escolha Criar serviço.

  4. Na seção Serviços, selecione o data-service serviço e escolha Exibir detalhes.

  5. Na seção Instâncias de serviço, escolha Registrar instância de serviço.

  6. Na página Registrar instância do serviço, faça o seguinte.

    1. Em Tipo de instância, selecione Informações de identificação para outro recurso.

    2. Para ID da instância de serviço, especifiquedata-instance.

    3. Na seção Atributos personalizados, especifique o seguinte par de valores-chave: chave =tablename, valor =. cloudmap

Etapa 4: criar uma função AWS Lambda de execução

Nesta etapa, você cria uma função do IAM que a AWS Lambda função que criamos na próxima etapa usa. Você pode nomear a função cloudmap-tutorial-role e omitir o limite de permissões, pois essa função do IAM é usada somente neste tutorial e você pode excluí-la posteriormente.

Para criar a função de serviço para o Lambda (console do IAM)
  1. Faça login no AWS Management Console e abra o console do IAM em https://console.aws.amazon.com/iam/.

  2. No painel de navegação do console do IAM, escolha Perfis e, em seguida, Criar perfil.

  3. Em Tipo de Entidade Confiável, escolha AWS service (Serviço da AWS).

  4. Para Serviço ou caso de uso, escolha Lambda e, em seguida, escolha o caso de uso do Lambda.

  5. Escolha Próximo.

  6. Pesquise e selecione a caixa ao lado da PowerUserAccess política e escolha Avançar.

  7. Escolha Próximo.

  8. Em Nome da função, especifiquecloudmap-tutorial-role.

  9. Reveja a função e escolha Criar função.

Etapa 5: criar a função Lambda para gravar dados

Nesta etapa, você cria uma função Lambda criada do zero que grava dados na tabela do DynamoDB usando a API para consultar o AWS Cloud Map serviço que você criou. AWS Cloud Map

Para obter informações sobre a criação de uma função Lambda, consulte Criar uma função Lambda com o console no Guia do AWS Lambda desenvolvedor e use a tabela a seguir para determinar quais opções especificar ou escolher.

Opção Valor

Nome da função

função de gravação
Runtime

Python 3.12

Arquitetura

x86_64

Permissões

Use uma função existente

Função existente

cloudmap-tutorial-role

Depois de criar a função, atualize o código de exemplo para refletir o código Python a seguir e, em seguida, implante a função. Observe que você está especificando o atributo datatable personalizado associado à instância de AWS Cloud Map serviço criada para a tabela do DynamoDB. A função gera uma chave que é um número aleatório entre 1 e 100 e a associa a um valor que é passado para a função quando ela é chamada.

import json import boto3 import random def lambda_handler(event, context): serviceclient = boto3.client('servicediscovery') response = serviceclient.discover_instances( NamespaceName='cloudmap-tutorial', ServiceName='data-service') tablename = response["Instances"][0]["Attributes"]["tablename"] dynamodbclient = boto3.resource('dynamodb') table = dynamodbclient.Table(tablename) response = table.put_item( Item={ 'id': str(random.randint(1,100)), 'todo': event }) return { 'statusCode': 200, 'body': json.dumps(response) }

Depois de implantar a função, para evitar erros de tempo limite, atualize o tempo limite da função para 5 segundos. Para obter mais informações, consulte Configurar o tempo limite da função Lambda no Guia do AWS Lambda desenvolvedor.

Etapa 6: criar um serviço de AWS Cloud Map aplicativo e registrar a função de gravação do Lambda como uma instância

Nesta etapa, você cria um AWS Cloud Map serviço e depois registra a função de gravação do Lambda como uma instância de serviço.

  1. Abra o AWS Cloud Map console em https://console.aws.amazon.com/cloudmap/

  2. No painel de navegação à esquerda, escolha Namespaces.

  3. Na lista de namespaces, selecione o cloudmap-tutorial namespace e escolha Exibir detalhes.

  4. Na seção Serviços, escolha Criar serviço e faça o seguinte.

    1. Em Nome do serviço, digite app-service.

    2. Deixe o resto dos valores padrão e escolha Criar serviço.

  5. Na seção Serviços, selecione o app-service serviço e escolha Exibir detalhes.

  6. Na seção Instâncias de serviço, escolha Registrar instância de serviço.

  7. Na página Registrar instância do serviço, faça o seguinte.

    1. Em Tipo de instância, selecione Informações de identificação para outro recurso.

    2. Para ID da instância de serviço, especifiquewrite-instance.

    3. Na seção Atributos personalizados, especifique os seguintes pares de valores-chave.

      • chave =action, valor = write

      • chave =functionname, valor = writefunction

Etapa 7: criar a função Lambda para ler dados

Nesta etapa, você cria uma função Lambda criada do zero que grava dados na tabela do DynamoDB que você criou.

Para obter informações sobre a criação de uma função Lambda, consulte Criar uma função Lambda com o console no Guia do AWS Lambda desenvolvedor e use a tabela a seguir para determinar quais opções especificar ou escolher.

Opção Valor

Nome da função

função de leitura
Runtime

Python 3.12

Arquitetura

x86_64

Permissões

Use uma função existente

Função existente

cloudmap-tutorial-role

Depois de criar a função, atualize o código de exemplo para refletir o código Python a seguir e, em seguida, implante a função. A função escaneia a tabela e retorna todos os itens.

import json import boto3 def lambda_handler(event, context): serviceclient = boto3.client('servicediscovery') response = serviceclient.discover_instances(NamespaceName='cloudmap-tutorial', ServiceName='data-service') tablename = response["Instances"][0]["Attributes"]["tablename"] dynamodbclient = boto3.resource('dynamodb') table = dynamodbclient.Table(tablename) response = table.scan(Select='ALL_ATTRIBUTES') return { 'statusCode': 200, 'body': json.dumps(response) }

Depois de implantar a função, para evitar erros de tempo limite, atualize o tempo limite da função para 5 segundos. Para obter mais informações, consulte Configurar o tempo limite da função Lambda no Guia do AWS Lambda desenvolvedor.

Etapa 8: registrar a função de leitura do Lambda como uma AWS Cloud Map instância de serviço

Nesta etapa, você registra a função de leitura do Lambda como uma instância de serviço no app-service serviço que você criou anteriormente.

  1. Abra o AWS Cloud Map console em https://console.aws.amazon.com/cloudmap/

  2. No painel de navegação à esquerda, escolha Namespaces.

  3. Na lista de namespaces, selecione o cloudmap-tutorial namespace e escolha Exibir detalhes.

  4. Na seção Serviços, selecione o app-service serviço e escolha Exibir detalhes.

  5. Na seção Instâncias de serviço, escolha Registrar instância de serviço.

  6. Na página Registrar instância do serviço, faça o seguinte.

    1. Em Tipo de instância, selecione Informações de identificação para outro recurso.

    2. Para ID da instância de serviço, especifiqueread-instance.

    3. Na seção Atributos personalizados, especifique os seguintes pares de valores-chave.

      • chave =action, valor = read

      • chave =functionname, valor = readfunction

Etapa 9: criar e executar clientes de leitura e gravação no AWS CloudShell

Você pode criar e executar aplicativos cliente AWS CloudShell que usam código para descobrir os serviços nos quais você configurou AWS Cloud Map e fazer chamadas para esses serviços.

  1. Abra o AWS CloudShell console em https://console.aws.amazon.com/cloudshell/

  2. Use o comando a seguir para criar um arquivo chamadowritefunction.py.

    vim writeclient.py
  3. No writeclient.py arquivo, entre no modo de inserção pressionando o i botão. Em seguida, copie e cole o código a seguir. Esse código descobre a função Lambda para gravar dados pesquisando o name=writeservice atributo personalizado no app-service serviço. O nome da função Lambda responsável por gravar dados na tabela do DynamoDB é retornado. Em seguida, a função Lambda é invocada, passando uma amostra de carga útil que é gravada na tabela como um valor.

    import boto3 serviceclient = boto3.client('servicediscovery') response = serviceclient.discover_instances(NamespaceName='cloudmap-tutorial', ServiceName='app-service', QueryParameters={ 'action': 'write' }) functionname = response["Instances"][0]["Attributes"]["functionname"] lambdaclient = boto3.client('lambda') resp = lambdaclient.invoke(FunctionName=functionname, Payload='"This is a test data"') print(resp["Payload"].read())
  4. Pressione a tecla escape:wq, digite e pressione a tecla enter para salvar o arquivo e sair.

  5. Use o comando a seguir para executar o código Python.

    python3 writeclient.py

    A saída deve ser uma 200 resposta, semelhante à seguinte.

    b'{"statusCode": 200, "body": "{\\"ResponseMetadata\\": {\\"RequestId\\": \\"Q0M038IT0BPBVBJK8OCKK6I6M7VV4KQNSO5AEMVJF66Q9ASUAAJG\\", \\"HTTPStatusCode\\": 200, \\"HTTPHeaders\\": {\\"server\\": \\"Server\\", \\"date\\": \\"Wed, 06 Mar 2024 22:46:09 GMT\\", \\"content-type\\": \\"application/x-amz-json-1.0\\", \\"content-length\\": \\"2\\", \\"connection\\": \\"keep-alive\\", \\"x-amzn-requestid\\": \\"Q0M038IT0BPBVBJK8OCKK6I6M7VV4KQNSO5AEMVJF66Q9ASUAAJG\\", \\"x-amz-crc32\\": \\"2745614147\\"}, \\"RetryAttempts\\": 0}}"}'
  6. Para verificar se a gravação foi bem-sucedida na etapa anterior, crie um cliente de leitura.

    1. Use o comando a seguir para criar um arquivo chamadoreadfunction.py.

      vim readclient.py
    2. No readclient.py arquivo, pressione o i botão para entrar no modo de inserção. Em seguida, copie e cole o código a seguir. Esse código escaneia a tabela e retornará o valor que você gravou na tabela na etapa anterior.

      import boto3 serviceclient = boto3.client('servicediscovery') response = serviceclient.discover_instances(NamespaceName='cloudmap-tutorial', ServiceName='app-service', QueryParameters={ 'action': 'read' }) functionname = response["Instances"][0]["Attributes"]["functionname"] lambdaclient = boto3.client('lambda') resp = lambdaclient.invoke(FunctionName=functionname, InvocationType='RequestResponse') print(resp["Payload"].read())
    3. Pressione a tecla escape:wq, digite e pressione a tecla enter para salvar o arquivo e sair.

    4. Use o comando a seguir para executar o código Python.

      python3 readclient.py

      A saída deve ser semelhante à seguinte, listando o valor gravado na tabela pela execução writefunction.py e a chave aleatória gerada na função de gravação do Lambda.

      b'{"statusCode": 200, "body": "{\\"Items\\": [{\\"id\\": \\"45\\", \\"todo\\": \\"This is a test data\\"}], \\"Count\\": 1, \\"ScannedCount\\": 1, \\"ResponseMetadata\\": {\\"RequestId\\": \\"9JF8J6SFQCKR6IDT5JG5NOM3CNVV4KQNSO5AEMVJF66Q9ASUAAJG\\", \\"HTTPStatusCode\\": 200, \\"HTTPHeaders\\": {\\"server\\": \\"Server\\", \\"date\\": \\"Thu, 25 Jul 2024 20:43:33 GMT\\", \\"content-type\\": \\"application/x-amz-json-1.0\\", \\"content-length\\": \\"91\\", \\"connection\\": \\"keep-alive\\", \\"x-amzn-requestid\\": \\"9JF8J6SFQCKR6IDT5JG5NOM3CNVV4KQNSO5AEMVJF66Q9ASUAAJG\\", \\"x-amz-crc32\\": \\"1163081893\\"}, \\"RetryAttempts\\": 0}}"}'

Etapa 10: limpar os recursos

Depois de concluir o tutorial, exclua os recursos para evitar cobranças adicionais. AWS Cloud Map exige que você as limpe na ordem inversa, primeiro as instâncias do serviço, depois os serviços e, finalmente, o namespace. As etapas a seguir orientam você na limpeza dos AWS Cloud Map recursos usados neste tutorial.

Para excluir os AWS Cloud Map recursos
  1. Faça login no AWS Management Console e abra o AWS Cloud Map console em https://console.aws.amazon.com/cloudmap/.

  2. Na lista de namespaces, selecione o cloudmap-tutorial namespace e escolha Exibir detalhes.

  3. Na página de detalhes do namespace, na lista de serviços, selecione o data-service serviço e escolha Exibir detalhes.

  4. Na seção Instâncias de serviço, selecione a data-instance instância e escolha Cancelar registro.

  5. Usando o breadcrumb na parte superior da página, selecione cloudmap-tutorial.com para voltar à página de detalhes do namespace.

  6. Na página de detalhes do namespace, na lista de serviços, selecione o serviço de serviços de dados e escolha Excluir.

  7. Repita as etapas de 3 a 6 para o app-service serviço write-instance e as instâncias read-instance de serviço.

  8. No painel de navegação à esquerda, escolha Namespaces.

  9. Selecione o cloudmap-tutorial namespace e escolha Excluir.

A tabela a seguir lista os procedimentos que você pode usar para excluir os outros recursos usados no tutorial.

Recurso Etapas

Tabela do DynamoDB

Etapa 6: (Opcional) Exclua sua tabela do DynamoDB para limpar os recursos no Amazon DynamoDB Developer Guide
Funções Lambda e função de execução do IAM associada

Limpe no Guia do AWS Lambda desenvolvedor