Skip to content

Extend the VPC L2 Construct to support provisioning a VPC that extends subnets onto an AWS Outpost#33543

Closed
RyanFrench wants to merge 1 commit intoaws:mainfrom
RyanFrench:main
Closed

Extend the VPC L2 Construct to support provisioning a VPC that extends subnets onto an AWS Outpost#33543
RyanFrench wants to merge 1 commit intoaws:mainfrom
RyanFrench:main

Conversation

@RyanFrench
Copy link
Copy Markdown

Issue # (if applicable)

Closes #33542.

Reason for this change

This PR extends the L2 VPC Construct to allow developers to provision a VPC that extends the Subnets onto an Outpost, and provides simplified configuration of the routing via the Local Gateway (on-premise router) or NAT/Internet Gateway (in-region routers)

Description of changes

This PR changes the VPC and Subnet L2 constructs with new subnet types, adds additional configuration options to the SubnetConfig in the VPC construct, and changes the default route setup based on the SubnetConfig.

Describe any new or updated permissions being added

None

Description of how you validated changes

We have written tests covering the new configuration options for subnets, as well as validated that this worked by deploying a VPC to an account with an Outpost attached, using the example code in the original Issue.

Example usage for deploying a VPC with on-premise networking routing traffic via the Local Gateway

const vpcCidr = this.node.tryGetContext("vpcCidr");
const outpostAvailabilityZone = this.node.tryGetContext("outpostAvailabilityZone");
const outpostArn = this.node.tryGetContext("outpostArn");
const localGatewayId = this.node.tryGetContext("localGatewayId");
const localGatewayRouteTableId = this.node.tryGetContext("localGatewayRouteTableId");
new ec2.Vpc(this, "OutpostVPC", {
    cidr: vpcCidr,
    maxAzs: 2,
    localGatewayRouteTableIds: [localGatewayRouteTableId],
    subnetConfiguration: [
        {
            cidrMask: 26,
            name: "Public",
            subnetType: ec2.SubnetType.PUBLIC,
        },
        {
            cidrMask: 26,
            name: "Private",
            subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
        },
        {
            cidrMask: 26,
            name: "OutpostPublic",
            outpostArn,
            outpostAvailabilityZone: outpostAvailabilityZone,
            outpostDefaultRoute: ec2.OutpostDefaultRoute.ON_PREMISE,
            localGatewayId: localGatewayId,
            subnetType: ec2.SubnetType.PUBLIC_OUTPOST,
        },
        {
            cidrMask: 26,
            name: "OutpostPrivate",
            outpostArn,
            outpostAvailabilityZone: outpostAvailabilityZone,
            outpostDefaultRoute: ec2.OutpostDefaultRoute.ON_PREMISE,
            localGatewayId: localGatewayId,
            subnetType: ec2.SubnetType.PRIVATE_OUTPOST_WITH_EGRESS,
        },
    ],
});

Checklist


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

@RyanFrench RyanFrench requested a review from a team as a code owner February 21, 2025 13:09
@github-actions github-actions bot added feature-request A feature should be added or improved. p2 labels Feb 21, 2025
@aws-cdk-automation aws-cdk-automation requested a review from a team February 21, 2025 13:10
@github-actions github-actions bot added the beginning-contributor [Pilot] contributed between 0-2 PRs to the CDK label Feb 21, 2025
@aws-cdk-automation
Copy link
Copy Markdown
Collaborator

Your pull request must be based off of a branch in a personal account (not an organization owned account, and not the main branch). You must also have the setting enabled that allows the CDK team to push changes to your branch (this setting is enabled by default for personal accounts, and cannot be enabled for organization owned accounts). The reason for this is that our automation needs to synchronize your branch with our main after it has been approved, and we cannot do that if we cannot push to your branch.

Copy link
Copy Markdown
Collaborator

@aws-cdk-automation aws-cdk-automation left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The pull request linter fails with the following errors:

❌ CLI code has changed. A maintainer must run the code through the testing pipeline (git fetch origin pull/33543/head && git push -f origin FETCH_HEAD:test-main-pipeline), then add the 'pr-linter/cli-integ-tested' label when the pipeline succeeds.
❌ The title prefix of this pull request must be one of "feat|fix|build|chore|ci|docs|style|refactor|perf|test|revert"
❌ Pull requests from `main` branch of a fork cannot be accepted. Please reopen this contribution from another branch on your fork. For more information, see https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md#step-4-pull-request.

If you believe this pull request should receive an exemption, please comment and provide a justification. A comment requesting an exemption should contain the text Exemption Request. Additionally, if clarification is needed, add Clarification Request to a comment.

@github-actions
Copy link
Copy Markdown
Contributor

Comments on closed issues and PRs are hard for our team to see.
If you need help, please open a new issue that references this one.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Feb 21, 2025
@aws-cdk-automation
Copy link
Copy Markdown
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: AutoBuildv2Project1C6BFA3F-wQm2hXv2jqQv
  • Commit ID: f8b84f3
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

beginning-contributor [Pilot] contributed between 0-2 PRs to the CDK feature-request A feature should be added or improved. p2

Projects

None yet

Development

Successfully merging this pull request may close these issues.

aws-ec2: Subnet L2 Construct does not support outpostArn and Vpc L2 Construct does not support outpost specific networking.

2 participants