1
0

More than 1 year has passed since last update.

AWS MWAA (Amazon Managed Workflows for Apache Airflow) にてSecrets Managerに配置した環境変数を参照する

Last updated at Posted at 2022-03-13

はじめに

MWAA内部で使用する秘匿したい環境変数は、Secrets Managerに配置して管理すると安全に利用することができます。
今回はその配置・参照の方法についてまとめていきます。

以下の記事でGCPなど別リソースへの接続情報の配置について同様の方法でまとめてあるので、必要であればこちらも確認してみてください。

※ MWAAで使用するAirflowのバージョンは2.2.2である前提で進めます。

やってみる

今回は、以下の手順で進めて行きます。

  1. MWAAを作成するCloudFormationテンプレートにSecrets Managerを環境変数として参照する設定追記
  2. Secrets Managerに秘匿情報を格納
  3. 実際に参照する
  4. json形式で1つのシークレットに対して複数の環境変数を参照する
  5. jinjaテンプレート形式での展開

MWAAを作成するCloudFormationテンプレートにSecrets Managerを環境変数として参照する設定追記

まずは公式ドキュメントの通りにSecrets Managerを参照先として利用するための設定をしていきます。

リソースはCloudFormationによって作成するので、クイックスタートチュートリアルのテンプレートをもとに、template.yamlに以下の部分を追記します。

  
  
  
  #####################################################################################################################
  # CREATE MWAA
  #####################################################################################################################

  MwaaEnvironment:
    Type: AWS::MWAA::Environment
    DependsOn: MwaaExecutionPolicy
    Properties:
      AirflowConfigurationOptions:  # 追記
        secrets.backend: airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend  # 追記
        secrets.backend_kwargs:  # 追記
          variables_prefix: "airflow/variables"  # 追記
  
  
  

これによってSecrets Managerに配置されたairflow/variablesがprefixの環境変数をMWAA内で使用する環境変数として参照することができます。

Secrets Managerに秘匿情報を格納

続いて、実際に利用する環境変数を配置します。
先ほど設定した通り、airflow/variablesをprefixとする必要があるので、変数名を以下のようにairflow/variables/hogeの形で配置しましょう。
これで、MWAA内でhogeという名前の環境変数として利用することができます。

スクリーンショット 2022-03-13 23.52.49.png

中身は適当にhoge
スクリーンショット 2022-03-13 23.53.16.png

実際に参照する

参照時は、以下のようにシンプルに参照することが可能です。

from airflow.models import Variable
hoge = Variable.get("hoge")

json形式で1つのシークレットに対して複数の環境変数を参照する

これまでで環境変数の配置と参照ができましたが、これだとシークレットと変数が1対1の関係になっており、複数の環境変数を配置したい場合にはその分だけシークレットを作成する必要が出てきてしまいます。
さすがにそれでは具合が悪いので、そういった場合にはjson形式でシークレットを作成し、MWAA内で展開してあげることが可能です。

新しくairflow/variables/json_hogeというシークレットを作成しました。

スクリーンショット 2022-03-14 0.03.46.png

中身は以下
スクリーンショット 2022-03-14 0.04.12.png

参照する場合には単純なjson文字列なので、以下のようにパースして利用可能です。

import json
from airflow.models import Variable

envs = json.loads(Variable.get("json_hoge"))

HOGE = envs["hoge"]
FUGA = envs["fuga"]

jinjaテンプレート形式での展開

pythonコード内での参照だけでなく、jinja形式で展開して環境変数を利用することも可能です。

以下のAirflowの公式ページに環境変数周りの展開方法が記載されています。

json形式でないシンプルな変数の場合は、以下のように展開します。
シークレット名airflow/variables/hogeの中身hogeを展開する

{{ var.value.hoge }}

json形式の場合は以下。

  • シークレット名airflow/variables/json_hogeの中身のhogeがキーの値fooを展開する
{{ var.json.json_hoge.hoge }}
  • シークレット名airflow/variables/json_hogeの中身のfugaがキーの値barを展開する
{{ var.json.json_hoge.fuga }}

最後に

今回はSecrets Managerに配置した変数をMWAA内部で参照する方法についてまとめました。

Secrets Managerからprefixで特定する形がすこし気になるといえば気になりますが、複雑な設定をしなくてもSecrets Managerと連携できるのは非常に便利ですね!

というわけで今回はここまで。

1
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
1
0