

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

# Funções do Lambda como destinos no VPC Lattice
<a name="lambda-functions"></a>

Você pode registrar suas funções do Lambda como destinos com um grupo de destino do VPC Lattice e configurar uma regra de receptor para encaminhar solicitações ao grupo de destino para sua função do Lambda. Quando o serviço encaminhar a solicitação para um grupo de destino com uma função do Lambda como um destino, ele invocará sua função do Lambda e transmitirá o conteúdo da solicitação para a função do Lambda em formato JSON.

**Limitações**
+ A função do Lambda e o grupo de destino devem estar na mesma conta e na mesma região.
+ O tamanho máximo do corpo da solicitação que você pode enviar para uma função do Lambda é de 6 MB.
+ O tamanho máximo da resposta JSON que a função do Lambda pode enviar é de 6 MB.
+ O protocolo precisa ser HTTP ou HTTPS.

## Preparar a função do Lambda
<a name="prepare-lambda-function"></a>

As recomendações a seguir se aplicam se você estiver usando sua função do Lambda com um serviço VPC Lattice.

**Permissões para invocar a função do Lambda**  
Quando você cria o grupo-alvo e registra a função Lambda usando o Console de gerenciamento da AWS ou o, o AWS CLI VPC Lattice adiciona as permissões necessárias à sua política de função Lambda em seu nome. 

Você também poderá adicionar permissões por conta própria usando a seguinte chamada de API:

```
aws lambda add-permission \
  --function-name lambda-function-arn-with-alias-name \ 
  --statement-id vpc-lattice \
  --principal vpc-lattice.amazonaws.com \
  --action lambda:InvokeFunction \
  --source-arn target-group-arn
```

**Versionamento da função do Lambda**  
É possível registrar uma função Lambda por grupo de destino. Para garantir que você possa alterar sua função do Lambda e que o serviço VPC Lattice sempre invoque a versão atual da função do Lambda, crie um alias de função e inclua o alias no ARN da função ao registrar a função do Lambda com o serviço VPC Lattice. *Para obter mais informações, consulte [Versões da função Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html) e [Criar um alias para uma função Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html) no Guia do desenvolvedor.AWS Lambda *

## Criar um grupo de destino para a função do Lambda
<a name="register-lambda-function"></a>

Crie um grupo de destino, que é usado no roteamento da solicitação. Se o conteúdo da solicitação corresponder a uma regra de receptor com uma ação para encaminhá-la para esse grupo de destino, o serviço VPC Lattice invocará a função do Lambda registrada.

**Para criar um grupo de destino e registrar a função do Lambda usando o console**

1. Abra o console da Amazon VPC em [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/).

1. No painel de navegação, em **VPC Lattice**, escolha **Grupos de destino**.

1. Selecione **Criar grupo de destino**.

1. Em **Selecionar um tipo de destino**, escolha **Função do Lambda**.

1. Em **Nome do grupo de destino**, insira um nome para o grupo de destino.

1. Em **Versão da estrutura de eventos do Lambda**, escolha uma versão. Para obter mais informações, consulte [Receba eventos do serviço VPC Lattice](#receive-event-from-service).

1. (Opcional) Para adicionar tags, escolha **Tags**, **Adicionar nova tag** e insira a chave e o valor da tag.

1. Escolha **Próximo**.

1. Em **Lambda function** (Função Lambda), siga um destes procedimentos
   + Selecione uma função do Lambda existente.
   + Crie uma nova função do Lambda e selecione-a.
   + Registre a função do Lambda mais posteriormente.

1. Selecione **Criar grupo de destino**.

**Para criar um grupo-alvo e registrar a função Lambda usando o AWS CLI**  
Use os comandos [create-target-group](https://docs.aws.amazon.com/cli/latest/reference/vpc-lattice/create-target-group.html)e [register-targets](https://docs.aws.amazon.com/cli/latest/reference/vpc-lattice/register-targets.html).

## Receba eventos do serviço VPC Lattice
<a name="receive-event-from-service"></a>

O serviço VPC Lattice é compatível com solicitações de invocação do Lambda por HTTP e HTTPS. O serviço envia um evento no formato JSON e adiciona o cabeçalho `X-Forwarded-For` a cada solicitação.

**Codificação base64**  
O serviço Base64 codifica o corpo se o cabeçalho `content-encoding` estiver presente e o tipo de conteúdo não for um dos seguintes:
+ `text/*`
+ `application/json`
+ `application/xml`
+ `application/javascript`

Se o cabeçalho `content-encoding` não estiver presente, a codificação Base64 dependerá do tipo de conteúdo. Para os tipos de conteúdo acima, o serviço envia o corpo como está, sem a codificação Base64.

**Formato de estrutura de evento**  
Ao criar ou atualizar um grupo de destino do tipo `LAMBDA`, você poderá especificar a versão da estrutura de eventos que sua função do Lambda recebe. As versões possíveis são `V1` e `V2`.<a name="event-structure-v2"></a>

**Example Exemplo de evento: V2**  

```
{
    "version": "2.0",
    "path": "/?query1=value1&query2=value2",
    "method": "GET|POST|HEAD|...",
    "headers": {
        "header-key": ["header-value", ...],
        ...
    },    
    "queryStringParameters": {
        "key": ["value", ...]
    },
    "body": "request-body",
    "isBase64Encoded": true|false,
    "requestContext": {
        "serviceNetworkArn": "arn:aws:vpc-lattice:region:123456789012:servicenetwork/sn-0bf3f2882e9cc805a",
        "serviceArn": "arn:aws:vpc-lattice:region:123456789012:service/svc-0a40eebed65f8d69c",
        "targetGroupArn": "arn:aws:vpc-lattice:region:123456789012:targetgroup/tg-6d0ecf831eec9f09",
        "identity": {
            "sourceVpcArn": "arn:aws:ec2:region:123456789012:vpc/vpc-0b8276c84697e7339",
            "type": "AWS_IAM",
            "principal": "arn:aws:iam::123456789012:assumed-role/my-role/my-session",
            "principalOrgID": "o-50dc6c495c0c9188",
            "sessionName": "i-0c7de02a688bde9f7",
            "x509IssuerOu": "string",
            "x509SanDns": "string",
            "x509SanNameCn": "string",
            "x509SanUri": "string",
            "x509SubjectCn": "string"
        },
        "region": "region",
        "timeEpoch": "1690497599177430"
    }
}
```  
`body`  
O corpo da solicitação. Presente somente se o protocolo for HTTP, HTTPS ou gRPC.  
`headers`  
Os cabeçalhos HTTP da solicitação. Presente somente se o protocolo for HTTP, HTTPS ou gRPC.  
`identity`  
As informações de identidade. Os seguintes campos são possíveis.  
+ `principal`: a entidade principal autenticada. Presente somente se a AWS autenticação for bem-sucedida.
+ `principalOrgID`: o ID da organização da entidade principal autenticada. Presente somente se a AWS autenticação for bem-sucedida.
+ `sessionName`: o nome da sessão autenticada. Presente somente se a AWS autenticação for bem-sucedida.
+ `sourceVpcArn`: o ARN da VPC na qual a solicitação teve origem. Presente somente se for possível identificar a VPC de origem.
+ `type`— O valor é `AWS_IAM` se uma política de autenticação for usada e a AWS autenticação for bem-sucedida.
Se houver o uso de credenciais do Roles Anywhere e a autenticação for bem-sucedida, os campos a seguir serão possíveis.  
+ `x509IssuerOu`: o emissor (OU).
+ `x509SanDns`: o nome alternativo do assunto (DNS).
+ `x509SanNameCn`: o nome alternativo do emissor (nome/CN).
+ `x509SanUri`: o nome alternativo do assunto (URI).
+ `x509SubjectCn`: o nome do assunto (CN).  
`isBase64Encoded`  
Indica se o corpo foi codificado em base64. Presente somente se o protocolo for HTTP, HTTPS ou gRPC e o corpo da solicitação ainda não for uma string.  
`method`  
O método HTTP da solicitação. Presente somente se o protocolo for HTTP, HTTPS ou gRPC.  
`path`  
O caminho da solicitação do cliente que inclui parâmetros de sequência de caracteres de consulta. Presente somente se o protocolo for HTTP, HTTPS ou gRPC.  
`queryStringParameters`  
Os parâmetros da string de consulta HTTP. Presente somente se o protocolo for HTTP, HTTPS ou gRPC.  
`serviceArn`  
O ARN do serviço que recebe a solicitação.  
`serviceNetworkArn`  
O ARN da rede de serviço que entrega a solicitação.  
`targetGroupArn`  
O ARN do grupo de destino que recebe a solicitação.  
`timeEpoch`  
A hora em microssegundos.<a name="event-structure-v1"></a>

**Example Exemplo de evento: V1**  

```
{
    "raw_path": "/path/to/resource?query1=value1&query2=value2",
    "method": "GET|POST|HEAD|...",
    "headers": {"header-key": "header-value", ... },
    "query_string_parameters": {"key": "value", ...},
    "body": "request-body",
    "is_base64_encoded": true|false
}
```

## Responder ao serviço VPC Lattice
<a name="respond-to-service"></a>

A resposta da função do Lambda deve incluir o status de codificação Base64, o código do status e os cabeçalhos. É possível omitir o corpo.

Para incluir um conteúdo binário no corpo da resposta, você deve codificar o conteúdo em Base64 e definir `isBase64Encoded` como `true`. O serviço decodifica o conteúdo para recuperar o conteúdo binário e o envia ao cliente no corpo da resposta HTTP.

O serviço VPC Lattice não respeita hop-by-hop cabeçalhos, como ou. `Connection` `Transfer-Encoding` É possível omitir o cabeçalho `Content-Length` porque o serviço o calcula antes de enviar respostas aos clientes.

Veja a seguir um exemplo de resposta de uma função do Lambda:

```
{
    "isBase64Encoded": false,
    "statusCode": 200,
    "headers": {
        "Set-cookie": "cookies",
        "Content-Type": "application/json"
    },
    "body": "Hello from Lambda (optional)"
}
```

## Cabeçalhos de vários valores
<a name="multi-value-headers"></a>

O VPC Lattice suporta solicitações de um cliente ou respostas de uma função Lambda que contêm cabeçalhos com vários valores ou contêm o mesmo cabeçalho várias vezes. O VPC Lattice passa todos os valores para os alvos.

No exemplo a seguir, há dois cabeçalhos nomeados header1 com valores diferentes.

```
header1 = value1
header1 = value2
```

Com uma estrutura de eventos V2, o VPC Lattice envia os valores em uma lista. Por exemplo:

```
"header1": ["value1", "value2"]
```

Com uma estrutura de eventos V1, o VPC Lattice combina os valores em uma única string. Por exemplo:

```
"header1": "value1, value2"
```

## Parâmetros de sequência de caracteres de consulta de vários valores
<a name="multi-value-string-parameters"></a>

O VPC Lattice suporta parâmetros de consulta com vários valores para a mesma chave.

No exemplo a seguir, há dois parâmetros nomeados QS1 com valores diferentes.

```
http://www.example.com?&QS1=value1&QS1=value2
```

Com uma estrutura de eventos V2, o VPC Lattice envia os valores em uma lista. Por exemplo:

```
"QS1": ["value1", "value2"]
```

Com uma estrutura de eventos V1, o VPC Lattice usa o último valor passado. Por exemplo:

```
"QS1": "value2"
```

## Cancelar o registro da função do Lambda
<a name="deregister-lambda-function"></a>

Se não precisar mais enviar tráfego para sua função Lambda, você poderá cancelar o registro. Depois de cancelar o registro de uma função Lambda, as solicitações em andamento falham com erros HTTP 5XX.

Para substituir uma função Lambda, recomendamos criar um grupo de destino, registrar a nova função com o novo grupo de destino e atualizar as regras do listener para usar o novo grupo de destino em vez do existente.

**Para cancelar o registro de funções do Lambda usando o console**

1. Abra o console da Amazon VPC em [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/).

1. No painel de navegação, em **VPC Lattice**, escolha **Grupos de destino**.

1. Escolha o nome do grupo de destino para abrir sua página de detalhes.

1. Na guia **Targets** (Destinos), selecione **Deregister** (Cancelar registro).

1. Quando receber a solicitação de confirmação, insira **confirm** e escolha **Cancelar registro**.

**Para cancelar o registro da função Lambda usando o AWS CLI**  
Use o comando [deregister-targets](https://docs.aws.amazon.com/cli/latest/reference/vpc-lattice/deregister-targets.html).