Static Web App Custom Domain
Example Usage
CNAME validation
import * as pulumi from "@pulumi/pulumi";
import * as azure from "@pulumi/azure";
const example = new azure.core.ResourceGroup("example", {
name: "example-resources",
location: "West Europe",
});
const exampleStaticWebApp = new azure.appservice.StaticWebApp("example", {
name: "example",
resourceGroupName: example.name,
location: example.location,
});
const exampleCNameRecord = new azure.dns.CNameRecord("example", {
name: "my-domain",
zoneName: "contoso.com",
resourceGroupName: example.name,
ttl: 300,
record: exampleStaticWebApp.defaultHostName,
});
const exampleStaticWebAppCustomDomain = new azure.appservice.StaticWebAppCustomDomain("example", {
staticWebAppId: exampleStaticWebApp.id,
domainName: pulumi.interpolate`${exampleCNameRecord.name}.${exampleCNameRecord.zoneName}`,
validationType: "cname-delegation",
});
Content copied to clipboard
import pulumi
import pulumi_azure as azure
example = azure.core.ResourceGroup("example",
name="example-resources",
location="West Europe")
example_static_web_app = azure.appservice.StaticWebApp("example",
name="example",
resource_group_name=example.name,
location=example.location)
example_c_name_record = azure.dns.CNameRecord("example",
name="my-domain",
zone_name="contoso.com",
resource_group_name=example.name,
ttl=300,
record=example_static_web_app.default_host_name)
example_static_web_app_custom_domain = azure.appservice.StaticWebAppCustomDomain("example",
static_web_app_id=example_static_web_app.id,
domain_name=pulumi.Output.all(
name=example_c_name_record.name,
zone_name=example_c_name_record.zone_name
).apply(lambda resolved_outputs: f"{resolved_outputs['name']}.{resolved_outputs['zone_name']}")
,
validation_type="cname-delegation")
Content copied to clipboard
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Azure = Pulumi.Azure;
return await Deployment.RunAsync(() =>
{
var example = new Azure.Core.ResourceGroup("example", new()
{
Name = "example-resources",
Location = "West Europe",
});
var exampleStaticWebApp = new Azure.AppService.StaticWebApp("example", new()
{
Name = "example",
ResourceGroupName = example.Name,
Location = example.Location,
});
var exampleCNameRecord = new Azure.Dns.CNameRecord("example", new()
{
Name = "my-domain",
ZoneName = "contoso.com",
ResourceGroupName = example.Name,
Ttl = 300,
Record = exampleStaticWebApp.DefaultHostName,
});
var exampleStaticWebAppCustomDomain = new Azure.AppService.StaticWebAppCustomDomain("example", new()
{
StaticWebAppId = exampleStaticWebApp.Id,
DomainName = Output.Tuple(exampleCNameRecord.Name, exampleCNameRecord.ZoneName).Apply(values =>
{
var name = values.Item1;
var zoneName = values.Item2;
return $"{name}.{zoneName}";
}),
ValidationType = "cname-delegation",
});
});
Content copied to clipboard
package main
import (
"fmt"
"github.com/pulumi/pulumi-azure/sdk/v6/go/azure/appservice"
"github.com/pulumi/pulumi-azure/sdk/v6/go/azure/core"
"github.com/pulumi/pulumi-azure/sdk/v6/go/azure/dns"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
example, err := core.NewResourceGroup(ctx, "example", &core.ResourceGroupArgs{
Name: pulumi.String("example-resources"),
Location: pulumi.String("West Europe"),
})
if err != nil {
return err
}
exampleStaticWebApp, err := appservice.NewStaticWebApp(ctx, "example", &appservice.StaticWebAppArgs{
Name: pulumi.String("example"),
ResourceGroupName: example.Name,
Location: example.Location,
})
if err != nil {
return err
}
exampleCNameRecord, err := dns.NewCNameRecord(ctx, "example", &dns.CNameRecordArgs{
Name: pulumi.String("my-domain"),
ZoneName: pulumi.String("contoso.com"),
ResourceGroupName: example.Name,
Ttl: pulumi.Int(300),
Record: exampleStaticWebApp.DefaultHostName,
})
if err != nil {
return err
}
_, err = appservice.NewStaticWebAppCustomDomain(ctx, "example", &appservice.StaticWebAppCustomDomainArgs{
StaticWebAppId: exampleStaticWebApp.ID(),
DomainName: pulumi.All(exampleCNameRecord.Name, exampleCNameRecord.ZoneName).ApplyT(func(_args []interface{}) (string, error) {
name := _args[0].(string)
zoneName := _args[1].(string)
return fmt.Sprintf("%v.%v", name, zoneName), nil
}).(pulumi.StringOutput),
ValidationType: pulumi.String("cname-delegation"),
})
if err != nil {
return err
}
return nil
})
}
Content copied to clipboard
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azure.core.ResourceGroup;
import com.pulumi.azure.core.ResourceGroupArgs;
import com.pulumi.azure.appservice.StaticWebApp;
import com.pulumi.azure.appservice.StaticWebAppArgs;
import com.pulumi.azure.dns.CNameRecord;
import com.pulumi.azure.dns.CNameRecordArgs;
import com.pulumi.azure.appservice.StaticWebAppCustomDomain;
import com.pulumi.azure.appservice.StaticWebAppCustomDomainArgs;
import java.util.List;
import java.util.ArrayList;
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 ResourceGroup("example", ResourceGroupArgs.builder()
.name("example-resources")
.location("West Europe")
.build());
var exampleStaticWebApp = new StaticWebApp("exampleStaticWebApp", StaticWebAppArgs.builder()
.name("example")
.resourceGroupName(example.name())
.location(example.location())
.build());
var exampleCNameRecord = new CNameRecord("exampleCNameRecord", CNameRecordArgs.builder()
.name("my-domain")
.zoneName("contoso.com")
.resourceGroupName(example.name())
.ttl(300)
.record(exampleStaticWebApp.defaultHostName())
.build());
var exampleStaticWebAppCustomDomain = new StaticWebAppCustomDomain("exampleStaticWebAppCustomDomain", StaticWebAppCustomDomainArgs.builder()
.staticWebAppId(exampleStaticWebApp.id())
.domainName(Output.tuple(exampleCNameRecord.name(), exampleCNameRecord.zoneName()).applyValue(values -> {
var name = values.t1;
var zoneName = values.t2;
return String.format("%s.%s", name,zoneName);
}))
.validationType("cname-delegation")
.build());
}
}
Content copied to clipboard
resources:
example:
type: azure:core:ResourceGroup
properties:
name: example-resources
location: West Europe
exampleStaticWebApp:
type: azure:appservice:StaticWebApp
name: example
properties:
name: example
resourceGroupName: ${example.name}
location: ${example.location}
exampleCNameRecord:
type: azure:dns:CNameRecord
name: example
properties:
name: my-domain
zoneName: contoso.com
resourceGroupName: ${example.name}
ttl: 300
record: ${exampleStaticWebApp.defaultHostName}
exampleStaticWebAppCustomDomain:
type: azure:appservice:StaticWebAppCustomDomain
name: example
properties:
staticWebAppId: ${exampleStaticWebApp.id}
domainName: ${exampleCNameRecord.name}.${exampleCNameRecord.zoneName}
validationType: cname-delegation
Content copied to clipboard
TXT validation
import * as pulumi from "@pulumi/pulumi";
import * as azure from "@pulumi/azure";
const example = new azure.core.ResourceGroup("example", {
name: "example-resources",
location: "West Europe",
});
const exampleStaticWebApp = new azure.appservice.StaticWebApp("example", {
name: "example",
resourceGroupName: example.name,
location: example.location,
});
const exampleStaticWebAppCustomDomain = new azure.appservice.StaticWebAppCustomDomain("example", {
staticWebAppId: exampleStaticWebApp.id,
domainName: "my-domain.contoso.com",
validationType: "dns-txt-token",
});
const exampleTxtRecord = new azure.dns.TxtRecord("example", {
name: "_dnsauth.my-domain",
zoneName: "contoso.com",
resourceGroupName: example.name,
ttl: 300,
records: [{
value: exampleStaticWebAppCustomDomain.validationToken,
}],
});
Content copied to clipboard
import pulumi
import pulumi_azure as azure
example = azure.core.ResourceGroup("example",
name="example-resources",
location="West Europe")
example_static_web_app = azure.appservice.StaticWebApp("example",
name="example",
resource_group_name=example.name,
location=example.location)
example_static_web_app_custom_domain = azure.appservice.StaticWebAppCustomDomain("example",
static_web_app_id=example_static_web_app.id,
domain_name="my-domain.contoso.com",
validation_type="dns-txt-token")
example_txt_record = azure.dns.TxtRecord("example",
name="_dnsauth.my-domain",
zone_name="contoso.com",
resource_group_name=example.name,
ttl=300,
records=[{
"value": example_static_web_app_custom_domain.validation_token,
}])
Content copied to clipboard
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Azure = Pulumi.Azure;
return await Deployment.RunAsync(() =>
{
var example = new Azure.Core.ResourceGroup("example", new()
{
Name = "example-resources",
Location = "West Europe",
});
var exampleStaticWebApp = new Azure.AppService.StaticWebApp("example", new()
{
Name = "example",
ResourceGroupName = example.Name,
Location = example.Location,
});
var exampleStaticWebAppCustomDomain = new Azure.AppService.StaticWebAppCustomDomain("example", new()
{
StaticWebAppId = exampleStaticWebApp.Id,
DomainName = "my-domain.contoso.com",
ValidationType = "dns-txt-token",
});
var exampleTxtRecord = new Azure.Dns.TxtRecord("example", new()
{
Name = "_dnsauth.my-domain",
ZoneName = "contoso.com",
ResourceGroupName = example.Name,
Ttl = 300,
Records = new[]
{
new Azure.Dns.Inputs.TxtRecordRecordArgs
{
Value = exampleStaticWebAppCustomDomain.ValidationToken,
},
},
});
});
Content copied to clipboard
package main
import (
"github.com/pulumi/pulumi-azure/sdk/v6/go/azure/appservice"
"github.com/pulumi/pulumi-azure/sdk/v6/go/azure/core"
"github.com/pulumi/pulumi-azure/sdk/v6/go/azure/dns"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
example, err := core.NewResourceGroup(ctx, "example", &core.ResourceGroupArgs{
Name: pulumi.String("example-resources"),
Location: pulumi.String("West Europe"),
})
if err != nil {
return err
}
exampleStaticWebApp, err := appservice.NewStaticWebApp(ctx, "example", &appservice.StaticWebAppArgs{
Name: pulumi.String("example"),
ResourceGroupName: example.Name,
Location: example.Location,
})
if err != nil {
return err
}
exampleStaticWebAppCustomDomain, err := appservice.NewStaticWebAppCustomDomain(ctx, "example", &appservice.StaticWebAppCustomDomainArgs{
StaticWebAppId: exampleStaticWebApp.ID(),
DomainName: pulumi.String("my-domain.contoso.com"),
ValidationType: pulumi.String("dns-txt-token"),
})
if err != nil {
return err
}
_, err = dns.NewTxtRecord(ctx, "example", &dns.TxtRecordArgs{
Name: pulumi.String("_dnsauth.my-domain"),
ZoneName: pulumi.String("contoso.com"),
ResourceGroupName: example.Name,
Ttl: pulumi.Int(300),
Records: dns.TxtRecordRecordArray{
&dns.TxtRecordRecordArgs{
Value: exampleStaticWebAppCustomDomain.ValidationToken,
},
},
})
if err != nil {
return err
}
return nil
})
}
Content copied to clipboard
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azure.core.ResourceGroup;
import com.pulumi.azure.core.ResourceGroupArgs;
import com.pulumi.azure.appservice.StaticWebApp;
import com.pulumi.azure.appservice.StaticWebAppArgs;
import com.pulumi.azure.appservice.StaticWebAppCustomDomain;
import com.pulumi.azure.appservice.StaticWebAppCustomDomainArgs;
import com.pulumi.azure.dns.TxtRecord;
import com.pulumi.azure.dns.TxtRecordArgs;
import com.pulumi.azure.dns.inputs.TxtRecordRecordArgs;
import java.util.List;
import java.util.ArrayList;
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 ResourceGroup("example", ResourceGroupArgs.builder()
.name("example-resources")
.location("West Europe")
.build());
var exampleStaticWebApp = new StaticWebApp("exampleStaticWebApp", StaticWebAppArgs.builder()
.name("example")
.resourceGroupName(example.name())
.location(example.location())
.build());
var exampleStaticWebAppCustomDomain = new StaticWebAppCustomDomain("exampleStaticWebAppCustomDomain", StaticWebAppCustomDomainArgs.builder()
.staticWebAppId(exampleStaticWebApp.id())
.domainName("my-domain.contoso.com")
.validationType("dns-txt-token")
.build());
var exampleTxtRecord = new TxtRecord("exampleTxtRecord", TxtRecordArgs.builder()
.name("_dnsauth.my-domain")
.zoneName("contoso.com")
.resourceGroupName(example.name())
.ttl(300)
.records(TxtRecordRecordArgs.builder()
.value(exampleStaticWebAppCustomDomain.validationToken())
.build())
.build());
}
}
Content copied to clipboard
resources:
example:
type: azure:core:ResourceGroup
properties:
name: example-resources
location: West Europe
exampleStaticWebApp:
type: azure:appservice:StaticWebApp
name: example
properties:
name: example
resourceGroupName: ${example.name}
location: ${example.location}
exampleStaticWebAppCustomDomain:
type: azure:appservice:StaticWebAppCustomDomain
name: example
properties:
staticWebAppId: ${exampleStaticWebApp.id}
domainName: my-domain.contoso.com
validationType: dns-txt-token
exampleTxtRecord:
type: azure:dns:TxtRecord
name: example
properties:
name: _dnsauth.my-domain
zoneName: contoso.com
resourceGroupName: ${example.name}
ttl: 300
records:
- value: ${exampleStaticWebAppCustomDomain.validationToken}
Content copied to clipboard
API Providers
This resource uses the following Azure API Providers:
Microsoft.Web
: 2023-01-01
Import
Static Site Custom Domains can be imported using the resource id
, e.g.
$ pulumi import azure:appservice/staticWebAppCustomDomain:StaticWebAppCustomDomain example /subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/group1/providers/Microsoft.Web/staticSites/my-static-site1/customDomains/name.contoso.com
Content copied to clipboard
Properties
Link copied to clipboard
The Domain Name which should be associated with this Static Site. Changing this forces a new Static Site Custom Domain to be created.
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
The ID of the Static Site. Changing this forces a new Static Site Custom Domain to be created.
Link copied to clipboard
Token to be used with dns-txt-token
validation.
Link copied to clipboard