やりたいこと
AWS CDK の L2 Construct でリソースの依存関係を明示したい場合があります。
私の場合は、以下のようなカスタムリソースを記述していた時に依存関係の明示が必要になりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | from aws_cdk import CustomResource... # 1. AWS Organizations: すべての機能の有効化 enable_all_features = CustomResource( 'EnableAllFeatures', service_token=custom_resource_provider.service_token, properties={ 'ClassName': 'EnableAllFeatures', } ) # 2. AWS Organizations: Service Control Policy の有効化 enable_policy_types = CustomResource( 'EnablePolicyTypes', service_token=custom_resource_provider.service_token, properties={ 'ClassName': 'EnablePolicyTypes', 'PolicyTypes': ','.join([ 'SERVICE_CONTROL_POLICY', ]) } ) |
AWS Organizations の話は本筋とは異なるため詳細を省きますが、
カスタムリソースで以下の処理を実施しようとしていました。
- すべての機能の有効化
- Service Control Policy の有効化
この処理には依存関係があり、1 -> 2 の順で実施する必要があります。
ただし CustomResource のような L2 Construct には
L1 Construct (CfnXXXX) のような add_dependency メソッドが無いため、以下のような書き方は出来ません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # 1. AWS Organizations: すべての機能の有効化enable_all_features = CustomResource( 'EnableAllFeatures', service_token=custom_resource_provider.service_token, properties={ 'ClassName': 'EnableAllFeatures', })# 2. AWS Organizations: Service Control Policy の有効化enable_policy_types = CustomResource( 'EnablePolicyTypes', service_token=custom_resource_provider.service_token, properties={ 'ClassName': 'EnablePolicyTypes', 'PolicyTypes': ','.join([ 'SERVICE_CONTROL_POLICY', ]) })enable_policy_types.add_dependency(enable_all_features) |
解決方法
以下のように node.add_dependency() とすることで依存関係を明示できました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # 1. AWS Organizations: すべての機能の有効化enable_all_features = CustomResource( 'EnableAllFeatures', service_token=custom_resource_provider.service_token, properties={ 'ClassName': 'EnableAllFeatures', })# 2. AWS Organizations: Service Control Policy の有効化enable_policy_types = CustomResource( 'EnablePolicyTypes', service_token=custom_resource_provider.service_token, properties={ 'ClassName': 'EnablePolicyTypes', 'PolicyTypes': ','.join([ 'SERVICE_CONTROL_POLICY', ]) })enable_policy_types.node.add_dependency(enable_all_features) |
以下を参考にさせていただきました。
How can I create a DependsOn relation between EC2 and RDS using aws-cdk
投稿者プロフィール
- 2015年8月入社。弊社はインフラ屋ですが、アプリも作ってみたいです。










