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.
Faça login no AWS Management Console e abra o AWS Cloud Map console em https://console.aws.amazon.com/cloudmap/
. -
Escolha Create namespace (Criar namespace).
-
Para Nome do namespace, especifique.
cloudmap-tutorial
-
(Opcional) Para a descrição do namespace, especifique uma descrição para o que você pretende usar o namespace.
-
Em Descoberta de instâncias, selecione Chamadas de API.
-
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.
-
Abra o AWS Cloud Map console em https://console.aws.amazon.com/cloudmap/
-
Na lista de namespaces, selecione o
cloudmap-tutorial
namespace e escolha Exibir detalhes. -
Na seção Serviços, escolha Criar serviço e faça o seguinte.
-
Em Nome do serviço, digite
data-service
. -
Deixe o resto dos valores padrão e escolha Criar serviço.
-
-
Na seção Serviços, selecione o
data-service
serviço e escolha Exibir detalhes. -
Na seção Instâncias de serviço, escolha Registrar instância de serviço.
-
Na página Registrar instância do serviço, faça o seguinte.
-
Em Tipo de instância, selecione Informações de identificação para outro recurso.
-
Para ID da instância de serviço, especifique
data-instance
. -
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)
Faça login no AWS Management Console e abra o console do IAM em https://console.aws.amazon.com/iam/
. -
No painel de navegação do console do IAM, escolha Perfis e, em seguida, Criar perfil.
-
Em Tipo de Entidade Confiável, escolha AWS service (Serviço da AWS).
-
Para Serviço ou caso de uso, escolha Lambda e, em seguida, escolha o caso de uso do Lambda.
-
Escolha Próximo.
-
Pesquise e selecione a caixa ao lado da
PowerUserAccess
política e escolha Avançar. -
Escolha Próximo.
-
Em Nome da função, especifique
cloudmap-tutorial-role
. -
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.
-
Abra o AWS Cloud Map console em https://console.aws.amazon.com/cloudmap/
-
No painel de navegação à esquerda, escolha Namespaces.
-
Na lista de namespaces, selecione o
cloudmap-tutorial
namespace e escolha Exibir detalhes. -
Na seção Serviços, escolha Criar serviço e faça o seguinte.
-
Em Nome do serviço, digite
app-service
. -
Deixe o resto dos valores padrão e escolha Criar serviço.
-
-
Na seção Serviços, selecione o
app-service
serviço e escolha Exibir detalhes. -
Na seção Instâncias de serviço, escolha Registrar instância de serviço.
-
Na página Registrar instância do serviço, faça o seguinte.
-
Em Tipo de instância, selecione Informações de identificação para outro recurso.
-
Para ID da instância de serviço, especifique
write-instance
. -
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.
-
Abra o AWS Cloud Map console em https://console.aws.amazon.com/cloudmap/
-
No painel de navegação à esquerda, escolha Namespaces.
-
Na lista de namespaces, selecione o
cloudmap-tutorial
namespace e escolha Exibir detalhes. -
Na seção Serviços, selecione o
app-service
serviço e escolha Exibir detalhes. -
Na seção Instâncias de serviço, escolha Registrar instância de serviço.
-
Na página Registrar instância do serviço, faça o seguinte.
-
Em Tipo de instância, selecione Informações de identificação para outro recurso.
-
Para ID da instância de serviço, especifique
read-instance
. -
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.
-
Abra o AWS CloudShell console em https://console.aws.amazon.com/cloudshell/
-
Use o comando a seguir para criar um arquivo chamado
writefunction.py
.vim writeclient.py
-
No
writeclient.py
arquivo, entre no modo de inserção pressionando oi
botão. Em seguida, copie e cole o código a seguir. Esse código descobre a função Lambda para gravar dados pesquisando oname=writeservice
atributo personalizado noapp-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())
-
Pressione a tecla escape
:wq
, digite e pressione a tecla enter para salvar o arquivo e sair. -
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}}"}'
-
Para verificar se a gravação foi bem-sucedida na etapa anterior, crie um cliente de leitura.
-
Use o comando a seguir para criar um arquivo chamado
readfunction.py
.vim readclient.py
-
No
readclient.py
arquivo, pressione oi
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())
-
Pressione a tecla escape
:wq
, digite e pressione a tecla enter para salvar o arquivo e sair. -
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
Faça login no AWS Management Console e abra o AWS Cloud Map console em https://console.aws.amazon.com/cloudmap/
. -
Na lista de namespaces, selecione o
cloudmap-tutorial
namespace e escolha Exibir detalhes. -
Na página de detalhes do namespace, na lista de serviços, selecione o
data-service
serviço e escolha Exibir detalhes. -
Na seção Instâncias de serviço, selecione a
data-instance
instância e escolha Cancelar registro. -
Usando o breadcrumb na parte superior da página, selecione cloudmap-tutorial.com para voltar à página de detalhes do namespace.
-
Na página de detalhes do namespace, na lista de serviços, selecione o serviço de serviços de dados e escolha Excluir.
-
Repita as etapas de 3 a 6 para o
app-service
serviçowrite-instance
e as instânciasread-instance
de serviço. -
No painel de navegação à esquerda, escolha Namespaces.
-
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 |