Implantar funções do Lambda com o AWS CDK
O AWS Cloud Development Kit (AWS CDK) é um framework de infraestrutura como código (IAC) que pode ser usado para definir a infraestrutura da Nuvem AWS usando uma linguagem de programação da sua escolha. Para definir sua própria infraestrutura de nuvem, primeiro é necessário criar uma aplicação (em uma das linguagens aceitas pelo CDK) que contenha uma ou mais pilhas. Em seguida, sintetize-a em um modelo do AWS CloudFormation e implante seus recursos na Conta da AWS. Siga as etapas neste tópico para implantar uma função do Lambda que retorna um evento de um endpoint do Amazon API Gateway.
A AWS Construct Library, incluída no CDK, fornece módulos que podem ser usados para modelar os recursos fornecidos por cada serviço da Serviços da AWS. Para serviços populares, a biblioteca fornece construções selecionadas com padrões inteligentes e práticas recomendadas. Você pode usar o módulo aws_lambda para definir a função e os recursos compatíveis com apenas algumas linhas de código.
Pré-requisitos
Antes de começar este tutorial, instale o AWS CDK executando o comando a seguir.
npm install -g aws-cdk
Etapa 1: configurar o projeto do AWS CDK
Crie um diretório para a nova aplicação do AWS CDK e inicialize o projeto.
nota
O modelo de aplicação do AWS CDK usa o nome do diretório do projeto para gerar nomes para arquivos e classes de origem. Neste exemplo, o diretório se chama hello-lambda
. Se você escolher outro nome de diretório de projeto, sua aplicação não corresponderá a estas instruções.
O AWS CDK v2 inclui construções estáveis para todos os Serviços da AWS em um único pacote chamado aws-cdk-lib
. Esse pacote é instalado como uma dependência quando o projeto é inicializado. Quando determinadas linguagens de programação são usadas, o pacote é instalado quando o projeto é compilado pela primeira vez.
Etapa 2: definir a pilha do AWS CDK
Uma pilha do CDK é uma coleção de um ou mais constructos que definem os recursos AWS. Cada pilha do CDK representa uma pilha do AWS CloudFormation na aplicação do CDK.
Para definir o CDK, siga as instruções da linguagem de programação de sua preferência. Esta pilha define o seguinte:
-
O nome lógico da função:
MyFunction
-
O local do código da função, especificado na propriedade
code
. Para obter mais informações, consulte Handler code na referência de APIs do AWS Cloud Development Kit (AWS CDK). -
O nome lógico da API REST:
HelloApi
-
O nome lógico do endpoint do API Gateway:
ApiGwEndpoint
Observe que todas as pilhas do CDK neste tutorial usam o runtime Node.js para a função do Lambda. Você pode usar diferentes linguagens de programação para a pilha do CDK e a função do Lambda para aproveitar os pontos fortes de cada linguagem. Por exemplo, você pode usar o TypeScript para a pilha do CDK para aproveitar os benefícios da tipagem estática para seu código de infraestrutura. Você pode usar o JavaScript para a função do Lambda para aproveitar a flexibilidade e o rápido desenvolvimento de uma linguagem de tipagem dinâmica.
Etapa 3: criar o código da função do Lambda
-
Na raiz do seu projeto (
hello-lambda
), crie o diretório/lib/lambda-handler
para o código da função do Lambda. Esse diretório é especificado na propriedadecode
da sua pilha do AWS CDK. -
Crie um novo arquivo denominado
index.js
no diretório/lib/lambda-handler
. Cole o seguinte código no arquivo. A função extrai propriedades específicas da solicitação da API e as retorna como uma resposta JSON.exports.handler = async (event) => { // Extract specific properties from the event object const { resource, path, httpMethod, headers, queryStringParameters, body } = event; const response = { resource, path, httpMethod, headers, queryStringParameters, body, }; return { body: JSON.stringify(response, null, 2), statusCode: 200, }; };
Etapa 4: implantar a pilha do AWS CDK
-
Na raiz do seu projeto, execute o comando cdk synth:
cdk synth
Esse comando sintetiza um modelo do AWS CloudFormation da sua pilha do CDK. O modelo é um arquivo YAML com aproximadamente 400 linhas, semelhante ao exibido abaixo.
nota
Se você receber o erro a seguir, verifique se está na raiz do diretório do projeto.
--app is required either in command-line, in cdk.json or in ~/.cdk.json
exemplo Modelo AWS CloudFormation
Resources: MyFunctionServiceRole3C357FF2: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: - Action: sts:AssumeRole Effect: Allow Principal: Service: lambda.amazonaws.com Version: "2012-10-17" ManagedPolicyArns: - Fn::Join: - "" - - "arn:" - Ref: AWS::Partition - :iam::aws:policy/service-role/AWSLambdaBasicExecutionRole Metadata: aws:cdk:path: HelloLambdaStack/MyFunction/ServiceRole/Resource MyFunction1BAA52E7: Type: AWS::Lambda::Function Properties: Code: S3Bucket: Fn::Sub: cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region} S3Key: ab1111111cd32708dc4b83e81a21c296d607ff2cdef00f1d7f48338782f92l3901.zip Handler: index.handler Role: Fn::GetAtt: - MyFunctionServiceRole3C357FF2 - Arn Runtime: nodejs20.x ...
-
Execute o comando cdk deploy:
cdk deploy
Aguarde enquanto os recursos são criados. A saída final inclui o URL do endpoint do API Gateway. Exemplo: .
Outputs: HelloLambdaStack.ApiGwEndpoint77F417B1 =
https://abcd1234.execute-api.us-east-1.amazonaws.com/prod/
Etapa 5: testar a função
Para invocar a função do Lambda, copie o endpoint do API Gateway e cole-o em um navegador da web ou execute um comando curl
:
curl -s
https://abcd1234.execute-api.us-east-1.amazonaws.com/prod/
A resposta é uma representação JSON das propriedades selecionadas do objeto de evento original, que contém informações sobre a solicitação feita ao endpoint do API Gateway. Exemplo: .
{
"resource": "/",
"path": "/",
"httpMethod": "GET",
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept-Language": "en-US,en;q=0.9",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Desktop-Viewer": "true",
"CloudFront-Is-Mobile-Viewer": "false",
"CloudFront-Is-SmartTV-Viewer": "false",
"CloudFront-Is-Tablet-Viewer": "false",
"CloudFront-Viewer-ASN": "16509",
"CloudFront-Viewer-Country": "US",
"Host": "abcd1234.execute-api.us-east-1.amazonaws.com",
...
Etapa 6: limpar os recursos
O endpoint do API Gateway pode ser acessado publicamente. Para evitar cobranças inesperadas, execute o comando cdk destroy para excluir a pilha e todos os recursos associados.
cdk destroy
Próximas etapas
Para obter informações sobre como criar aplicações do AWS CDK em sua linguagem preferida, consulte: