【问题标题】:Refer/Import existing AutoScalingGroup Resource from CDK Stack从 CDK 堆栈引用/导入现有 AutoScalingGroup 资源
【发布时间】:2021-06-19 05:09:46
【问题描述】:

我正在尝试使用 AutoScalingGroup 从我的 CodeDeploy 中引用现有的 AutoScalingGroup。from_auto_scaling_group_name 静态方法,以便与 CodePipeline 集成以实现 EC2/本地部署的自动化。我有以下代码sn-p供你参考。

# Refer existing AutoScaling Group
asg_1 = autoscaling.AutoScalingGroup.from_auto_scaling_group_name(self, "AutoScaleGroup", "WSAutoscaleStack-webServerAsgIdASG12345-XXXXXX")

# EC2 Deployment Groups
deployment_group = codedeploy.ServerDeploymentGroup(self, "CodeDeployDeploymentGroup", deployment_group_name="MyDeploymentGroup", install_agent=True, auto_scaling_groups=[asg_1])

使用 'cdk ls' 验证堆栈后,我收到一个错误提示,

jsii.errors.JSIIError: Cannot get policy fragment of AMIPipelineStack/AutoScaleGroup, resource imported without a role

据我了解,引用的资源应该作为对象导入,以便我可以使用它的所有依赖项,包括资源中的 iam.role。有什么想法吗?

【问题讨论】:

    标签: aws-cdk


    【解决方案1】:

    看起来 fromAutoScalingGroupName 方法没有“导入”角色 (see here)

    您可以选择自己实现该导入。上面链接的 Import 类看起来像(在 Typescript 中):

    public static fromAutoScalingGroupNameWithRole(scope: Construct, id: string, autoScalingGroupName: string, roleArn:string): IAutoScalingGroup {
    class ImportWithRole extends AutoScalingGroupBase {
      public autoScalingGroupName = autoScalingGroupName;
      public autoScalingGroupArn = Stack.of(this).formatArn({
        service: 'autoscaling',
        resource: 'autoScalingGroup:*:autoScalingGroupName',
        resourceName: this.autoScalingGroupName,
      });
      public readonly osType = ec2.OperatingSystemType.UNKNOWN;
      public readonly grantPrincipal = iam.Role.fromRoleArn(this, `${id}-role`, roleArn)
    }
    
    return new ImportWithRole(scope, id);
    

    }

    您可以做的另一项操作(如果适用于您的用例)是真正将自动缩放组及其角色导入 Cloudformation 堆栈。然后将使用 CDK/Cloudformation 堆栈管理资源,您可以使用标准 AutoScalingGroup 构造函数并提供您的角色。这里的缺点是它目前是一个相当痛苦的过程(见link

    【讨论】:

    • 这很好!我被困了几天没有任何线索。非常感谢您的贡献。让我看一下我的 Python 代码,看看我是否可以实现“导入”角色并对其进行测试。
    猜你喜欢
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 2020-08-18
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    相关资源
    最近更新 更多