結論
CloudFormationの記法resolve
を使う
調査に至った背景
CloudFormationを使ってDMSのEndpointを作成するため、DatabaseのUsernameとPasswordが必要だけども、それらの値はSecrets Managerに設定している値を使用したかった
解決方法
CloudFormationの記法resolve
を使う
実装したCloudFormation(yaml)の例
Resources:
SourceEndpoint:
Type: AWS::DMS::Endpoint
DependsOn:
- SampleSecretsManager
Properties:
EndpointIdentifier: sample-endpoint-source
EndpointType: source
EngineName: Oracle
DatabaseName: SAMPLE_DB
Port: 1521
Username: '{{resolve:secretsmanager:sample-secres:SecretString:USERNAME}}'
Password: '{{resolve:secretsmanager:sample-secres:SecretString:PASSWORD}}'
ServerName: xxx.xxx.xxx.xxx
SslMode: none
Tags:
- Key: group
Value: sample
上記のUsername, Passwordでresolve
を使っている
Username: '{{resolve:secretsmanager:sample-secres:SecretString:USERNAME}}'
Password: '{{resolve:secretsmanager:sample-secres:SecretString:PASSWORD}}'
公式ドキュメントを見てみる
動的な参照を使用してテンプレート値を指定する – AWS CloudFormation
{{resolve:secretsmanager:secret-id:secret-string:json-key:version-stage:version-id}}
と記載はあるけども、実際に使う時は{{resolve:secretsmanager:your-secret-id:SecretString:your-reference-key}}
の形式になりそう
つまりSecrets Mangerから値を取得すると仮定するとresolve:secretsmanager:xxxxxxxx:SecretString:xxxxxxx
は固定で
– secret-idは、Secrets MangerのSecret name
にあたる文字列
– reference-keyは、Secret valueのSecret-key
にあたる文字列
を埋め込む流れ
結論
もっと面倒くさい方法で取得するしか道はないのでは、と身構えていたけど簡単だったので安心しました