使用 CDK 将启动配置分配给 Auto-Scaling 组

Assigning a launch configuration to an Auto-Scaling Group using CDK

注意:这里的代码是 Go,但很高兴看到任何 CDK 语言的答案。

在 AWS CDK 中,您可以创建启动配置:

// Create the launch configuration
lc := awsautoscaling.NewCfnLaunchConfiguration(
    stack,
    jsii.String("asg-lc"),
    &awsautoscaling.CfnLaunchConfigurationProps{
        ...
    },
)

但是Auto-Scaling Group props中没有明显的参数或函数可以附加它。

我设置了更新策略:

UpdatePolicy: awsautoscaling.UpdatePolicy_RollingUpdate,

我想要做的是能够在 AMI 配置更改时在 CI 系统中调用自动刷新:

aws autoscaling start-instance-refresh --cli-input-json file://asg-refresh.json

问题是启动配置似乎是在首次创建堆栈时自动创建的,并且不会在更新时更改并且具有不正确的值(AMI ID 已过时)。

有没有办法 define/refresh 使用 CDK 更新 AMI ID 的启动配置?这是 UI.

中的一个简单更改

如果您使用 L2 AutoScalingGroup Construct,您可以在更新 AMI 后 运行 cdk deploy,它应该会为您启动一个新的。此外,使用此构造,还会为您创建启动配置。你真的不需要担心。

            IMachineImage image = MachineImage.Lookup(new LookupMachineImageProps()
            {
                Name = "MY-AMI", // this can be updated on subsequent deploys
            });

            
            AutoScalingGroup asg = new AutoScalingGroup(this, $"MY-ASG", new AutoScalingGroupProps()
            {
                AllowAllOutbound = false,
                AssociatePublicIpAddress = false,
                AutoScalingGroupName = $"MY-ASG",
                Vpc = network.Vpc,
                VpcSubnets = new SubnetSelection() { Subnets = network.Vpc.PrivateSubnets },
                MinCapacity = 1,
                MaxCapacity = 2,
                MachineImage = image, 
                InstanceType = new InstanceType("m5.xlarge"),
                SecurityGroup = sg,
                UpdatePolicy = UpdatePolicy.RollingUpdate(new RollingUpdateOptions()
                {
                    
                }),
            });