Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
patlougheed opened this issue Oct 17, 2023 · 5 comments · Fixed by #27648
Closed
Labels
@aws-cdk/aws-autoscaling Related to Amazon EC2 Auto Scaling bug This issue is a bug. effort/small Small work item – less than a day of effort p1

Comments

@patlougheed
Copy link

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

@patlougheed patlougheed added bug This issue is a bug. needs-triage This issue or PR still needs to be triaged. labels Oct 17, 2023
@github-actions github-actions bot added the @aws-cdk/aws-autoscaling Related to Amazon EC2 Auto Scaling label Oct 17, 2023
@khushail khushail added investigating This issue is being investigated and/or work is in progress to resolve the issue. and removed needs-triage This issue or PR still needs to be triaged. labels Oct 18, 2023
@khushail
Copy link
Contributor

khushail commented Oct 20, 2023

Hi @patlougheed , thanks for reaching out. I tried to reproduce the error with this updated code -

        asg = autoscaling.AutoScalingGroup(
            self, "DefaultAutoScalingGroup",
            instance_type=ec2.InstanceType("t2.micro"),
            machine_image=ecs.EcsOptimizedImage.amazon_linux2(),
            vpc=vpc,
            require_imdsv2= True,
        )

I can confirm the error. Here is a similiar non-responsive issue created in the past as well. Marking this as P1.

@khushail khushail added p1 effort/small Small work item – less than a day of effort and removed investigating This issue is being investigated and/or work is in progress to resolve the issue. labels Oct 20, 2023
@mergify mergify bot closed this as completed in #27648 Oct 26, 2023
mergify bot pushed a commit that referenced this issue Oct 26, 2023
…unchTemplates (#27648)

This PR fixes the bug that AutoScalingGroup.requireImdsv2 throws error with LaunchTemplates.

This handles `LaunchTemplate` in `AutoScalingGroupRequireImdsv2Aspect` when a feature flag `AUTOSCALING_GENERATE_LAUNCH_TEMPLATE` is true.

Closes #27586.

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
@github-actions
Copy link

⚠️COMMENT VISIBILITY WARNING⚠️

Comments on closed issues are hard for our team to see.
If you need more assistance, please either tag a team member or open a new issue that references this one.
If you wish to keep having a conversation with other community members under this issue feel free to do so.

mrgrain pushed a commit that referenced this issue Nov 1, 2023
…unchTemplates (#27648)

This PR fixes the bug that AutoScalingGroup.requireImdsv2 throws error with LaunchTemplates.

This handles `LaunchTemplate` in `AutoScalingGroupRequireImdsv2Aspect` when a feature flag `AUTOSCALING_GENERATE_LAUNCH_TEMPLATE` is true.

Closes #27586.

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
@dendle
Copy link

dendle commented Sep 11, 2024

Hi folks - this problem appears to also exist when using A LaunchTemplate with a MixedInstancesPolicy and RequireImdsv2=true

@dendle
Copy link

dendle commented Sep 11, 2024

Going to see if I can get a PR on the go for the above issue

@thorbenw
Copy link

I also get the above error, but was able to solve it by setting RequireImdsv2 only on the launch template, but not on the auto scaling group itself.
Maybe the RequireImdsv2 property should just receive a few changes in packages/aws-cdk-lib/aws-autoscaling/lib/auto-scaling-group.ts, like

  • An annotation like some other properties (e.g. SecurityGroup, Role, etc.) have, saying * 'launchTemplate' and 'mixedInstancesPolicy' must not be specified when this property is specified
  • A check included in the verifyNoLaunchConfigPropIsGiven() method to give a more meaningful error message on synth

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
@aws-cdk/aws-autoscaling Related to Amazon EC2 Auto Scaling bug This issue is a bug. effort/small Small work item – less than a day of effort p1
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants