

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Invocare DAGs con una funzione Lambda
<a name="samples-lambda"></a>

Il seguente esempio di codice utilizza una [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)funzione per ottenere un token CLI Apache Airflow e richiamare un grafo aciclico diretto (DAG) in un ambiente Amazon MWAA.

**Topics**
+ [Versione](#samples-lambda-version)
+ [Prerequisiti](#samples-lambda-prereqs)
+ [Permissions](#samples-lambda-permissions)
+ [Dipendenze](#samples-lambda-dependencies)
+ [Esempio di codice](#samples-lambda-code)

## Versione
<a name="samples-lambda-version"></a>

**[È possibile utilizzare l'esempio di codice in questa pagina con **Apache Airflow v2 in Python 3.10 e Apache Airflow v3**[in Python 3.11](https://peps.python.org/pep-0619/).](https://peps.python.org/pep-0664/)**

## Prerequisiti
<a name="samples-lambda-prereqs"></a>

Per utilizzare questo esempio di codice, devi:
+ Usa la [modalità di accesso alla rete pubblica](configuring-networking.md#webserver-options-public-network-onconsole) per il tuo ambiente [Amazon MWAA](get-started.md).
+ Disponi di una [funzione Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html) che utilizzi l'ultimo runtime di Python.

**Nota**  
Se la funzione Lambda e l'ambiente Amazon MWAA si trovano nello stesso VPC, puoi usare questo codice su una rete privata. Per questa configurazione, il ruolo di esecuzione della funzione Lambda richiede l'autorizzazione per chiamare l'operazione dell'API Amazon Elastic Compute Cloud (Amazon EC2). **CreateNetworkInterface** Puoi fornire questa autorizzazione utilizzando la policy -managed. [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

## Permissions
<a name="samples-lambda-permissions"></a>

Per utilizzare l'esempio di codice in questa pagina, il ruolo di esecuzione del tuo ambiente Amazon MWAA deve avere accesso per eseguire l'azione`airflow:CreateCliToken`. Puoi fornire questa autorizzazione utilizzando la policy `AmazonMWAAAirflowCliAccess` AWS-managed:

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

****  

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

------

Per ulteriori informazioni, vedi [Politica della CLI di Apache Airflow: Amazon MWAAAirflow CliAccess](access-policies.md#cli-access).

## Dipendenze
<a name="samples-lambda-dependencies"></a>

Per utilizzare questo esempio di codice con Apache Airflow v2 e versioni successive, non sono necessarie dipendenze aggiuntive. Utilizzare [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images)per installare Apache Airflow.

## Esempio di codice
<a name="samples-lambda-code"></a>

1. Apri la AWS Lambda console all'indirizzo. [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)

1. Scegli la tua funzione Lambda dall'elenco **Funzioni**.

1. Nella pagina della funzione, copia il codice seguente e sostituiscilo con i nomi delle tue risorse:
   + `YOUR_ENVIRONMENT_NAME`— Il nome del tuo ambiente Amazon MWAA.
   + `YOUR_DAG_NAME`— Il nome del DAG che desideri richiamare.

   ```
   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. Seleziona **Implementa**.

1. Scegli **Test** per richiamare la tua funzione utilizzando la console Lambda.

1. Per verificare che Lambda abbia richiamato correttamente il DAG, utilizza la console Amazon MWAA per accedere all'interfaccia utente Apache Airflow del tuo ambiente, quindi procedi come segue:

   1. Nella **DAGs**pagina, individua il nuovo DAG di destinazione nell'elenco di. DAGs

   1. In **Ultima esecuzione**, controllate il timestamp dell'ultima esecuzione del DAG. Questo timestamp deve corrispondere molto da vicino al timestamp più recente utilizzato nell'altro ambiente. `invoke_dag`

   1. In **Attività recenti**, verifica che l'ultima esecuzione sia andata a buon fine.