App
/* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* Provides an Amplify App resource, a fullstack serverless app hosted on the AWS Amplify Console.
Note: When you create/update an Amplify App from the provider, you may end up with the error "BadRequestException: You should at least provide one valid token" because of authentication issues. See the section "Repository with Tokens" below.
Example Usage
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const example = new aws.amplify.App("example", {
name: "example",
repository: "https://github.com/example/app",
buildSpec: `version: 0.1
frontend:
phases:
preBuild:
commands:
- yarn install
build:
commands:
- yarn run build
artifacts:
baseDirectory: build
files:
- '**/*'
cache:
paths:
- node_modules/**/*
`,
customRules: [{
source: "/<*>",
status: "404",
target: "/index.html",
}],
environmentVariables: {
ENV: "test",
},
});import pulumi
import pulumi_aws as aws
example = aws.amplify.App("example",
name="example",
repository="https://github.com/example/app",
build_spec="""version: 0.1
frontend:
phases:
preBuild:
commands:
- yarn install
build:
commands:
- yarn run build
artifacts:
baseDirectory: build
files:
- '**/*'
cache:
paths:
- node_modules/**/*
""",
custom_rules=[aws.amplify.AppCustomRuleArgs(
source="/<*>",
status="404",
target="/index.html",
)],
environment_variables={
"ENV": "test",
})using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var example = new Aws.Amplify.App("example", new()
{
Name = "example",
Repository = "https://github.com/example/app",
BuildSpec = @"version: 0.1
frontend:
phases:
preBuild:
commands:
- yarn install
build:
commands:
- yarn run build
artifacts:
baseDirectory: build
files:
- '**/*'
cache:
paths:
- node_modules/**/*
",
CustomRules = new[]
{
new Aws.Amplify.Inputs.AppCustomRuleArgs
{
Source = "/<*>",
Status = "404",
Target = "/index.html",
},
},
EnvironmentVariables =
{
{ "ENV", "test" },
},
});
});package main
import (
"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/amplify"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := amplify.NewApp(ctx, "example", &lify.AppArgs{
Name: pulumi.String("example"),
Repository: pulumi.String("https://github.com/example/app"),
BuildSpec: pulumi.String(`version: 0.1
frontend:
phases:
preBuild:
commands:
- yarn install
build:
commands:
- yarn run build
artifacts:
baseDirectory: build
files:
- '**/*'
cache:
paths:
- node_modules/**/*
`),
CustomRules: amplify.AppCustomRuleArray{
&lify.AppCustomRuleArgs{
Source: pulumi.String("/<*>"),
Status: pulumi.String("404"),
Target: pulumi.String("/index.html"),
},
},
EnvironmentVariables: pulumi.StringMap{
"ENV": pulumi.String("test"),
},
})
if err != nil {
return err
}
return nil
})
}package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.amplify.App;
import com.pulumi.aws.amplify.AppArgs;
import com.pulumi.aws.amplify.inputs.AppCustomRuleArgs;
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 App("example", AppArgs.builder()
.name("example")
.repository("https://github.com/example/app")
.buildSpec("""
version: 0.1
frontend:
phases:
preBuild:
commands:
- yarn install
build:
commands:
- yarn run build
artifacts:
baseDirectory: build
files:
- '**/*'
cache:
paths:
- node_modules/**/*
""")
.customRules(AppCustomRuleArgs.builder()
.source("/<*>")
.status("404")
.target("/index.html")
.build())
.environmentVariables(Map.of("ENV", "test"))
.build());
}
}resources:
example:
type: aws:amplify:App
properties:
name: example
repository: https://github.com/example/app
buildSpec: |
version: 0.1
frontend:
phases:
preBuild:
commands:
- yarn install
build:
commands:
- yarn run build
artifacts:
baseDirectory: build
files:
- '**/*'
cache:
paths:
- node_modules/**/*
customRules:
- source: /<*>
status: '404'
target: /index.html
environmentVariables:
ENV: testRepository with Tokens
If you create a new Amplify App with the repository argument, you also need to set oauth_token or access_token for authentication. For GitHub, get a personal access token and set access_token as follows:
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const example = new aws.amplify.App("example", {
name: "example",
repository: "https://github.com/example/app",
accessToken: "...",
});import pulumi
import pulumi_aws as aws
example = aws.amplify.App("example",
name="example",
repository="https://github.com/example/app",
access_token="...")using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var example = new Aws.Amplify.App("example", new()
{
Name = "example",
Repository = "https://github.com/example/app",
AccessToken = "...",
});
});package main
import (
"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/amplify"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := amplify.NewApp(ctx, "example", &lify.AppArgs{
Name: pulumi.String("example"),
Repository: pulumi.String("https://github.com/example/app"),
AccessToken: pulumi.String("..."),
})
if err != nil {
return err
}
return nil
})
}package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.amplify.App;
import com.pulumi.aws.amplify.AppArgs;
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 App("example", AppArgs.builder()
.name("example")
.repository("https://github.com/example/app")
.accessToken("...")
.build());
}
}resources:
example:
type: aws:amplify:App
properties:
name: example
repository: https://github.com/example/app
accessToken: '...'You can omit access_token if you import an existing Amplify App created by the Amplify Console (using OAuth for authentication).
Auto Branch Creation
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const example = new aws.amplify.App("example", {
name: "example",
enableAutoBranchCreation: true,
autoBranchCreationPatterns: [
"*",
"*/**",
],
autoBranchCreationConfig: {
enableAutoBuild: true,
},
});import pulumi
import pulumi_aws as aws
example = aws.amplify.App("example",
name="example",
enable_auto_branch_creation=True,
auto_branch_creation_patterns=[
"*",
"*/**",
],
auto_branch_creation_config=aws.amplify.AppAutoBranchCreationConfigArgs(
enable_auto_build=True,
))using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var example = new Aws.Amplify.App("example", new()
{
Name = "example",
EnableAutoBranchCreation = true,
AutoBranchCreationPatterns = new[]
{
"*",
"*/**",
},
AutoBranchCreationConfig = new Aws.Amplify.Inputs.AppAutoBranchCreationConfigArgs
{
EnableAutoBuild = true,
},
});
});package main
import (
"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/amplify"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := amplify.NewApp(ctx, "example", &lify.AppArgs{
Name: pulumi.String("example"),
EnableAutoBranchCreation: pulumi.Bool(true),
AutoBranchCreationPatterns: pulumi.StringArray{
pulumi.String("*"),
pulumi.String("*/**"),
},
AutoBranchCreationConfig: &lify.AppAutoBranchCreationConfigArgs{
EnableAutoBuild: pulumi.Bool(true),
},
})
if err != nil {
return err
}
return nil
})
}package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.amplify.App;
import com.pulumi.aws.amplify.AppArgs;
import com.pulumi.aws.amplify.inputs.AppAutoBranchCreationConfigArgs;
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 App("example", AppArgs.builder()
.name("example")
.enableAutoBranchCreation(true)
.autoBranchCreationPatterns(
"*",
"*/**")
.autoBranchCreationConfig(AppAutoBranchCreationConfigArgs.builder()
.enableAutoBuild(true)
.build())
.build());
}
}resources:
example:
type: aws:amplify:App
properties:
name: example
enableAutoBranchCreation: true # The default patterns added by the Amplify Console.
autoBranchCreationPatterns:
- '*'
- '*/**'
autoBranchCreationConfig:
enableAutoBuild: trueBasic Authorization
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
import * as std from "@pulumi/std";
const example = new aws.amplify.App("example", {
name: "example",
enableBasicAuth: true,
basicAuthCredentials: std.base64encode({
input: "username1:password1",
}).then(invoke => invoke.result),
});import pulumi
import pulumi_aws as aws
import pulumi_std as std
example = aws.amplify.App("example",
name="example",
enable_basic_auth=True,
basic_auth_credentials=std.base64encode(input="username1:password1").result)using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
using Std = Pulumi.Std;
return await Deployment.RunAsync(() =>
{
var example = new Aws.Amplify.App("example", new()
{
Name = "example",
EnableBasicAuth = true,
BasicAuthCredentials = Std.Base64encode.Invoke(new()
{
Input = "username1:password1",
}).Apply(invoke => invoke.Result),
});
});package main
import (
"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/amplify"
"github.com/pulumi/pulumi-std/sdk/go/std"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
invokeBase64encode, err := std.Base64encode(ctx, &std.Base64encodeArgs{
Input: "username1:password1",
}, nil)
if err != nil {
return err
}
_, err = amplify.NewApp(ctx, "example", &lify.AppArgs{
Name: pulumi.String("example"),
EnableBasicAuth: pulumi.Bool(true),
BasicAuthCredentials: invokeBase64encode.Result,
})
if err != nil {
return err
}
return nil
})
}package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.amplify.App;
import com.pulumi.aws.amplify.AppArgs;
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 App("example", AppArgs.builder()
.name("example")
.enableBasicAuth(true)
.basicAuthCredentials(StdFunctions.base64encode(Base64encodeArgs.builder()
.input("username1:password1")
.build()).result())
.build());
}
}resources:
example:
type: aws:amplify:App
properties:
name: example
enableBasicAuth: true
basicAuthCredentials:
fn::invoke:
Function: std:base64encode
Arguments:
input: username1:password1
Return: resultRewrites and Redirects
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const example = new aws.amplify.App("example", {
name: "example",
customRules: [
{
source: "/api/<*>",
status: "200",
target: "https://api.example.com/api/<*>",
},
{
source: "</^[^.]+$|\\.(?!(css|gif|ico|jpg|js|png|txt|svg|woff|ttf|map|json)$)([^.]+$)/>",
status: "200",
target: "/index.html",
},
],
});import pulumi
import pulumi_aws as aws
example = aws.amplify.App("example",
name="example",
custom_rules=[
aws.amplify.AppCustomRuleArgs(
source="/api/<*>",
status="200",
target="https://api.example.com/api/<*>",
),
aws.amplify.AppCustomRuleArgs(
source="</^[^.]+$|\\.(?!(css|gif|ico|jpg|js|png|txt|svg|woff|ttf|map|json)$)([^.]+$)/>",
status="200",
target="/index.html",
),
])using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var example = new Aws.Amplify.App("example", new()
{
Name = "example",
CustomRules = new[]
{
new Aws.Amplify.Inputs.AppCustomRuleArgs
{
Source = "/api/<*>",
Status = "200",
Target = "https://api.example.com/api/<*>",
},
new Aws.Amplify.Inputs.AppCustomRuleArgs
{
Source = "</^[^.]+$|\\.(?!(css|gif|ico|jpg|js|png|txt|svg|woff|ttf|map|json)$)([^.]+$)/>",
Status = "200",
Target = "/index.html",
},
},
});
});package main
import (
"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/amplify"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := amplify.NewApp(ctx, "example", &lify.AppArgs{
Name: pulumi.String("example"),
CustomRules: amplify.AppCustomRuleArray{
&lify.AppCustomRuleArgs{
Source: pulumi.String("/api/<*>"),
Status: pulumi.String("200"),
Target: pulumi.String("https://api.example.com/api/<*>"),
},
&lify.AppCustomRuleArgs{
Source: pulumi.String("</^[^.]+$|\\.(?!(css|gif|ico|jpg|js|png|txt|svg|woff|ttf|map|json)$)([^.]+$)/>"),
Status: pulumi.String("200"),
Target: pulumi.String("/index.html"),
},
},
})
if err != nil {
return err
}
return nil
})
}package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.amplify.App;
import com.pulumi.aws.amplify.AppArgs;
import com.pulumi.aws.amplify.inputs.AppCustomRuleArgs;
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 App("example", AppArgs.builder()
.name("example")
.customRules(
AppCustomRuleArgs.builder()
.source("/api/<*>")
.status("200")
.target("https://api.example.com/api/<*>")
.build(),
AppCustomRuleArgs.builder()
.source("</^[^.]+$|\\.(?!(css|gif|ico|jpg|js|png|txt|svg|woff|ttf|map|json)$)([^.]+$)/>")
.status("200")
.target("/index.html")
.build())
.build());
}
}resources:
example:
type: aws:amplify:App
properties:
name: example
customRules:
- source: /api/<*>
status: '200'
target: https://api.example.com/api/<*>
- source: </^[^.]+$|\.(?!(css|gif|ico|jpg|js|png|txt|svg|woff|ttf|map|json)$)([^.]+$)/>
status: '200'
target: /index.htmlCustom Image
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const example = new aws.amplify.App("example", {
name: "example",
environmentVariables: {
_CUSTOM_IMAGE: "node:16",
},
});import pulumi
import pulumi_aws as aws
example = aws.amplify.App("example",
name="example",
environment_variables={
"_CUSTOM_IMAGE": "node:16",
})using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var example = new Aws.Amplify.App("example", new()
{
Name = "example",
EnvironmentVariables =
{
{ "_CUSTOM_IMAGE", "node:16" },
},
});
});package main
import (
"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/amplify"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := amplify.NewApp(ctx, "example", &lify.AppArgs{
Name: pulumi.String("example"),
EnvironmentVariables: pulumi.StringMap{
"_CUSTOM_IMAGE": pulumi.String("node:16"),
},
})
if err != nil {
return err
}
return nil
})
}package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.amplify.App;
import com.pulumi.aws.amplify.AppArgs;
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 App("example", AppArgs.builder()
.name("example")
.environmentVariables(Map.of("_CUSTOM_IMAGE", "node:16"))
.build());
}
}resources:
example:
type: aws:amplify:App
properties:
name: example
environmentVariables:
_CUSTOM_IMAGE: node:16Custom Headers
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const example = new aws.amplify.App("example", {
name: "example",
customHeaders: `customHeaders:
- pattern: '**'
headers:
- key: 'Strict-Transport-Security'
value: 'max-age=31536000; includeSubDomains'
- key: 'X-Frame-Options'
value: 'SAMEORIGIN'
- key: 'X-XSS-Protection'
value: '1; mode=block'
- key: 'X-Content-Type-Options'
value: 'nosniff'
- key: 'Content-Security-Policy'
value: "default-src 'self'"
`,
});import pulumi
import pulumi_aws as aws
example = aws.amplify.App("example",
name="example",
custom_headers="""customHeaders:
- pattern: '**'
headers:
- key: 'Strict-Transport-Security'
value: 'max-age=31536000; includeSubDomains'
- key: 'X-Frame-Options'
value: 'SAMEORIGIN'
- key: 'X-XSS-Protection'
value: '1; mode=block'
- key: 'X-Content-Type-Options'
value: 'nosniff'
- key: 'Content-Security-Policy'
value: "default-src 'self'"
""")using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var example = new Aws.Amplify.App("example", new()
{
Name = "example",
CustomHeaders = @"customHeaders:
- pattern: '**'
headers:
- key: 'Strict-Transport-Security'
value: 'max-age=31536000; includeSubDomains'
- key: 'X-Frame-Options'
value: 'SAMEORIGIN'
- key: 'X-XSS-Protection'
value: '1; mode=block'
- key: 'X-Content-Type-Options'
value: 'nosniff'
- key: 'Content-Security-Policy'
value: ""default-src 'self'""
",
});
});package main
import (
"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/amplify"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := amplify.NewApp(ctx, "example", &lify.AppArgs{
Name: pulumi.String("example"),
CustomHeaders: pulumi.String(`customHeaders:
- pattern: '**'
headers:
- key: 'Strict-Transport-Security'
value: 'max-age=31536000; includeSubDomains'
- key: 'X-Frame-Options'
value: 'SAMEORIGIN'
- key: 'X-XSS-Protection'
value: '1; mode=block'
- key: 'X-Content-Type-Options'
value: 'nosniff'
- key: 'Content-Security-Policy'
value: "default-src 'self'"
`),
})
if err != nil {
return err
}
return nil
})
}package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.amplify.App;
import com.pulumi.aws.amplify.AppArgs;
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 App("example", AppArgs.builder()
.name("example")
.customHeaders("""
customHeaders:
- pattern: '**'
headers:
- key: 'Strict-Transport-Security'
value: 'max-age=31536000; includeSubDomains'
- key: 'X-Frame-Options'
value: 'SAMEORIGIN'
- key: 'X-XSS-Protection'
value: '1; mode=block'
- key: 'X-Content-Type-Options'
value: 'nosniff'
- key: 'Content-Security-Policy'
value: "default-src 'self'"
""")
.build());
}
}resources:
example:
type: aws:amplify:App
properties:
name: example
customHeaders: |
customHeaders:
- pattern: '**'
headers:
- key: 'Strict-Transport-Security'
value: 'max-age=31536000; includeSubDomains'
- key: 'X-Frame-Options'
value: 'SAMEORIGIN'
- key: 'X-XSS-Protection'
value: '1; mode=block'
- key: 'X-Content-Type-Options'
value: 'nosniff'
- key: 'Content-Security-Policy'
value: "default-src 'self'"Import
Using pulumi import, import Amplify App using Amplify App ID (appId). For example:
$ pulumi import aws:amplify/app:App example d2ypk4k47z8u6App ID can be obtained from App ARN (e.g., arn:aws:amplify:us-east-1:12345678:apps/d2ypk4k47z8u6). //////
Properties
Personal access token for a third-party source control system for an Amplify app. This token must have write access to the relevant repo to create a webhook and a read-only deploy key for the Amplify project. The token is not stored, so after applying this attribute can be removed and the setup token deleted.