在 CDK 中为资源添加条件
Add Conditions to Resources in CDK
我已经创建了一个 CDK 堆栈,将在多个区域部署。其中一个构造只能部署在一个区域。在 Cloudformation 中,我只是向资源添加一个条件,但我还没有找到一种方法来执行与 CDK 构造类似的操作。
可以定义一个 CfnCondition
并将其添加到 CfnResource
中,但我如何向 lambda 函数等构造添加条件?
下面是一个关于如何为 iam.User
:
实现此目的的示例
// Create a CloudFormation condition on the region
const regionCondition = new cdk.CfnCondition(this, 'RegionCondition', {
expression: cdk.Fn.conditionEquals(cdk.Stack.of(this).region, 'eu-west-1'),
});
// Create the user using the L2 construct
const user = new iam.User(this, 'User');
// Add the condition on the underlying AWS::IAM::User
(user.node.defaultChild as iam.CfnUser).cfnOptions.condition = regionCondition
下面是一个关于如何为 iam.Role
:
实现此目的的示例
const role = new iam.Role(this, "TestRole", {...});
const conditionKey = "AssumeRolePolicyDocument.Statement.0.Condition.ForAnyValue:StringLike";
const conditionValue = {
"aws:userid": [
"user1@company.com",
"user2@company.com",
],
};
const roleRef = role.node.defaultChild as iam.CfnRole;
roleRef.addPropertyOverride(conditionKey, conditionValue);
我已经创建了一个 CDK 堆栈,将在多个区域部署。其中一个构造只能部署在一个区域。在 Cloudformation 中,我只是向资源添加一个条件,但我还没有找到一种方法来执行与 CDK 构造类似的操作。
可以定义一个 CfnCondition
并将其添加到 CfnResource
中,但我如何向 lambda 函数等构造添加条件?
下面是一个关于如何为 iam.User
:
// Create a CloudFormation condition on the region
const regionCondition = new cdk.CfnCondition(this, 'RegionCondition', {
expression: cdk.Fn.conditionEquals(cdk.Stack.of(this).region, 'eu-west-1'),
});
// Create the user using the L2 construct
const user = new iam.User(this, 'User');
// Add the condition on the underlying AWS::IAM::User
(user.node.defaultChild as iam.CfnUser).cfnOptions.condition = regionCondition
下面是一个关于如何为 iam.Role
:
const role = new iam.Role(this, "TestRole", {...});
const conditionKey = "AssumeRolePolicyDocument.Statement.0.Condition.ForAnyValue:StringLike";
const conditionValue = {
"aws:userid": [
"user1@company.com",
"user2@company.com",
],
};
const roleRef = role.node.defaultChild as iam.CfnRole;
roleRef.addPropertyOverride(conditionKey, conditionValue);