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
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
-
Abra a página Roles
no console do IAM. -
Selecione Create role.
-
Crie uma função com as seguintes propriedades.
-
Entidade confiável – Lambda.
-
Permissões – AWSLambdaVPCAccessExecutionRole.
-
Nome da função –
lambda-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.
-
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.
-
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.
-
Invoque a função do Lambda com o comando
invoke
.$
aws lambda invoke --function-name AccessMemCache output.txt
-
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
-
Abra a página Funções
do console do Lambda. -
Selecione a função criada.
-
Escolha Actions, Delete.
-
Escolha Delete.
Para excluir a função de execução
-
Abra a página Funções
do console do IAM. -
Selecione a função de execução criada.
-
Selecione Delete role (Excluir função).
-
Escolha Sim, excluir.
Como excluir o cluster do ElastiCache
-
Abra a página Memcached
do console do ElastiCache. -
Selecione o cluster criado.
-
Escolha Actions, Delete.
-
Escolha Delete (Excluir).