

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

# Invocando DAGs com uma função Lambda
<a name="samples-lambda"></a>

O exemplo de código a seguir usa uma função [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html) para obter um token CLI do Apache Airflow e invocar um gráfico acíclico direcionado (DAG) em um ambiente Amazon MWAA.

**Topics**
+ [Versão](#samples-lambda-version)
+ [Pré-requisitos](#samples-lambda-prereqs)
+ [Permissões](#samples-lambda-permissions)
+ [Dependências](#samples-lambda-dependencies)
+ [Exemplo de código](#samples-lambda-code)

## Versão
<a name="samples-lambda-version"></a>

É possível usar o exemplo de código nesta página com o **Apache Airflow v2** no [Python 3.10](https://peps.python.org/pep-0619/) e o **Apache Airflow v3** no [Python 3.11](https://peps.python.org/pep-0664/).

## Pré-requisitos
<a name="samples-lambda-prereqs"></a>

Para usar esse exemplo de código, você deve:
+ Usar o [modo de acesso à rede pública](configuring-networking.md#webserver-options-public-network-onconsole) para seu ambiente [Amazon MWAA](get-started.md).
+ Ter uma [função do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html) usando o runtime mais recente do Python.

**nota**  
Se a função do Lambda e seu ambiente Amazon MWAA estiverem na mesma VPC, você poderá usar esse código em uma rede privada. Para essa configuração, o perfil de execução da função do Lambda precisa de permissão para chamar a operação da API **CreateNetworkInterface** do Amazon Elastic Compute Cloud (Amazon EC2). Você pode fornecer essa permissão usando a política [https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole$jsonEditor](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole$jsonEditor) AWS gerenciada.

## Permissões
<a name="samples-lambda-permissions"></a>

Para usar o exemplo de código nesta página, o perfil de execução do seu ambiente Amazon MWAA precisa de acesso para realizar a ação `airflow:CreateCliToken`. Você pode fornecer essa permissão usando a política `AmazonMWAAAirflowCliAccess` AWS-managed:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "airflow:CreateCliToken"
            ],
            "Resource": "*"
        }
    ]
}
```

------

Para obter mais informações, consulte [Política de CLI do Apache Airflow: Amazon MWAAAirflow CliAccess](access-policies.md#cli-access).

## Dependências
<a name="samples-lambda-dependencies"></a>

Para usar esse exemplo de código com o Apache Airflow v2 e versões posteriores, nenhuma dependência adicional é necessária. Use [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images)para instalar o Apache Airflow.

## Exemplo de código
<a name="samples-lambda-code"></a>

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

1. Escolha sua função do Lambda na lista **Funções**.

1. Na página da função, copie o código a seguir e substitua-o pelos nomes dos seus recursos:
   + `YOUR_ENVIRONMENT_NAME`: o nome do seu ambiente do Amazon MWAA.
   + `YOUR_DAG_NAME`: o nome do DAG que você deseja invocar.

   ```
   import boto3
   import http.client
   import base64
   import ast
   mwaa_env_name = 'YOUR_ENVIRONMENT_NAME'
   dag_name = 'YOUR_DAG_NAME'
   mwaa_cli_command = 'dags trigger'
   ​
   client = boto3.client('mwaa')
   ​
   def lambda_handler(event, context):
       # get web token
       mwaa_cli_token = client.create_cli_token(
           Name=mwaa_env_name
       )
       
       conn = http.client.HTTPSConnection(mwaa_cli_token['WebServerHostname'])
       payload = mwaa_cli_command + " " + dag_name
       headers = {
         'Authorization': 'Bearer ' + mwaa_cli_token['CliToken'],
         'Content-Type': 'text/plain'
       }
       conn.request("POST", "/aws_mwaa/cli", payload, headers)
       res = conn.getresponse()
       data = res.read()
       dict_str = data.decode("UTF-8")
       mydata = ast.literal_eval(dict_str)
       return base64.b64decode(mydata['stdout'])
   ```

1. Escolha **Implantar**.

1. Escolha **Testar** para invocar sua função usando o console Lambda.

1. Para verificar se seu Lambda invocou seu DAG com sucesso, use o console Amazon MWAA para navegar até a IU do Apache Airflow do seu ambiente e faça o seguinte:

   1. Na **DAGs**página, localize seu novo DAG de destino na lista de DAGs.

   1. Em **Última execução**, verifique a data e hora da última execução do DAG. Esse carimbo de data/hora deve ser semelhante ao carimbo de data/hora mais recente para `invoke_dag` em seu outro ambiente.

   1. Em **Tarefas recentes**, verifique se a última execução foi bem-sucedida.