Amazon MWAAでAirflow CLIを利用する

こんにちは。サービスグループの武田です。Amazon MWAAでは、一部制限はあるもののAirflow CLIのコマンドが実行できます。今回はその方法について確認してみました。
2021.07.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。サービスグループの武田です。

AWSのApache AirflowマネージドサービスであるAmazon MWAAでは、一部制限はあるもののAirflow CLIのコマンドが実行できます。今回はその方法について確認してみました。

検証環境

次のような環境で検証しています。

$ sw_vers
ProductName:	macOS
ProductVersion:	11.4
BuildVersion:	20F71

$ aws --version
aws-cli/2.1.10 Python/3.7.4 Darwin/20.5.0 exe/x86_64 prompt/off

$ jq --version
jq-1.6

またMWAAはAirflow 2.0.2で動かしています。

やってみた

前提として、MWAAではAirflow CLIのすべてのコマンドがサポートされているわけではありません。詳細はドキュメントに書かれているため、そちらを確認してください。このエントリを書いていて気付きましたが、サポートするコマンドが増えていました。定期的に確認するとよさそうです。

今回はAirflowのバージョンを取得するコマンドを実行してみます。

流れとしては、aws mwaa create-cli-tokenを実行して一時クレデンシャルを取得し、それを付けてWebサーバーにリクエストします。またWebサーバーのホスト名は事前に調べておくことも可能ですが、クレデンシャルと一緒に返ってくるためそれを利用すると簡単です。

実行する場合は、プロファイル名やMWAA環境名は自身の環境に合わせてください。

$ export AWS_DEFAULT_PROFILE=mwaa-profile
$ export AWS_DEFAULT_REGION=ap-northeast-1
$ MWAA_ENVIRONMENT=MwaaEnvironment
$ MWAA_COMMAND="version"

$ CLI_JSON=$(aws mwaa create-cli-token --name "$MWAA_ENVIRONMENT") \
  && 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 "$MWAA_COMMAND") \
  && echo "Output:" \
  && echo $CLI_RESULTS | jq -r '.stdout' | base64 --decode \
  && echo "Errors:" \
  && echo $CLI_RESULTS | jq -r '.stderr' | base64 --decode

Output:
2.0.2
Errors:

実行して結果を表示できました。レスポンスはBase64エンコードされているため、自前でデコードする必要があることに注意してください。

まとめ

変数や接続を追加する際に手作業は面倒だと思って調べたところCLIがサポートされていました。うまく活用することで運用を簡略化できそうです。皆さんもうまく使ってみてください。

参考サイト