MultitenantDistribution class
Creates an Amazon CloudFront multi-tenant distribution.
Multi-tenant distributions are a specialized type of CloudFront distribution designed for multi-tenant applications. They have specific limitations and requirements compared to standard CloudFront distributions.
For information about CloudFront multi-tenant distributions, see the Amazon CloudFront Developer Guide.
Example Usage
Multi-tenant Distribution Limitations
Multi-tenant distributions have the following limitations compared to standard CloudFront distributions:
- Connection Mode: Automatically set to
tenant-onlyand cannot be modified - Cache Policies: Must use cache policies instead of legacy TTL settings
- Trusted Key Groups: Must use trusted key groups instead of trusted signers
- WAF Integration: Only supports WAF v2 web ACLs
- Certificate Management: Must use ACM certificates (IAM certificates not supported)
Unsupported Attributes
The following attributes that are available in standard CloudFront distributions are not supported for multi-tenant distributions:
activeTrustedSigners- UseactiveTrustedKeyGroupsinsteadaliasIcpRecordals- Managed by connection groupsaliases- Managed by connection groupsanycastIpListId- Use connection groups insteadcontinuousDeploymentPolicyIdforwardedValuesin cache behaviors - Deprecated, use cache policies insteadisIpv6Enabled- Managed by connection groupspriceClass- Managed by connection groupssmoothStreamingin cache behaviorsstagingmodetrustedSignersin cache behaviors - UsetrustedKeyGroupsinstead- Cache behavior TTL settings (
defaultTtl,maxTtl,minTtl) - Use cache policies instead
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const example = new aws.cloudfront.MultitenantDistribution("example", {
defaultCacheBehavior: {
allowedMethods: {
items: [
"DELETE",
"GET",
"HEAD",
"OPTIONS",
"PATCH",
"POST",
"PUT",
],
cachedMethods: [
"GET",
"HEAD",
],
},
targetOriginId: "example-origin",
viewerProtocolPolicy: "redirect-to-https",
cachePolicyId: exampleAwsCloudfrontCachePolicy.id,
},
restrictions: {
geoRestriction: {
restrictionType: "none",
},
},
viewerCertificate: {
acmCertificateArn: exampleAwsAcmCertificate.arn,
sslSupportMethod: "sni-only",
},
tenantConfig: {
parameterDefinitions: [{
definitions: [{
stringSchemas: [{
required: true,
comment: "Origin domain parameter for tenants",
}],
}],
name: "origin_domain",
}],
},
origins: [{
customOriginConfigs: [{
httpPort: 80,
httpsPort: 443,
originProtocolPolicy: "https-only",
originSslProtocols: ["TLSv1.2"],
}],
domainName: "example.com",
id: "example-origin",
}],
comment: "Multi-tenant distribution for my application",
enabled: true,
tags: {
Environment: "production",
},
});
import pulumi
import pulumi_aws as aws
example = aws.cloudfront.MultitenantDistribution("example",
default_cache_behavior={
"allowed_methods": {
"items": [
"DELETE",
"GET",
"HEAD",
"OPTIONS",
"PATCH",
"POST",
"PUT",
],
"cached_methods": [
"GET",
"HEAD",
],
},
"target_origin_id": "example-origin",
"viewer_protocol_policy": "redirect-to-https",
"cache_policy_id": example_aws_cloudfront_cache_policy["id"],
},
restrictions={
"geo_restriction": {
"restriction_type": "none",
},
},
viewer_certificate={
"acm_certificate_arn": example_aws_acm_certificate["arn"],
"ssl_support_method": "sni-only",
},
tenant_config={
"parameter_definitions": [{
"definitions": [{
"string_schemas": [{
"required": True,
"comment": "Origin domain parameter for tenants",
}],
}],
"name": "origin_domain",
}],
},
origins=[{
"custom_origin_configs": [{
"http_port": 80,
"https_port": 443,
"origin_protocol_policy": "https-only",
"origin_ssl_protocols": ["TLSv1.2"],
}],
"domain_name": "example.com",
"id": "example-origin",
}],
comment="Multi-tenant distribution for my application",
enabled=True,
tags={
"Environment": "production",
})
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var example = new Aws.CloudFront.MultitenantDistribution("example", new()
{
DefaultCacheBehavior = new Aws.CloudFront.Inputs.MultitenantDistributionDefaultCacheBehaviorArgs
{
AllowedMethods = new Aws.CloudFront.Inputs.MultitenantDistributionDefaultCacheBehaviorAllowedMethodsArgs
{
Items = new[]
{
"DELETE",
"GET",
"HEAD",
"OPTIONS",
"PATCH",
"POST",
"PUT",
},
CachedMethods = new[]
{
"GET",
"HEAD",
},
},
TargetOriginId = "example-origin",
ViewerProtocolPolicy = "redirect-to-https",
CachePolicyId = exampleAwsCloudfrontCachePolicy.Id,
},
Restrictions = new Aws.CloudFront.Inputs.MultitenantDistributionRestrictionsArgs
{
GeoRestriction = new Aws.CloudFront.Inputs.MultitenantDistributionRestrictionsGeoRestrictionArgs
{
RestrictionType = "none",
},
},
ViewerCertificate = new Aws.CloudFront.Inputs.MultitenantDistributionViewerCertificateArgs
{
AcmCertificateArn = exampleAwsAcmCertificate.Arn,
SslSupportMethod = "sni-only",
},
TenantConfig = new Aws.CloudFront.Inputs.MultitenantDistributionTenantConfigArgs
{
ParameterDefinitions = new[]
{
new Aws.CloudFront.Inputs.MultitenantDistributionTenantConfigParameterDefinitionArgs
{
Definitions = new[]
{
new Aws.CloudFront.Inputs.MultitenantDistributionTenantConfigParameterDefinitionDefinitionArgs
{
StringSchemas = new[]
{
new Aws.CloudFront.Inputs.MultitenantDistributionTenantConfigParameterDefinitionDefinitionStringSchemaArgs
{
Required = true,
Comment = "Origin domain parameter for tenants",
},
},
},
},
Name = "origin_domain",
},
},
},
Origins = new[]
{
new Aws.CloudFront.Inputs.MultitenantDistributionOriginArgs
{
CustomOriginConfigs = new[]
{
new Aws.CloudFront.Inputs.MultitenantDistributionOriginCustomOriginConfigArgs
{
HttpPort = 80,
HttpsPort = 443,
OriginProtocolPolicy = "https-only",
OriginSslProtocols = new[]
{
"TLSv1.2",
},
},
},
DomainName = "example.com",
Id = "example-origin",
},
},
Comment = "Multi-tenant distribution for my application",
Enabled = true,
Tags =
{
{ "Environment", "production" },
},
});
});
package main
import (
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/cloudfront"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := cloudfront.NewMultitenantDistribution(ctx, "example", &cloudfront.MultitenantDistributionArgs{
DefaultCacheBehavior: &cloudfront.MultitenantDistributionDefaultCacheBehaviorArgs{
AllowedMethods: &cloudfront.MultitenantDistributionDefaultCacheBehaviorAllowedMethodsArgs{
Items: pulumi.StringArray{
pulumi.String("DELETE"),
pulumi.String("GET"),
pulumi.String("HEAD"),
pulumi.String("OPTIONS"),
pulumi.String("PATCH"),
pulumi.String("POST"),
pulumi.String("PUT"),
},
CachedMethods: pulumi.StringArray{
pulumi.String("GET"),
pulumi.String("HEAD"),
},
},
TargetOriginId: pulumi.String("example-origin"),
ViewerProtocolPolicy: pulumi.String("redirect-to-https"),
CachePolicyId: pulumi.Any(exampleAwsCloudfrontCachePolicy.Id),
},
Restrictions: &cloudfront.MultitenantDistributionRestrictionsArgs{
GeoRestriction: &cloudfront.MultitenantDistributionRestrictionsGeoRestrictionArgs{
RestrictionType: pulumi.String("none"),
},
},
ViewerCertificate: &cloudfront.MultitenantDistributionViewerCertificateArgs{
AcmCertificateArn: pulumi.Any(exampleAwsAcmCertificate.Arn),
SslSupportMethod: pulumi.String("sni-only"),
},
TenantConfig: &cloudfront.MultitenantDistributionTenantConfigArgs{
ParameterDefinitions: cloudfront.MultitenantDistributionTenantConfigParameterDefinitionArray{
&cloudfront.MultitenantDistributionTenantConfigParameterDefinitionArgs{
Definitions: cloudfront.MultitenantDistributionTenantConfigParameterDefinitionDefinitionArray{
&cloudfront.MultitenantDistributionTenantConfigParameterDefinitionDefinitionArgs{
StringSchemas: cloudfront.MultitenantDistributionTenantConfigParameterDefinitionDefinitionStringSchemaArray{
&cloudfront.MultitenantDistributionTenantConfigParameterDefinitionDefinitionStringSchemaArgs{
Required: pulumi.Bool(true),
Comment: pulumi.String("Origin domain parameter for tenants"),
},
},
},
},
Name: pulumi.String("origin_domain"),
},
},
},
Origins: cloudfront.MultitenantDistributionOriginArray{
&cloudfront.MultitenantDistributionOriginArgs{
CustomOriginConfigs: cloudfront.MultitenantDistributionOriginCustomOriginConfigArray{
&cloudfront.MultitenantDistributionOriginCustomOriginConfigArgs{
HttpPort: pulumi.Int(80),
HttpsPort: pulumi.Int(443),
OriginProtocolPolicy: pulumi.String("https-only"),
OriginSslProtocols: pulumi.StringArray{
pulumi.String("TLSv1.2"),
},
},
},
DomainName: pulumi.String("example.com"),
Id: pulumi.String("example-origin"),
},
},
Comment: pulumi.String("Multi-tenant distribution for my application"),
Enabled: pulumi.Bool(true),
Tags: pulumi.StringMap{
"Environment": pulumi.String("production"),
},
})
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
aws = {
source = "pulumi/aws"
}
}
}
resource "aws_cloudfront_multitenantdistribution" "example" {
default_cache_behavior = {
allowed_methods = {
items = ["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"]
cached_methods = ["GET", "HEAD"]
}
target_origin_id = "example-origin"
viewer_protocol_policy = "redirect-to-https"
cache_policy_id = exampleAwsCloudfrontCachePolicy.id
}
restrictions = {
geo_restriction = {
restriction_type = "none"
}
}
viewer_certificate = {
acm_certificate_arn = exampleAwsAcmCertificate.arn
ssl_support_method = "sni-only"
}
tenant_config = {
parameter_definitions = [{
"definitions" = [{
"stringSchemas" = [{
"required" = true
"comment" = "Origin domain parameter for tenants"
}]
}]
"name" = "origin_domain"
}]
}
origins {
custom_origin_configs {
http_port = 80
https_port = 443
origin_protocol_policy = "https-only"
origin_ssl_protocols = ["TLSv1.2"]
}
domain_name = "example.com"
id = "example-origin"
}
comment = "Multi-tenant distribution for my application"
enabled = true
tags = {
"Environment" = "production"
}
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.cloudfront.MultitenantDistribution;
import com.pulumi.aws.cloudfront.MultitenantDistributionArgs;
import com.pulumi.aws.cloudfront.inputs.MultitenantDistributionDefaultCacheBehaviorArgs;
import com.pulumi.aws.cloudfront.inputs.MultitenantDistributionDefaultCacheBehaviorAllowedMethodsArgs;
import com.pulumi.aws.cloudfront.inputs.MultitenantDistributionRestrictionsArgs;
import com.pulumi.aws.cloudfront.inputs.MultitenantDistributionRestrictionsGeoRestrictionArgs;
import com.pulumi.aws.cloudfront.inputs.MultitenantDistributionViewerCertificateArgs;
import com.pulumi.aws.cloudfront.inputs.MultitenantDistributionTenantConfigArgs;
import com.pulumi.aws.cloudfront.inputs.MultitenantDistributionTenantConfigParameterDefinitionArgs;
import com.pulumi.aws.cloudfront.inputs.MultitenantDistributionTenantConfigParameterDefinitionDefinitionArgs;
import com.pulumi.aws.cloudfront.inputs.MultitenantDistributionTenantConfigParameterDefinitionDefinitionStringSchemaArgs;
import com.pulumi.aws.cloudfront.inputs.MultitenantDistributionOriginArgs;
import com.pulumi.aws.cloudfront.inputs.MultitenantDistributionOriginCustomOriginConfigArgs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var example = new MultitenantDistribution("example", MultitenantDistributionArgs.builder()
.defaultCacheBehavior(MultitenantDistributionDefaultCacheBehaviorArgs.builder()
.allowedMethods(MultitenantDistributionDefaultCacheBehaviorAllowedMethodsArgs.builder()
.items(
"DELETE",
"GET",
"HEAD",
"OPTIONS",
"PATCH",
"POST",
"PUT")
.cachedMethods(
"GET",
"HEAD")
.build())
.targetOriginId("example-origin")
.viewerProtocolPolicy("redirect-to-https")
.cachePolicyId(exampleAwsCloudfrontCachePolicy.id())
.build())
.restrictions(MultitenantDistributionRestrictionsArgs.builder()
.geoRestriction(MultitenantDistributionRestrictionsGeoRestrictionArgs.builder()
.restrictionType("none")
.build())
.build())
.viewerCertificate(MultitenantDistributionViewerCertificateArgs.builder()
.acmCertificateArn(exampleAwsAcmCertificate.arn())
.sslSupportMethod("sni-only")
.build())
.tenantConfig(MultitenantDistributionTenantConfigArgs.builder()
.parameterDefinitions(MultitenantDistributionTenantConfigParameterDefinitionArgs.builder()
.definitions(MultitenantDistributionTenantConfigParameterDefinitionDefinitionArgs.builder()
.stringSchemas(MultitenantDistributionTenantConfigParameterDefinitionDefinitionStringSchemaArgs.builder()
.required(true)
.comment("Origin domain parameter for tenants")
.build())
.build())
.name("origin_domain")
.build())
.build())
.origins(MultitenantDistributionOriginArgs.builder()
.customOriginConfigs(MultitenantDistributionOriginCustomOriginConfigArgs.builder()
.httpPort(80)
.httpsPort(443)
.originProtocolPolicy("https-only")
.originSslProtocols("TLSv1.2")
.build())
.domainName("example.com")
.id("example-origin")
.build())
.comment("Multi-tenant distribution for my application")
.enabled(true)
.tags(Map.of("Environment", "production"))
.build());
}
}
resources:
example:
type: aws:cloudfront:MultitenantDistribution
properties:
defaultCacheBehavior:
allowedMethods:
items:
- DELETE
- GET
- HEAD
- OPTIONS
- PATCH
- POST
- PUT
cachedMethods:
- GET
- HEAD
targetOriginId: example-origin
viewerProtocolPolicy: redirect-to-https
cachePolicyId: ${exampleAwsCloudfrontCachePolicy.id}
restrictions:
geoRestriction:
restrictionType: none
viewerCertificate:
acmCertificateArn: ${exampleAwsAcmCertificate.arn}
sslSupportMethod: sni-only
tenantConfig:
parameterDefinitions:
- definitions:
- stringSchemas:
- required: true
comment: Origin domain parameter for tenants
name: origin_domain
origins:
- customOriginConfigs:
- httpPort: 80
httpsPort: 443
originProtocolPolicy: https-only
originSslProtocols:
- TLSv1.2
domainName: example.com
id: example-origin
comment: Multi-tenant distribution for my application
enabled: true
tags:
Environment: production
Import
Using pulumi import, import CloudFront Multi-tenant Distributions using the id. For example:
$ pulumi import aws:cloudfront/multitenantDistribution:MultitenantDistribution distribution E74FTE3AEXAMPLE
Constructors
- MultitenantDistribution(String name, {MultitenantDistributionArgs? args, CustomResourceOptions? options})
-
Creates a new MultitenantDistribution.
nameThe Pulumi resource name.argsArguments used to configure this MultitenantDistribution. The set of arguments for MultitenantDistribution.optionsResource options controlling this resource's behavior. - MultitenantDistribution.reference(String urn)
- Creates a typed reference to an existing MultitenantDistribution resource.
Properties
-
activeTrustedKeyGroups
↔ Output<
List< MultitenantDistributionActiveTrustedKeyGroup> ?> -
List of key groups that CloudFront can use to validate signed URLs or signed cookies. See Active Trusted Key Groups below.
latefinal
-
arn
↔ Output<
String> -
ARN for the distribution.
latefinal
-
cacheBehaviors
↔ Output<
List< MultitenantDistributionCacheBehavior> ?> -
Ordered list of cache behaviors resource for this distribution. See Cache Behavior below.
latefinal
-
callerReference
↔ Output<
String> -
Internal value used by CloudFront to allow future updates to the distribution configuration.
latefinal
-
childResources
→ Set<
Resource> -
finalinherited
-
comment
↔ Output<
String> -
Any comments you want to include about the distribution.
latefinal
-
completionSources
↔ Map<
String, IOutputCompletionSource> -
latefinalinherited
-
connectionMode
↔ Output<
String> -
Connection mode for the distribution. Always set to
tenant-onlyfor multi-tenant distributions.latefinal -
customErrorResponses
↔ Output<
List< MultitenantDistributionCustomErrorResponse> ?> -
One or more custom error response elements. See Custom Error Response below.
latefinal
-
defaultCacheBehavior
↔ Output<
MultitenantDistributionDefaultCacheBehavior> -
Default cache behavior for this distribution. See Default Cache Behavior below.
latefinal
-
defaultRootObject
↔ Output<
String?> -
Object that you want CloudFront to return when an end user requests the root URL.
latefinal
-
domainName
↔ Output<
String> -
Domain name corresponding to the distribution.
latefinal
-
enabled
↔ Output<
bool> -
Whether the distribution is enabled to accept end user requests for content.
latefinal
-
etag
↔ Output<
String> -
Current version of the distribution's information.
latefinal
- hashCode → int
-
The hash code for this object.
no setterinherited
-
httpVersion
↔ Output<
String> -
Maximum HTTP version to support on the distribution. Allowed values are
http1.1,http2,http2and3, andhttp3. Default:http2.latefinal -
id
↔ Output<
String> -
getter/setter pairinherited
-
inProgressInvalidationBatches
↔ Output<
int> -
Number of invalidation batches currently in progress.
latefinal
- isCustom → bool
-
Returns whether this resource is provider-managed.
no setterinherited
- isProtected → bool
-
Returns whether this resource is protected from deletion.
no setterinherited
- isRemote → bool
-
Whether this resource is registered as remote.
no setterinherited
- isResourceReference → bool
-
Whether this instance represents a resource value returned over RPC.
finalinherited
-
lastModifiedTime
↔ Output<
String> -
Date and time the distribution was last modified.
latefinal
-
originGroups
↔ Output<
List< MultitenantDistributionOriginGroup> ?> -
One or more originGroup for this distribution (multiples allowed). See Origin Group below.
latefinal
-
origins
↔ Output<
List< MultitenantDistributionOrigin> ?> -
One or more origins for this distribution (multiples allowed). See Origin below.
latefinal
-
resourceTransforms
→ List<
ResourceTransform> -
Inherited/explicit async transforms.
no setterinherited
-
restrictions
↔ Output<
MultitenantDistributionRestrictions?> -
Restriction configuration for this distribution. See Restrictions below.
latefinal
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
-
status
↔ Output<
String> -
Current status of the distribution.
Deployedif the distribution's information is fully propagated throughout the Amazon CloudFront system.latefinal -
Map of tags to assign to the resource. If configured with a provider
defaultTagsconfiguration block present, tags with matching keys will overwrite those defined at the provider-level.latefinal -
Map of tags assigned to the resource, including those inherited from the provider
defaultTagsconfiguration block.latefinal -
tenantConfig
↔ Output<
MultitenantDistributionTenantConfig> -
Tenant configuration that contains parameter definitions for multi-tenant distributions. See Tenant Config below.
latefinal
-
timeouts
↔ Output<
MultitenantDistributionTimeouts?> -
latefinal
-
transformations
→ List<
ResourceTransformation> -
Inherited/explicit legacy transformations.
no setterinherited
-
urn
↔ Output<
String> -
latefinalinherited
-
viewerCertificate
↔ Output<
MultitenantDistributionViewerCertificate> -
SSL configuration for this distribution. See Viewer Certificate below.
latefinal
-
webAclId
↔ Output<
String?> -
Unique identifier that specifies the AWS WAF v2 web ACL to associate with this distribution.
latefinal
Methods
-
failId(
Object error) → void -
Completes this resource ID with an error when registration fails.
inherited
-
failOutputs(
Object error) → void -
Completes all output properties with
error.inherited -
failUrn(
Object error) → void -
Completes this resource URN with an error when registration fails.
inherited
-
getProvider(
String moduleMember) → ProviderResource? -
Returns provider for
moduleMember's package, if configured.inherited -
getResourceName(
) → String -
Returns this resource's logical name.
inherited
-
getResourceType(
) → String -
Returns this resource's Pulumi type token.
inherited
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
registerOutput<
T> (String propertyName, {Object? decoder(Object?)?, bool isSecret = false}) → Output< T> -
Registers a dynamic output property for this resource.
inherited
-
resolveId(
String? value, {required bool isKnown}) → void -
Resolves the provider-assigned ID for this resource.
inherited
-
resolveOutputs(
Struct outputs) → void -
Resolves all output properties from a monitor response payload.
inherited
-
resolveUrn(
String value) → void -
Resolves this resource's URN once assigned by the engine.
inherited
-
serializeProperties(
Map< String, dynamic> properties) → Future<Struct> -
Serializes resource properties for RPC transmission.
inherited
-
toString(
) → String -
A string representation of this object.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited
Static Methods
-
get(
String name, Input< String> id, {MultitenantDistributionState? state, CustomResourceOptions? options}) → MultitenantDistribution -
Gets an existing MultitenantDistribution resource's state with the given
nameandid.