Skip to content

(aws-autoscaling): AutoScalingGroup.requireImdsv2 throws error with LaunchTemplates #27586

@patlougheed

Description

@patlougheed

Describe the bug

When configuring an AutoScalingGroup with requireImdsv2 set to true and the generateLaunchTemplateInsteadOfLaunchConfig context flag set to true, cdk synth throws an error:

RuntimeError: TypeError: Cannot read properties of undefined (reading 'metadataOptions')

Expected Behavior

No error; launch template should have LaunchTemplateData.MetadataOptions.HttpTokens set to "required" in resulting CloudFormation output.

Current Behavior

cdk synth yields:

cdk synth
jsii.errors.JavaScriptError:
  @jsii/kernel.RuntimeError: TypeError: Cannot read properties of undefined (reading 'metadataOptions')
      at Kernel._Kernel_ensureSync (/private/var/folders/xw/cr5bdphj6v329dhsnsp7g4cm0000gn/T/tmppv5ogwr4/lib/program.js:10487:23)
      at Kernel.invoke (/private/var/folders/xw/cr5bdphj6v329dhsnsp7g4cm0000gn/T/tmppv5ogwr4/lib/program.js:9851:102)
      at KernelHost.processRequest (/private/var/folders/xw/cr5bdphj6v329dhsnsp7g4cm0000gn/T/tmppv5ogwr4/lib/program.js:11691:36)
      at KernelHost.run (/private/var/folders/xw/cr5bdphj6v329dhsnsp7g4cm0000gn/T/tmppv5ogwr4/lib/program.js:11651:22)
      at Immediate._onImmediate (/private/var/folders/xw/cr5bdphj6v329dhsnsp7g4cm0000gn/T/tmppv5ogwr4/lib/program.js:11652:46)
      at process.processImmediate (node:internal/timers:478:21)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File ".../app.py", line 28, in <module>
    app.synth()
  File ".../.venv/lib/python3.10/site-packages/aws_cdk/__init__.py", line 21202, in synth
    return typing.cast(_CloudAssembly_c693643e, jsii.invoke(self, "synth", [options]))
  File "....venv/lib/python3.10/site-packages/jsii/_kernel/__init__.py", line 149, in wrapped
    return _recursize_dereference(kernel, fn(kernel, *args, **kwargs))
  File ".../.venv/lib/python3.10/site-packages/jsii/_kernel/__init__.py", line 399, in invoke
    response = self.provider.invoke(
  File ".../.venv/lib/python3.10/site-packages/jsii/_kernel/providers/process.py", line 380, in invoke
    return self._process.send(request, InvokeResponse)
  File ".../.venv/lib/python3.10/site-packages/jsii/_kernel/providers/process.py", line 342, in send
    raise RuntimeError(resp.error) from JavaScriptError(resp.stack)
RuntimeError: TypeError: Cannot read properties of undefined (reading 'metadataOptions')

Subprocess exited with error 1

Reproduction Steps

In stack.py:

from aws_cdk import (
    aws_autoscaling as autoscaling,
    aws_ec2 as ec2,
    Stack
)
from constructs import Construct


class TroubleshootingStack(Stack):
    def __init__(self, scope: Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)

        vpc = ec2.Vpc(self, 'Vpc')
        autoscaling.AutoScalingGroup(self, 'AutoscalingGroup', vpc=vpc, require_imdsv2=True)

In cdk.json:

{
  "app": "python3 app.py",
  "context": {
    "@aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig": true
  }
}

Then run cdk synth.

Possible Solution

aws-autoscaling/lib/aspects/require-imdsv2-aspect.ts appears to target LaunchConfigurations only, not LaunchTemplates.

It similar aspect in (aws-ec2)[https://github.com/aws/aws-cdk/blob/main/packages/aws-cdk-lib/aws-ec2/lib/aspects/require-imdsv2-aspect.ts] has similar code that appears to support LaunchTemplates.

Additional Information/Context

No response

CDK CLI Version

2.101.1

Framework Version

2.101.1

Node.js Version

v20.7.0

OS

MacOS 14

Language

Python

Language Version

Python 3.10.9

Other information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    @aws-cdk/aws-autoscalingRelated to Amazon EC2 Auto ScalingbugThis issue is a bug.effort/smallSmall work item – less than a day of effortp1

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions