LoginSignup
0
0

More than 3 years have passed since last update.

AirflowのSecrets Backendsを読み解く

Last updated at Posted at 2021-03-05
  • 個人的に調べたのでメモ

Airflow Secrets Backendsとは

Airflowが利用する設定周り、Config、Variables、ConnectionsをAirflow外部で管理するための機能
管理画面からは見れない、実行時に毎回取りにいく形になる

AWSをSecrets Backendsとして調べてみた

AWSの外部接続サービスとして、SSMとSecretsManagerが用意されている。

利用可能バージョンは、SSMは1.10.10、SecretsManagerは1.10.11から可能となります。

利点

  • 管理画面、Airflow CLIなどで毎回設定を追加しなくて良くなる
    • 一つのリポジトリを複数人で開発する場合、追加、変更を意識する必要がなくなる

欠点

  • Secretの管理費、取得回数による費用が増える
    • AWS料金表
    • 一ヶ月使った例
      • Connection 10 個 (シークレット 10 × 0.40/month = 4$)
      • 一日1000回 API (コール 1000 × 30 × 0.40/10000コール = 1.2$)
      • 合計 5.2$

設定方法

airflow.cfgの設定(Airflow1.10.10以降の場合)

SecretsManager(1.10.11)を利用する場合は以下のように設定

[secrets]
backend = airflow.contrib.secrets.aws_secrets_manager.SecretsManagerBackend
backend_kwargs = {"connections_prefix": "airflow/connections", "profile_name": "default"}
  • connections_prefix
    • default: airflow/connections
    • SecretsManagerのシークレット名のprefixを設定する
    • SecretsManager側では、airflow/connections/{connection name} として設定する
    • 呼び出し側では、aws_hook(などのhook)の引数としてaws_conn_idに{connection name}を設定してと実行する
    • 実行時に、airflow/connections/{connection name}でprofile_nameのアカウントから値を取得して利用することができる
  • profile_name
    • default: None
    • SecretsManagerで値を取りに行くアカウント情報
    • なければ環境変数、インスタンスロールとか見に行くはず
  • variables_prefix
    • default: airflow/variables
    • 試してないのでコード参照

airflow.cfgの設定(Airflow2系の場合)(試してはいない)

Airflow SecretsManagerを利用する場合は以下のように設定

[secrets]
backend = airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend #ここのproviderのパッケージの位置が2.0から変更されている
backend_kwargs = {"connections_prefix": "airflow/connections", "profile_name": "default"}

SecretsManager側の設定

  • airflow.cfgの[secrets]で設定されたアカウントのSecretsManagerにairflow/connections/{connection name}のシークレット名でSecretsValueを登録する
  • SecretsValue
    • プレーンテキストで、URI形式で記述する必要がある(キー、バリューでは設定できない)
    • Connection-TypeがAWSの場合(アクセスキーシークレットキーの場合、最後@を忘れずに)
      • aws://AKIAIRI1111111111:xxxxxsxadgfasdgsdfgofdsgfa@
    • Connection-TypeがAWSの場合(AssumeRoleを利用する場合(Extraの使い方))
      • aws://?role_arn=arn%3Aaws%3Aiam%3A%3A240057002457%3Arole%2FWebIdentity-Role

最後に

  • 思ったほど参考となる資料がなかった
  • 設定をみるとわかるようにConnectionsしか確認していない
  • Configを状況に応じて変更する運用などが見えてきていない
  • 個人メモなので間違いあれば指摘ください

参考資料

Apache Airflow
AWS

コード

SecretsManagerのSecret Backendsの仕組み
Connection-TypeAWSの仕組み

設定

SecretsManagerのSecretsValueの設定例

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0