やりたいこと
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月入社。弊社はインフラ屋ですが、アプリも作ってみたいです。










