はじめに
MWAA内部で使用する秘匿したい環境変数は、Secrets Managerに配置して管理すると安全に利用することができます。
今回はその配置・参照の方法についてまとめていきます。
以下の記事でGCPなど別リソースへの接続情報
の配置について同様の方法でまとめてあるので、必要であればこちらも確認してみてください。
※ MWAAで使用するAirflowのバージョンは2.2.2である前提で進めます。
やってみる
今回は、以下の手順で進めて行きます。
- MWAAを作成するCloudFormationテンプレートにSecrets Managerを環境変数として参照する設定追記
- Secrets Managerに秘匿情報を格納
- 実際に参照する
- json形式で1つのシークレットに対して複数の環境変数を参照する
- 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
という名前の環境変数として利用することができます。
実際に参照する
参照時は、以下のようにシンプルに参照することが可能です。
from airflow.models import Variable
hoge = Variable.get("hoge")
json形式で1つのシークレットに対して複数の環境変数を参照する
これまでで環境変数の配置と参照ができましたが、これだとシークレットと変数が1対1の関係になっており、複数の環境変数を配置したい場合にはその分だけシークレットを作成する必要が出てきてしまいます。
さすがにそれでは具合が悪いので、そういった場合にはjson形式でシークレットを作成し、MWAA内で展開してあげることが可能です。
新しくairflow/variables/json_hoge
というシークレットを作成しました。
参照する場合には単純な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と連携できるのは非常に便利ですね!
というわけで今回はここまで。