

# Construir funções do Lambda com Java
<a name="lambda-java"></a>

É possível executar o código Java no AWS Lambda. O Lambda fornece [runtimes](lambda-runtimes.md) para Java que executam seu código para processar eventos. O código é executado em um ambiente do Amazon Linux que inclui credenciais da AWS de uma função do AWS Identity and Access Management (IAM) que você gerencia.

O Lambda oferece suporte aos seguintes runtimes Java.<a name="java-runtimes"></a>


| Nome | Identificador | Sistema operacional | Data da substituição | Bloquear a criação de funções | Bloquear a atualização de funções | 
| --- | --- | --- | --- | --- | --- | 
| Java 25 | `java25` | Amazon Linux 2023 |  30 de junho de 2029  |  31 de julho de 2029  |  31 de agosto de 2029  | 
| Java 21 | `java21` | Amazon Linux 2023 |  30 de junho de 2029  |  31 de julho de 2029  |  31 de agosto de 2029  | 
| Java 17 | `java17` | Amazon Linux 2 |  30º de junho de 2027  |  31º de julho de 2027  |  31 de agosto de 2027  | 
| Java 11 | `java11` | Amazon Linux 2 |  30º de junho de 2027  |  31º de julho de 2027  |  31 de agosto de 2027  | 
| Java 8 | `java8.al2` | Amazon Linux 2 |  30º de junho de 2027  |  31º de julho de 2027  |  31 de agosto de 2027  | 

A AWS fornece as bibliotecas para funções em Java a seguir. Essas bibliotecas estão disponíveis no [repositório central do Maven](https://search.maven.org/search?q=g:com.amazonaws).
+ [com.amazonaws:aws-lambda-java-core](https://github.com/aws/aws-lambda-java-libs/tree/master/aws-lambda-java-core) (obrigatória): define as interfaces do método do manipulador e o objeto de contexto que o runtime transmite ao manipulador. Se você definir seus próprios tipos de entrada, esta será a única biblioteca necessária.
+ [com.amazonaws:aws-lambda-java-events](https://github.com/aws/aws-lambda-java-libs/tree/master/aws-lambda-java-events): tipos de entrada para eventos de serviços que invocam funções do Lambda.
+ [com.amazonaws:aws-lambda-java-log4j2](https://github.com/aws/aws-lambda-java-libs/tree/master/aws-lambda-java-log4j2): uma biblioteca appender do Apache Log4j 2 que você pode usar para adicionar o ID de solicitação da invocação atual aos [logs de função](java-logging.md).
+ [AWS SDK for Java 2.0](https://github.com/aws/aws-sdk-java-v2): o AWS SDK oficial para a linguagem de programação Java.
+ [AWS SDK Lambda Durable Execution para Java](https://github.com/aws/aws-durable-execution-sdk-java) — Crie aplicativos confiáveis de várias etapas e fluxos de trabalho de IA que verifiquem o progresso, se recuperem automaticamente de falhas e pausem a execução. Para obter mais informações, consulte [Funções Lambda duráveis](durable-functions.md).

Adicione-as à sua definição de compilação da seguinte forma:

------
#### [ Gradle ]

```
dependencies {
    implementation 'com.amazonaws:aws-lambda-java-core:1.2.2'
    implementation 'com.amazonaws:aws-lambda-java-events:3.11.1'
    runtimeOnly 'com.amazonaws:aws-lambda-java-log4j2:1.5.1'
    implementation 'software.amazon.lambda.durable:aws-durable-execution-sdk-java:1.0.1'
}
```

------
#### [ Maven ]

```
  <dependencies>
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-lambda-java-core</artifactId>
      <version>1.2.2</version>
    </dependency>
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-lambda-java-events</artifactId>
      <version>3.11.1</version>
    </dependency>
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-lambda-java-log4j2</artifactId>
      <version>1.5.1</version>
    </dependency>
    <dependency>
      <groupId>software.amazon.lambda.durable</groupId>
      <artifactId>aws-durable-execution-sdk-java</artifactId>
      <version>1.0.1</version>
    </dependency>
  </dependencies>
```

------

**Importante**  
Não use componentes privados da API JDK, como campos, métodos ou classes privadas. Componentes de API não públicos podem ser alterados ou removidos em qualquer atualização, causando falha na aplicação.

**Para criar uma função em Java**

1. Abra o [console do lambda](https://console.aws.amazon.com/lambda).

1. Escolha a opção **Criar função**.

1. Configure as seguintes opções:
   + **Nome da função**: digite um nome para a função.
   + **Runtime**: escolha **Java 25**.

1. Escolha a opção **Criar função**.

O console cria uma função do Lambda com uma classe de manipulador chamada `Hello`. Como Java é uma linguagem compilada, não é possível visualizar nem editar o código-fonte no console do Lambda, mas você pode modificar a configuração dele, invocá-lo e configurar acionadores.

**nota**  
Para começar com o desenvolvimento de aplicativos no ambiente local, implante um dos [aplicativos de exemplo](java-samples.md) disponíveis no repositório do GitHub deste guia.

A classe `Hello` tem uma função chamada `handleRequest` que utiliza um objeto de evento e um objeto de contexto. Esta é a [função de manipulador](java-handler.md) que o Lambda chama quando a função é invocada. O runtime da função do Java recebe eventos de invocação do Lambda e os transmite ao handler. Na configuração da função, o valor do manipulador é `example.Hello::handleRequest`.

Para atualizar o código da função, crie um pacote de implantação, que é um arquivo .zip que contém o código da função. À medida que o desenvolvimento da função progredir, você desejará armazenar o código da função no controle de origem, adicionar bibliotecas e automatizar implantações. Comece [criando um pacote de implantação](java-package.md) e atualizando o seu código na linha de comando.

O runtime transmite um objeto de contexto para o handler, além do evento de invocação. O [objeto de contexto](java-context.md) contém informações adicionais sobre a invocação, a função e o ambiente de execução. Outras informações estão disponíveis de variáveis de ambiente.

Sua função do Lambda é fornecida com um grupo de logs do CloudWatch Logs. O runtime envia detalhes sobre cada invocação para o CloudWatch Logs. Ele retransmite quaisquer [logs que sua função produz](java-logging.md) durante a invocação. Se a função retornar um erro, o Lambda formatará o erro e o retornará para o chamador.

**Topics**
+ [Definir o manipulador da função do Lambda em Java](java-handler.md)
+ [Implantar funções do Lambda em Java com arquivos .zip ou JAR](java-package.md)
+ [Implantar funções do Lambda em Java com imagens de contêiner](java-image.md)
+ [Como trabalhar com camadas para funções do Lambda em Java](java-layers.md)
+ [Personalização da serialização para funções do Lambda em Java](java-custom-serialization.md)
+ [Personalizar o comportamento de startup de runtime para as funções do Lambda](java-customization.md)
+ [Usar o objeto de contexto do Lambda para recuperar informações das funções em Java](java-context.md)
+ [Registrar em log e monitorar funções do Lambda em Java](java-logging.md)
+ [Instrumentação do código Java no AWS Lambda](java-tracing.md)
+ [Aplicativos de exemplo Java para o AWS Lambda](java-samples.md)