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.
Création d'un jeton d'interface de ligne de commande Apache Airflow
L'API REST est plus moderne que la CLI et est conçue pour une intégration programmatique avec des systèmes externes. REST est la méthode préférée pour interagir avec Apache Airflow.
Vous pouvez utiliser les commandes de cette page pour générer un jeton CLI, puis effectuer des appels d'API Amazon Managed Workflows pour Apache Airflow directement dans votre interface de commande. Par exemple, vous pouvez obtenir un jeton, puis déployer des DAG par programmation à l'aide des API Amazon MWAA. La section suivante décrit les étapes à suivre pour créer un jeton d'interface de ligne de commande Apache Airflow à l' AWS CLI aide d'un script curl, d'un script Python ou d'un script bash. Le jeton renvoyé dans la réponse est valide pendant 60 secondes.
Le AWS CLI jeton est destiné à remplacer les actions synchrones du shell, et non les commandes d'API asynchrones. Par conséquent, la simultanéité disponible est limitée. Pour garantir que le serveur Web reste réactif pour les utilisateurs, nous vous recommandons de ne pas ouvrir de nouvelle AWS CLI demande tant que la précédente n'a pas été traitée correctement.
Conditions préalables
La section suivante décrit les étapes préliminaires requises pour utiliser les commandes et les scripts de cette page.
Accès
AWS CLI
Le AWS Command Line Interface (AWS CLI) est un outil open source que vous pouvez utiliser pour interagir avec les AWS services à l'aide des commandes de votre shell de ligne de commande. Pour effectuer les étapes de cette page, vous devez disposer des éléments suivants :
Utilisation de AWS CLI
L'exemple suivant utilise la commande create-cli-token dans le AWS CLI pour créer un jeton d'interface de ligne de commande Apache Airflow.
aws mwaa create-cli-token --name YOUR_ENVIRONMENT_NAME
Utilisation d'un script curl
Utilisez le script curl suivant pour appeler la commande create-cli-token dans le AWS CLI pour invoquer la CLI Apache Airflow via un point de terminaison sur le serveur Web Apache Airflow et déclencher un DAG.
- Apache Airflow v3
-
-
Copiez l'instruction curl depuis votre fichier texte et collez-la dans votre interface de commande.
Après l'avoir copié dans votre presse-papiers, vous devrez peut-être utiliser Edition > Coller dans le menu de votre shell.
CLI_JSON=$(aws mwaa --region us-east-1 create-cli-token --name YOUR_ENVIRONMENT_NAME) \
&& CLI_TOKEN=$(echo $CLI_JSON | jq -r '.CliToken') \
&& WEB_SERVER_HOSTNAME=$(echo $CLI_JSON | jq -r '.WebServerHostname') \
&& CLI_RESULTS=$(curl -L --request POST "https://$WEB_SERVER_HOSTNAME/aws_mwaa/cli" \
--header "Authorization: Bearer $CLI_TOKEN" \
--header "Content-Type: text/plain" \
--data-raw "dags trigger YOUR_DAG_NAME --logical-date $(date -u +"%Y-%m-%dT%H:%M:%SZ")") \
&& echo "Output:" \
&& echo $CLI_RESULTS | jq -r '.stdout' | base64 --decode \
&& echo "Errors:" \
&& echo $CLI_RESULTS | jq -r '.stderr' | base64 --decode
-
YOUR_DAG_NAMERemplacez-le par le nom de votre DAG, YOUR_ENVIRONMENT_NAME par le nom de votre environnement et Région AWS par la région de votre environnement. Par exemple, le nom d'hôte d'un réseau public ressemble (sans le https ://) :
123456a0-0101-2020-9e11-1b159eec9000.c2.us-east-1.airflow.amazonaws.com
Votre invite de commande affiche :
{
"stderr":"<STDERR of the CLI execution (if any), base64 encoded>",
"stdout":"<STDOUT of the CLI execution, base64 encoded>"
}
- Apache Airflow v2
-
-
Copiez l'instruction curl depuis votre fichier texte et collez-la dans votre interface de commande.
Après l'avoir copié dans votre presse-papiers, vous devrez peut-être utiliser Edition > Coller dans le menu de votre shell.
CLI_JSON=$(aws mwaa --region us-east-1 create-cli-token --name YOUR_ENVIRONMENT_NAME) \
&& CLI_TOKEN=$(echo $CLI_JSON | jq -r '.CliToken') \
&& WEB_SERVER_HOSTNAME=$(echo $CLI_JSON | jq -r '.WebServerHostname') \
&& CLI_RESULTS=$(curl --request POST "https://$WEB_SERVER_HOSTNAME/aws_mwaa/cli" \
--header "Authorization: Bearer $CLI_TOKEN" \
--header "Content-Type: text/plain" \
--data-raw "dags trigger YOUR_DAG_NAME") \
&& echo "Output:" \
&& echo $CLI_RESULTS | jq -r '.stdout' | base64 --decode \
&& echo "Errors:" \
&& echo $CLI_RESULTS | jq -r '.stderr' | base64 --decode
-
YOUR_DAG_NAMERemplacez-le par le nom de votre DAG, YOUR_ENVIRONMENT_NAME par le nom de votre environnement et Région AWS par la région de votre environnement. Par exemple, le nom d'hôte d'un réseau public ressemble (sans le https ://) :
123456a0-0101-2020-9e11-1b159eec9000.c2.us-east-1.airflow.amazonaws.com
Votre invite de commande affiche :
{
"stderr":"<STDERR of the CLI execution (if any), base64 encoded>",
"stdout":"<STDOUT of the CLI execution, base64 encoded>"
}
Utilisation d'un script bash
Utilisez le script bash suivant pour appeler la commande create-cli-token dans le AWS CLI, créer un jeton d'interface de ligne de commande Apache Airflow et déclencher un DAG.
- Apache Airflow v3
-
-
Copiez le contenu de l'exemple de code suivant et enregistrez-le localement sousget-cli-token.sh.
# brew install jq
CLI_TOKEN=$(aws mwaa create-cli-token --name YOUR_ENVIRONMENT_NAME | jq -r '.CliToken') \
&& curl -L --request POST "https://YOUR_HOST_NAME/aws_mwaa/cli" \
--header "Authorization: Bearer $CLI_TOKEN" \
--header "Content-Type: text/plain" \
--data-raw "dags trigger YOUR_DAG_NAME --logical-date $(date -u +"%Y-%m-%dT%H:%M:%SZ")"
-
Remplacez-le YOUR_ENVIRONMENT_NAME par le nom de votre environnement, YOUR_HOST_NAME par le nom d'hôte de votre serveur Web et YOUR_DAG_NAME par le nom de votre DAG. Par exemple, le nom d'hôte d'un réseau public ressemble (sans le https ://) :
123456a0-0101-2020-9e11-1b159eec9000.c2.us-east-1.airflow.amazonaws.com
(facultatif) Les utilisateurs de macOS et Linux peuvent avoir besoin d'exécuter la commande suivante pour s'assurer que le script est exécutable.
chmod +x get-cli-token.sh
-
Exécutez le script suivant pour créer un jeton d'interface de ligne de commande Apache Airflow.
./get-cli-token.sh
- Apache Airflow v2
-
-
Copiez le contenu de l'exemple de code suivant et enregistrez-le localement sousget-cli-token.sh.
# brew install jq
CLI_TOKEN=$(aws mwaa create-cli-token --name YOUR_ENVIRONMENT_NAME | jq -r '.CliToken') \
&& curl --request POST "https://YOUR_HOST_NAME/aws_mwaa/cli" \
--header "Authorization: Bearer $CLI_TOKEN" \
--header "Content-Type: text/plain" \
--data-raw "dags trigger YOUR_DAG_NAME"
-
Remplacez-le YOUR_ENVIRONMENT_NAME par le nom de votre environnement, YOUR_HOST_NAME par le nom d'hôte de votre serveur Web et YOUR_DAG_NAME par le nom de votre DAG. Par exemple, le nom d'hôte d'un réseau public ressemble (sans le https ://) :
123456a0-0101-2020-9e11-1b159eec9000.c2.us-east-1.airflow.amazonaws.com
-
(facultatif) Les utilisateurs de macOS et Linux peuvent exécuter la commande suivante pour s'assurer que le script est exécutable.
chmod +x get-cli-token.sh
-
Exécutez le script suivant pour créer un jeton d'interface de ligne de commande Apache Airflow.
./get-cli-token.sh
Utilisation d'un script Python
L'exemple suivant utilise la méthode boto3 create_cli_token dans un script Python pour créer un jeton d'interface de ligne de commande Apache Airflow et déclencher un DAG. Vous pouvez exécuter ce script en dehors d'Amazon MWAA. La seule chose à faire est d'installer la bibliothèque boto3. Vous souhaiterez peut-être créer un environnement virtuel pour installer la bibliothèque. Cela suppose que vous avez configuré les informations d' AWS authentification pour votre compte.
- Apache Airflow v3
-
-
Copiez le contenu de l'exemple de code suivant et enregistrez-le localement souscreate-cli-token.py.
"""
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
"""
import boto3
import json
import requests
import base64
mwaa_env_name = 'YOUR_ENVIRONMENT_NAME'
dag_name = 'YOUR_DAG_NAME'
mwaa_cli_command = 'dags trigger'
client = boto3.client('mwaa')
mwaa_cli_token = client.create_cli_token(
Name=mwaa_env_name
)
mwaa_auth_token = 'Bearer ' + mwaa_cli_token['CliToken']
mwaa_webserver_hostname = 'https://{0}/aws_mwaa/cli'.format(mwaa_cli_token['WebServerHostname'])
raw_data = '{0} {1}'.format(mwaa_cli_command, dag_name)
mwaa_response = requests.post(
mwaa_webserver_hostname,
headers={
'Authorization': mwaa_auth_token,
'Content-Type': 'text/plain'
},
data=raw_data
)
mwaa_std_err_message = base64.b64decode(mwaa_response.json()['stderr']).decode('utf8')
mwaa_std_out_message = base64.b64decode(mwaa_response.json()['stdout']).decode('utf8')
print(mwaa_response.status_code)
print(mwaa_std_err_message)
print(mwaa_std_out_message)
-
Remplacez et par les espaces réservésYOUR_ENVIRONMENT_NAME. YOUR_DAG_NAME
-
Exécutez le script suivant pour créer un jeton d'interface de ligne de commande Apache Airflow.
python3 create-cli-token.py
- Apache Airflow v2
-
-
Copiez le contenu de l'exemple de code suivant et enregistrez-le localement souscreate-cli-token.py.
"""
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
"""
import boto3
import json
import requests
import base64
mwaa_env_name = 'YOUR_ENVIRONMENT_NAME'
dag_name = 'YOUR_DAG_NAME'
mwaa_cli_command = 'dags trigger'
client = boto3.client('mwaa')
mwaa_cli_token = client.create_cli_token(
Name=mwaa_env_name
)
mwaa_auth_token = 'Bearer ' + mwaa_cli_token['CliToken']
mwaa_webserver_hostname = 'https://{0}/aws_mwaa/cli'.format(mwaa_cli_token['WebServerHostname'])
raw_data = '{0} {1}'.format(mwaa_cli_command, dag_name)
mwaa_response = requests.post(
mwaa_webserver_hostname,
headers={
'Authorization': mwaa_auth_token,
'Content-Type': 'text/plain'
},
data=raw_data
)
mwaa_std_err_message = base64.b64decode(mwaa_response.json()['stderr']).decode('utf8')
mwaa_std_out_message = base64.b64decode(mwaa_response.json()['stdout']).decode('utf8')
print(mwaa_response.status_code)
print(mwaa_std_err_message)
print(mwaa_std_out_message)
-
Remplacez et par les espaces réservésYOUR_ENVIRONMENT_NAME. YOUR_DAG_NAME
-
Exécutez le script suivant pour créer un jeton d'interface de ligne de commande Apache Airflow.
python3 create-cli-token.py
Quelle est la prochaine étape ?