やりたいこと
AWS CDK の L2 Construct でリソースの依存関係を明示したい場合があります。
私の場合は、以下のようなカスタムリソースを記述していた時に依存関係の明示が必要になりました。
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. 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. 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月入社。弊社はインフラ屋ですが、アプリも作ってみたいです。