如何在AWS CDK v2中创建无任务角色的ECS任务定义?
解决AWS CDK v2中ECS TaskDefinition自动创建任务角色的问题
不用完全退回到L1构造就能搞定!虽然L2的Ec2TaskDefinition默认会自动生成任务角色,但你有两种方式可以避免这种情况,既能保留L2构造的便利性,也能完全手动掌控配置。
方法一:修改L2构造的底层CloudFormation资源
你可以先正常创建L2的任务定义,再通过修改其对应的底层CfnTaskDefinition资源,移除任务角色的配置。这种方式既能享受L2构造的便捷,又能实现无任务角色的需求。
代码示例:
taskDefinition := awsecs.NewEc2TaskDefinition(stack, jsii.String(deploymentEnv+service.Tag+"TaskDef"), &awsecs.Ec2TaskDefinitionProps{ Family: jsii.String(deploymentEnv + service.Tag), NetworkMode: awsecs.NetworkMode_BRIDGE, Volumes: &[]*awsecs.Volume{ &efs_shared_volume, }, }) // 获取底层的CloudFormation任务定义实例 cfnTaskDef := taskDefinition.Node.DefaultChild.(awsecs.CfnTaskDefinition) // 清除任务角色ARN,让CloudFormation不生成该属性 cfnTaskDef.SetTaskRoleArn(nil)
这么操作后,CDK生成的CloudFormation模板里就不会包含TaskRoleArn字段,最终创建的ECS任务定义也就不会绑定任何任务角色,和你手动在AWS控制台创建无任务角色的任务定义效果完全一致。
方法二:直接使用L1构造CfnTaskDefinition
如果你更倾向于完全手动控制所有属性,也可以直接用L1的CfnTaskDefinition构造,这种方式下你可以完全决定是否设置任务角色——只要不指定TaskRoleArn字段即可。
代码示例:
cfnTaskDef := awsecs.NewCfnTaskDefinition(stack, jsii.String(deploymentEnv+service.Tag+"TaskDef"), &awsecs.CfnTaskDefinitionProps{ Family: jsii.String(deploymentEnv + service.Tag), NetworkMode: jsii.String("bridge"), Volumes: &[]interface{}{ map[string]interface{}{ "name": jsii.String(efs_shared_volume.Name), "efsVolumeConfiguration": map[string]interface{}{ "fileSystemId": jsii.String("your-efs-file-system-id"), "rootDirectory": jsii.String(efs_shared_volume.EfsVolumeConfiguration.RootDirectory), // 按需添加其他EFS配置项 }, }, }, // 不要设置TaskRoleArn字段,任务定义就不会绑定任何角色 })
两种方法都能满足你的需求,选哪种取决于你是否需要L2构造提供的其他便捷功能(比如自动处理某些默认配置)。
内容的提问来源于stack exchange,提问作者Trevor Griffiths
相关产品推荐
相关产品推荐

