Skip to content

VpcOrigin ​

The VpcOrigin resource allows you to manage AWS CloudFront VpcOrigins for serving content from Amazon VPC endpoints.

Minimal Example ​

Create a basic VpcOrigin with the required properties and a common optional tag.

ts
import AWS from "alchemy/aws/control";

const vpcOrigin = await AWS.CloudFront.VpcOrigin("myVpcOrigin", {
  VpcOriginEndpointConfig: {
    endpoint: "my-vpc-endpoint.amazonaws.com",
    originPath: "/path/to/content",
    customOriginConfig: {
      httpPort: 80,
      httpsPort: 443,
      originProtocolPolicy: "https-only"
    }
  },
  Tags: [
    {
      Key: "Environment",
      Value: "Production"
    }
  ]
});

Advanced Configuration ​

Customize the VpcOrigin with additional settings for performance and security.

ts
const advancedVpcOrigin = await AWS.CloudFront.VpcOrigin("advancedVpcOrigin", {
  VpcOriginEndpointConfig: {
    endpoint: "secure-vpc-endpoint.amazonaws.com",
    originPath: "/secure-content",
    customOriginConfig: {
      httpPort: 80,
      httpsPort: 443,
      originProtocolPolicy: "match-viewer",
      originSslProtocols: {
        items: ["TLSv1.2"],
        quantity: 1
      }
    }
  },
  Tags: [
    {
      Key: "Project",
      Value: "MyProject"
    }
  ],
  adopt: true
});

Secured Access with IAM Policies ​

Define IAM policies to control access to your VpcOrigin.

ts
const vpcOriginWithPolicy = await AWS.CloudFront.VpcOrigin("securedVpcOrigin", {
  VpcOriginEndpointConfig: {
    endpoint: "protected-vpc-endpoint.amazonaws.com",
    originPath: "/protected-content",
    customOriginConfig: {
      httpPort: 80,
      httpsPort: 443,
      originProtocolPolicy: "https-only"
    }
  },
  Tags: [
    {
      Key: "Access",
      Value: "Restricted"
    }
  ],
  adopt: false
});

// Example IAM Policy
const iamPolicy = {
  Version: "2012-10-17",
  Statement: [
    {
      Effect: "Allow",
      Action: "cloudfront:GetDistribution",
      Resource: "*"
    }
  ]
};

Handling Multiple Origins ​

Set up multiple VpcOrigins for different content sources.

ts
const primaryVpcOrigin = await AWS.CloudFront.VpcOrigin("primaryVpcOrigin", {
  VpcOriginEndpointConfig: {
    endpoint: "primary-vpc-endpoint.amazonaws.com",
    originPath: "/primary-content"
  }
});

const secondaryVpcOrigin = await AWS.CloudFront.VpcOrigin("secondaryVpcOrigin", {
  VpcOriginEndpointConfig: {
    endpoint: "secondary-vpc-endpoint.amazonaws.com",
    originPath: "/secondary-content"
  }
});