

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Creación de un token de la CLI de Apache Airflow
<a name="call-mwaa-apis-cli"></a>

**sugerencia**  
La API REST es más moderna que la CLI y está diseñada para la integración programática con sistemas externos. REST es la forma preferida de interactuar con Apache Airflow.

Puede usar los comandos de esta página para generar un token de para la CLI y, a continuación, realizar llamadas a la API de Amazon Managed Workflows para Apache Airflow directamente en el shell de comandos. Por ejemplo, puede obtener un token y, a continuación, implementar los DAG mediante programación con las API de Amazon MWAA. La sección siguiente detalla los pasos para crear un token de la CLI de Apache Airflow mediante la AWS CLI, un script de cURL, de Python o de bash. El token devuelto en la respuesta es válido durante 60 segundos.

El token de la AWS CLI pretende sustituir a las acciones sincrónicas del shell, no a los comandos de API asíncronos. Por lo tanto, la simultaneidad disponible es limitada. Para garantizar que el servidor web responda a los usuarios, se recomienda no abrir solicitudes nuevas de la AWS CLI hasta que la anterior se complete correctamente.

**Contents**
+ [Requisitos previos](#call-mwaa-apis-cli-prereqs)
  + [Acceso](#access-airflow-ui-prereqs-access)
  + [AWS CLI](#access-airflow-ui-prereqs-cli)
+ [Uso de AWS CLI](#create-cli-token-cli)
+ [Uso de un script de cURL](#create-cli-token-curl)
+ [Uso de un script de bash](#create-cli-token-bash)
+ [Uso de un script de Python](#create-cli-token-python)
+ [Siguientes pasos](#mwaa-cli-next-up)

## Requisitos previos
<a name="call-mwaa-apis-cli-prereqs"></a>

En la siguiente sección se describen los pasos preliminares necesarios para utilizar los comandos y scripts de esta página.

### Acceso
<a name="access-airflow-ui-prereqs-access"></a>
+ Acceso de la Cuenta de AWS en AWS Identity and Access Management (IAM) a la política de permisos de Amazon MWAA en [Política de acceso a la interfaz de usuario de Apache Airflow: Amazon MWAAWeb ServerAccess](access-policies.md#web-ui-access).
+ Acceso de la Cuenta de AWS en AWS Identity and Access Management (IAM) a la política de permisos [Política completa de acceso a la consola y a la API: Amazon MWAAFull ApiAccess](access-policies.md#full-access-policy) de Amazon MWAA.

### AWS CLI
<a name="access-airflow-ui-prereqs-cli"></a>

La AWS Command Line Interface (AWS CLI) es una herramienta de código abierto que le permite interactuar con los servicios de AWS mediante el uso de comandos en el shell de la línea de comandos. Para completar los pasos de esta página, necesita lo siguiente:
+ [AWS CLI: instalar la versión 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html).
+ [AWS CLI: configuración rápida con `aws configure`](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).

## Uso de AWS CLI
<a name="create-cli-token-cli"></a>

El ejemplo que sigue usa el comando [create-cli-token](https://docs.aws.amazon.com/cli/latest/reference/mwaa/create-cli-token.html) en la AWS CLI para crear un token de la CLI de Apache Airflow.

```
aws mwaa create-cli-token --name {{YOUR_ENVIRONMENT_NAME}}
```

## Uso de un script de cURL
<a name="create-cli-token-curl"></a>

En el siguiente ejemplo, se usa un script de cURL para llamar al comando [create-web-login-token](https://docs.aws.amazon.com/cli/latest/reference/mwaa/create-cli-token.html) en la AWS CLI para invocar la CLI de Apache Airflow a través de un punto de conexión del servidor web de Apache Airflow.

------
#### [ Apache Airflow v3 ]

1. Copie la instrucción de cURL del archivo de texto y péguela en el shell de comandos.
**nota**  
Tras copiarla en el portapapeles, puede que tenga que usar **Edit > Paste** (Editar > Pegar) en el menú del 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
   ```

1. Sustituya los marcadores de posición {{rojos}} por la región de su entorno, `{{YOUR_DAG_NAME}}` y `{{YOUR_ENVIRONMENT_NAME}}`. Por ejemplo, el nombre de host de una red pública tiene este aspecto (sin el *https://)*:

   ```
   123456a0-0101-2020-9e11-1b159eec9000.c2.{{us-east-1}}.airflow.amazonaws.com
   ```

   La línea de comandos muestra lo siguiente:

   ```
   {
     "stderr":"<STDERR of the CLI execution (if any), base64 encoded>",
     "stdout":"<STDOUT of the CLI execution, base64 encoded>"
   }
   ```

------
#### [ Apache Airflow v2 ]

1. Copie la instrucción de cURL del archivo de texto y péguela en el shell de comandos.
**nota**  
Tras copiarla en el portapapeles, puede que tenga que usar **Edit > Paste** (Editar > Pegar) en el menú del 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
   ```

1. Sustituya los marcadores de posición {{rojos}} por la región de su entorno, `YOUR_DAG_NAME` y `YOUR_ENVIRONMENT_NAME`. Por ejemplo, el nombre de host de una red pública tiene este aspecto (sin el *https://)*:

   ```
   123456a0-0101-2020-9e11-1b159eec9000.c2.{{us-east-1}}.airflow.amazonaws.com
   ```

   La línea de comandos muestra lo siguiente:

   ```
   {
     "stderr":"<STDERR of the CLI execution (if any), base64 encoded>",
     "stdout":"<STDOUT of the CLI execution, base64 encoded>"
   }
   ```

------

## Uso de un script de bash
<a name="create-cli-token-bash"></a>

El siguiente ejemplo usa un script de bash para llamar al comando [create-cli-token](https://docs.aws.amazon.com/cli/latest/reference/mwaa/create-cli-token.html) en la AWS CLI para crear un token CLI de Apache Airflow.

------
#### [ Apache Airflow v3 ]

1. Copie el contenido del código de ejemplo siguiente y guárdelo localmente como `get-cli-token.sh`.

   ```
   # brew install jq
   								aws mwaa create-cli-token --name {{YOUR_ENVIRONMENT_NAME}} | export CLI_TOKEN=$(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")"
   ```

1. Sustituya los marcadores de posición en {{rojo}} por `YOUR_ENVIRONMENT_NAME`, `YOUR_HOST_NAME` y `YOUR_DAG_NAME`. Por ejemplo, el nombre de host de una red pública tiene este aspecto (sin el *https://)*:

   ```
   123456a0-0101-2020-9e11-1b159eec9000.c2.{{us-east-1}}.airflow.amazonaws.com
   ```

1. (Opcional) Es posible que los usuarios de macOS y Linux tengan que ejecutar el siguiente comando para verificar que el script sea ejecutable.

   ```
   chmod +x get-cli-token.sh
   ```

1. Ejecute el script siguiente para crear un token de la CLI de Apache Airflow.

   ```
   ./get-cli-token.sh
   ```

------
#### [ Apache Airflow v2 ]

1. Copie el contenido del código de ejemplo siguiente y guárdelo localmente como `get-cli-token.sh`.

   ```
   # brew install jq
   aws mwaa create-cli-token --name {{YOUR_ENVIRONMENT_NAME}} | export CLI_TOKEN=$(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}}"
   ```

1. Sustituya los marcadores de posición en {{rojo}} por `YOUR_ENVIRONMENT_NAME`, `YOUR_HOST_NAME` y `YOUR_DAG_NAME`. Por ejemplo, el nombre de host de una red pública tiene este aspecto (sin el *https://)*:

   ```
   123456a0-0101-2020-9e11-1b159eec9000.c2.{{us-east-1}}.airflow.amazonaws.com
   ```

1. (Opcional) Es posible que los usuarios de macOS y Linux tengan que ejecutar el siguiente comando para verificar que el script sea ejecutable.

   ```
   chmod +x get-cli-token.sh
   ```

1. Ejecute el script siguiente para crear un token de la CLI de Apache Airflow.

   ```
   ./get-cli-token.sh
   ```

------

## Uso de un script de Python
<a name="create-cli-token-python"></a>

El siguiente ejemplo utiliza el método [boto3 create\_cli\_token](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/mwaa.html#MWAA.Client.create_cli_token) en un script de Python para crear un token de la CLI de Apache Airflow y activar un DAG. Puede ejecutar este script fuera de Amazon MWAA. Para ello, solo tiene que instalar la biblioteca boto3. Es posible que deba crear un entorno virtual para instalar la biblioteca. Se supone que ha [configurado las credenciales de autenticación de AWS](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#configuration) para su cuenta.

------
#### [ Apache Airflow v3 ]

1. Copie el contenido del código de ejemplo siguiente y guárdelo localmente como `create-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)
   ```

1. Sustituya los marcadores de posición por `YOUR_ENVIRONMENT_NAME` y `YOUR_DAG_NAME`.

1. Ejecute el script siguiente para crear un token de la CLI de Apache Airflow.

   ```
   python3 create-cli-token.py
   ```

------
#### [ Apache Airflow v2 ]

1. Copie el contenido del código de ejemplo siguiente y guárdelo localmente como `create-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)
   ```

1. Sustituya los marcadores de posición por `YOUR_ENVIRONMENT_NAME` y `YOUR_DAG_NAME`.

1. Ejecute el script siguiente para crear un token de la CLI de Apache Airflow.

   ```
   python3 create-cli-token.py
   ```

------

## Siguientes pasos
<a name="mwaa-cli-next-up"></a>
+ Analice la operación de la API de Amazon MWAA utilizada para crear un token de la CLI de en [CreateCliToken](https://docs.aws.amazon.com/mwaa/latest/API/API_CreateCliToken.html).