Tutorial: configurar uma função do Lambda para acessar o Amazon ElastiCache em uma Amazon VPC - AWS Lambda

Tutorial: configurar uma função do Lambda para acessar o Amazon ElastiCache em uma Amazon VPC

Neste tutorial, você faz o seguinte:

  • Crie um cluster do Amazon ElastiCache na sua Amazon Virtual Private Cloud padrão. Para obter mais informações sobre o Amazon ElastiCache, consulte Amazon ElastiCache.

  • Crie uma função do Lambda para acessar o cluster do ElastiCache. Ao criar a função do Lambda, você fornece os IDs de sub-rede da sua Amazon VPC e um security group de VPC para permitir que a função do Lambda acesse os recursos na sua VPC. Para ilustração neste tutorial, a função Lambda gera um UUID, o grava em cache e o recupera do cache.

  • Invoque a função do Lambda e verifique se ela acessou o cluster do ElastiCache na sua VPC.

Para obter detalhes sobre como usar o Lambda com a Amazon VPC, consulte Configurar uma função do Lambda para acessar recursos em uma VPC.

Pré-requisitos

Este tutorial pressupõe que você tenha algum conhecimento das operações básicas do Lambda e do console do Lambda. Caso ainda não tenha feito isso, siga as instruções em Conceitos básicos do AWS Lambda para criar sua primeira função do Lambda.

Para concluir as etapas a seguir, você precisa de um terminal de linha de comando ou shell para executar comandos. Nas listagens, os comandos são mostrados precedidos por um símbolo de prompt ($) e pelo nome do diretório atual, quando apropriado:

~/lambda-project$ this is a command this is output

Para comandos longos, um caractere de escape (\) é usado para dividir um comando em várias linhas.

No Linux e no macOS, use seu gerenciador preferido de pacotes e de shell. No Windows 10, você pode instalar o Subsistema Windows para Linux para obter uma versão do Ubuntu integrada com o Windows e o Bash.

Criar a função de execução

Crie a função de execução que dá à sua função permissão para acessar recursos do AWS.

Para criar uma função de execução

  1. Abra a página Roles no console do IAM.

  2. Selecione Create role.

  3. Crie uma função com as seguintes propriedades.

    • Entidade confiável – Lambda.

    • PermissõesAWSLambdaVPCAccessExecutionRole.

    • Nome da funçãolambda-vpc-role.

A AWSLambdaVPCAccessExecutionRole tem as permissões que a função precisa para gerenciar conexões de rede com uma VPC.

Criar um cluster do ElastiCache

Crie um cluster do ElastiCache na sua VPC padrão.

  1. Execute o seguinte comando da AWS CLI para criar um cluster Memcached.

    $ aws elasticache create-cache-cluster --cache-cluster-id ClusterForLambdaTest --cache-node-type cache.t3.medium --engine memcached --num-cache-nodes 1 --security-group-ids sg-0123a1b123456c1de

    Você pode examinar o security group do VPC padrão no console do VPC em Security Groups. Sua função Lambda de exemplo adicionará e recuperará um item desse cluster.

  2. Anote o endpoint de configuração para o cluster de cache que você iniciou. Você pode obter isso no console do Amazon ElastiCache. Você poderá especificar esse valor no código da sua função Lambda, na próxima seção.

Criar um pacote de implantação

O exemplo a seguir do código Python lê e grava um item no seu cluster do ElastiCache.

exemplo app.py

from __future__ import print_function import time import uuid import sys import socket import elasticache_auto_discovery from pymemcache.client.hash import HashClient #elasticache settings elasticache_config_endpoint = "your-elasticache-cluster-endpoint:port" nodes = elasticache_auto_discovery.discover(elasticache_config_endpoint) nodes = map(lambda x: (x[1], int(x[2])), nodes) memcache_client = HashClient(nodes) def handler(event, context): """ This function puts into memcache and get from it. Memcache is hosted using elasticache """ #Create a random UUID... this will be the sample element we add to the cache. uuid_inserted = uuid.uuid4().hex #Put the UUID to the cache. memcache_client.set('uuid', uuid_inserted) #Get item (UUID) from the cache. uuid_obtained = memcache_client.get('uuid') if uuid_obtained.decode("utf-8") == uuid_inserted: # this print should go to the CloudWatch Logs and Lambda console. print ("Success: Fetched value %s from memcache" %(uuid_inserted)) else: raise Exception("Value is not the same as we put :(. Expected %s got %s" %(uuid_inserted, uuid_obtained)) return "Fetched value from memcache: " + uuid_obtained.decode("utf-8")

Dependências

  • pymemcache – O código da função do Lambda usa essa biblioteca para criar um objeto HashClient para definir e obter itens do cache de memória.

  • elasticache-auto-discovery – A função do Lambda usa essa biblioteca para obter os nós no seu cluster do Amazon ElastiCache.

Instale dependências com o Pip e crie um pacote de implantação. Para obter instruções, consulte Pacote de implantação do AWS Lambda em Python.

Criar a função do Lambda

Crie a função do Lambda com o comando create-function.

$ aws lambda create-function --function-name AccessMemCache --timeout 30 --memory-size 1024 \ --zip-file fileb://function.zip --handler app.handler --runtime python3.8 \ --role arn:aws:iam::123456789012:role/lambda-vpc-role \ --vpc-config SubnetIds=subnet-0532bb6758ce7c71f,subnet-d6b7fda068036e11f,SecurityGroupIds=sg-0897d5f549934c2fb

Você pode encontrar os IDs de sub-rede e o ID do security group padrão do seu VPC no console do VPC.

Testar a função do Lambda

Nesta etapa, você invoca a função do Lambda manualmente usando o comando invoke. Quando a função do Lambda for executada, ela gerará um UUID e o gravará no cluster do ElastiCache que você especificou no seu código do Lambda. A função Lambda, então, recupera o item do cache.

  1. Invoque a função do Lambda com o comando invoke.

    $ aws lambda invoke --function-name AccessMemCache output.txt
  2. Verifique se a função Lambda foi executada com êxito, da seguinte forma:

    • Analise o arquivo output.txt.

    • Analisar os resultados no console do AWS Lambda.

    • Verifique os resultados no CloudWatch Logs.

Agora que você criou uma função do Lambda que acessa um cluster do ElastiCache na sua VPC, a função já poderá ser invocada em resposta a eventos. Para obter informações sobre como configurar fontes de eventos e exemplos, consulte Usar o AWS Lambda com outros serviços.

Limpar recursos

A menos que você queira manter os recursos criados neste tutorial, você poderá excluí-los agora. A exclusão dos recursos da AWS que você não está mais usando evita cobranças desnecessárias na conta da AWS.

Para excluir a função Lambda

  1. Abra a página Funções do console do Lambda.

  2. Selecione a função criada.

  3. Escolha Actions, Delete.

  4. Escolha Delete.

Para excluir a função de execução

  1. Abra a página Funções do console do IAM.

  2. Selecione a função de execução criada.

  3. Selecione Delete role (Excluir função).

  4. Escolha Sim, excluir.

Como excluir o cluster do ElastiCache

  1. Abra a página Memcached do console do ElastiCache.

  2. Selecione o cluster criado.

  3. Escolha Actions, Delete.

  4. Escolha Delete (Excluir).