

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Apache Airflow CLI トークンの作成
<a name="call-mwaa-apis-cli"></a>

**ヒント**  
REST API は CLI よりも最新で、外部システムとのプログラムによる統合用に設計されています。REST は、Apache Airflow と対話するための推奨される方法です。

このページのコマンドを使用して CLI トークンを生成し、Amazon Managed Workflows for Apache Airflow API 呼び出しをコマンドシェルで直接行うことができます。例えば、トークンを取得し、Amazon MWAA API を使用してプログラムで DAG をデプロイできます。次のセクションでは、AWS CLI、curl スクリプト、Python スクリプト、または bash スクリプトを使用して、 Apache Airflow CLI トークンを作成する手順について説明します。レスポンスでリターンされるトークンは 60 秒間有効です。

この AWS CLI トークンは同期シェルアクションの代わりとなるもので、非同期 API コマンドの代わりとなるものではありません。そのため、同時実行には制限があります。ウェブサーバーがユーザーに応答し続けるためには、前のリクエストが正常に完了するまで新しい AWS CLI リクエストを開かないことが推奨されます。

**Contents**
+ [前提条件](#call-mwaa-apis-cli-prereqs)
  + [アクセス](#access-airflow-ui-prereqs-access)
  + [AWS CLI](#access-airflow-ui-prereqs-cli)
+ [AWS CLI の使用](#create-cli-token-cli)
+ [curl スクリプトを使用する](#create-cli-token-curl)
+ [Bash スクリプトを使用する](#create-cli-token-bash)
+ [Python スクリプトを使用します](#create-cli-token-python)
+ [次のステップ](#mwaa-cli-next-up)

## 前提条件
<a name="call-mwaa-apis-cli-prereqs"></a>

以下のセクションでは、このページのコマンドとスクリプトを使用するために必要な準備手順について説明します。

### アクセス
<a name="access-airflow-ui-prereqs-access"></a>
+ Amazon MWAA アクセス許可ポリシー [Apache Airflow UI アクセスポリシー: AmazonMWAAWebServerAccess](access-policies.md#web-ui-access) への AWS Identity and Access Management (IAM) の AWS アカウント アクセス。
+ Amazon MWAA アクセス許可ポリシー [API とコンソールのフルアクセスポリシー: AmazonMWAAFullApiAccess](access-policies.md#full-access-policy) への AWS Identity and Access Management (IAM) の AWS アカウント アクセス。

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

AWS Command Line Interface (AWS CLI) は、コマンドラインシェルでコマンドを使用して AWS サービスとやり取りできるオープンソースツールです。このページのステップを完了するには、以下のものが必要です。
+ [AWS CLI - バージョン 2 のインストール](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)
+ [AWS CLI - `aws configure` によるクイック設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)

## AWS CLI の使用
<a name="create-cli-token-cli"></a>

次の例では、AWS CLI 内の [create-cli-token](https://docs.aws.amazon.com/cli/latest/reference/mwaa/create-cli-token.html) コマンドを使用して Apache Airflow CLI トークンを作成しています。

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

## curl スクリプトを使用する
<a name="create-cli-token-curl"></a>

次の例では、AWS CLI 内の curl スクリプトを使用して [create-web-login-token](https://docs.aws.amazon.com/cli/latest/reference/mwaa/create-cli-token.html) コマンドを呼び出し、Apache Airflow ウェブサーバ上のエンドポイントを通して Apache Airflow CLI を呼び出しています。

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

1. テキストファイルから curl ステートメントをコピーし、コマンドシェルに貼り付けます。
**注記**  
クリップボードにコピーしたら、シェルメニューから **[編集] > [貼り付け]** を使用する必要がある場合があります。

   ```
   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. お使いの環境に合わせて、{{赤色}} のプレースホルダーを AWS リージョン、`{{YOUR_DAG_NAME}}` および `{{YOUR_ENVIRONMENT_NAME}}` に置き換えてください。例えば、パブリックネットワークのホスト名は次のようになります *(https://を除く)*。

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

   コマンドプロンプトに次のように表示されます。

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

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

1. テキストファイルから curl ステートメントをコピーし、コマンドシェルに貼り付けます。
**注記**  
クリップボードにコピーしたら、シェルメニューから **[編集] > [貼り付け]** を使用する必要がある場合があります。

   ```
   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. お使いの環境に合わせて、{{赤色}} のプレースホルダーを AWS リージョン、`YOUR_DAG_NAME` および `YOUR_ENVIRONMENT_NAME` に置き換えてください。例えば、パブリックネットワークのホスト名は次のようになります *(https://を除く)*。

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

   コマンドプロンプトに次のように表示されます。

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

------

## Bash スクリプトを使用する
<a name="create-cli-token-bash"></a>

次の例では、bash スクリプトを使用して AWS CLI 内の[create-cli-token](https://docs.aws.amazon.com/cli/latest/reference/mwaa/create-cli-token.html) コマンドを呼び出し、Apache Airflow CLI トークンを作成しています。

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

1. 以下のコードサンプルの内容をコピーし、ローカルに `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. {{赤色}} のプレースホルダーを、`YOUR_ENVIRONMENT_NAME`、`YOUR_HOST_NAME` および `YOUR_DAG_NAME` に置き換えます。例えば、パブリックネットワークのホスト名は次のようになります *(https://を除く)*。

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

1. (オプション) macOS と Linux ユーザーは、次のコマンドを実行して、スクリプトが実行可能であることを確認しなければならないことがあります。

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

1. 次のスクリプトを実行して、Apache Airflow CLI トークンを作成します。

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

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

1. 以下のコードサンプルの内容をコピーし、ローカルに `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. {{赤色}} のプレースホルダーを、`YOUR_ENVIRONMENT_NAME`、`YOUR_HOST_NAME` および `YOUR_DAG_NAME` に置き換えます。例えば、パブリックネットワークのホスト名は次のようになります *(https://を除く)*。

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

1. (オプション) macOS と Linux ユーザーは、次のコマンドを実行して、スクリプトが実行可能であることを確認しなければならないことがあります。

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

1. 次のスクリプトを実行して、Apache Airflow CLI トークンを作成します。

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

------

## Python スクリプトを使用します
<a name="create-cli-token-python"></a>

次の例では、Python スクリプトで [boto3 create\_cli\_token](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/mwaa.html#MWAA.Client.create_cli_token) メソッドを使用して Apache Airflow CLI トークンを作成し、DAG をトリガーします。このスクリプトは、Amazon MWAA の外部で実行できます。必要なことは、boto3 ライブラリをインストールすることだけです。ライブラリをインストールするための仮想環境を作成することもできます。アカウントに対して[AWS の認証資格情報](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#configuration) を設定していると仮定しています。

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

1. 以下のコードサンプルの内容をコピーし、ローカルに `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. プレースホルダーを `YOUR_ENVIRONMENT_NAME` と `YOUR_DAG_NAME` に置き換えます。

1. 次のスクリプトを実行して、Apache Airflow CLI トークンを作成します。

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

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

1. 以下のコードサンプルの内容をコピーし、ローカルに `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. プレースホルダーを `YOUR_ENVIRONMENT_NAME` と `YOUR_DAG_NAME` に置き換えます。

1. 次のスクリプトを実行して、Apache Airflow CLI トークンを作成します。

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

------

## 次のステップ
<a name="mwaa-cli-next-up"></a>
+ [CreateClitoken](https://docs.aws.amazon.com/mwaa/latest/API/API_CreateCliToken.html) で CLI トークンの作成に使用された Amazon MWAA API オペレーションをご覧ください。