

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Invocation DAGs avec une fonction Lambda
<a name="samples-lambda"></a>

L'exemple de code suivant utilise une [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)fonction pour obtenir un jeton CLI Apache Airflow et invoquer un graphe acyclique dirigé (DAG) dans un environnement Amazon MWAA.

**Topics**
+ [Version](#samples-lambda-version)
+ [Conditions préalables](#samples-lambda-prereqs)
+ [Permissions](#samples-lambda-permissions)
+ [Dépendances](#samples-lambda-dependencies)
+ [Exemple de code](#samples-lambda-code)

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

[Vous pouvez utiliser l'exemple de code présenté sur cette page avec **Apache Airflow v2** en [Python 3.10](https://peps.python.org/pep-0619/) et **Apache Airflow v3** en Python 3.11.](https://peps.python.org/pep-0664/)

## Conditions préalables
<a name="samples-lambda-prereqs"></a>

Pour utiliser cet exemple de code, vous devez :
+ Utilisez le [mode d'accès au réseau public](configuring-networking.md#webserver-options-public-network-onconsole) pour votre [environnement Amazon MWAA.](get-started.md)
+ Utilisez une [fonction Lambda utilisant le dernier](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html) environnement d'exécution Python.

**Note**  
Si la fonction Lambda et votre environnement Amazon MWAA se trouvent dans le même VPC, vous pouvez utiliser ce code sur un réseau privé. Pour cette configuration, le rôle d'exécution de la fonction Lambda doit être autorisé à appeler l'opération d'API Amazon Elastic Compute Cloud (Amazon EC2)**CreateNetworkInterface**. Vous pouvez fournir cette autorisation à l'aide de la politique [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-managed.

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

Pour utiliser l'exemple de code présenté sur cette page, le rôle d'exécution de votre environnement Amazon MWAA doit avoir accès pour effectuer l'`airflow:CreateCliToken`action. Vous pouvez fournir cette autorisation à l'aide de la politique `AmazonMWAAAirflowCliAccess` AWS-managed :

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

****  

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

------

Pour plus d’informations, consultez [Politique de la CLI Apache Airflow : Amazon MWAAAirflow CliAccess](access-policies.md#cli-access).

## Dépendances
<a name="samples-lambda-dependencies"></a>

Pour utiliser cet exemple de code avec Apache Airflow v2 et versions ultérieures, aucune dépendance supplémentaire n'est requise. [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images)À utiliser pour installer Apache Airflow.

## Exemple de code
<a name="samples-lambda-code"></a>

1. Ouvrez la AWS Lambda console à l'adresse [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Choisissez votre fonction Lambda dans la liste des **fonctions**.

1. Sur la page des fonctions, copiez le code suivant et remplacez-le par le nom de vos ressources :
   + `YOUR_ENVIRONMENT_NAME`— Le nom de votre environnement Amazon MWAA.
   + `YOUR_DAG_NAME`— Le nom du DAG que vous souhaitez invoquer.

   ```
   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. Choisissez **Déployer**.

1. Choisissez **Test** pour appeler votre fonction à l'aide de la console Lambda.

1. Pour vérifier que votre Lambda a correctement appelé votre DAG, utilisez la console Amazon MWAA pour accéder à l'interface utilisateur Apache Airflow de votre environnement, puis procédez comme suit :

   1. Sur la **DAGs**page, localisez votre nouveau DAG cible dans la liste des DAGs.

   1. Sous **Dernière exécution**, vérifiez l'horodatage de la dernière exécution du DAG. Cet horodatage doit correspondre étroitement à l'horodatage le plus récent de votre autre `invoke_dag` environnement.

   1. Sous **Tâches récentes**, vérifiez que la dernière exécution a été réussie.