Branch
Provides an Amplify Branch resource.
Example Usage
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.Branch;
import com.pulumi.aws.amplify.BranchArgs;
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");
var master = new Branch("master", BranchArgs.builder()
.appId(example.id())
.branchName("master")
.framework("React")
.stage("PRODUCTION")
.environmentVariables(Map.of("REACT_APP_API_SERVER", "https://api.example.com"))
.build());
}
}
Notifications
Amplify Console uses EventBridge (formerly known as CloudWatch Events) and SNS for email notifications. To implement the same functionality, you need to set enable_notification
in a aws.amplify.Branch
resource, as well as creating an EventBridge Rule, an SNS topic, and SNS subscriptions.
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.Branch;
import com.pulumi.aws.amplify.BranchArgs;
import com.pulumi.aws.cloudwatch.EventRule;
import com.pulumi.aws.cloudwatch.EventRuleArgs;
import com.pulumi.aws.sns.Topic;
import com.pulumi.aws.cloudwatch.EventTarget;
import com.pulumi.aws.cloudwatch.EventTargetArgs;
import com.pulumi.aws.cloudwatch.inputs.EventTargetInputTransformerArgs;
import com.pulumi.aws.iam.IamFunctions;
import com.pulumi.aws.iam.inputs.GetPolicyDocumentArgs;
import com.pulumi.aws.sns.TopicPolicy;
import com.pulumi.aws.sns.TopicPolicyArgs;
import com.pulumi.aws.sns.TopicSubscription;
import com.pulumi.aws.sns.TopicSubscriptionArgs;
import static com.pulumi.codegen.internal.Serialization.*;
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");
var master = new Branch("master", BranchArgs.builder()
.appId(example.id())
.branchName("master")
.enableNotification(true)
.build());
var amplifyAppMasterEventRule = new EventRule("amplifyAppMasterEventRule", EventRuleArgs.builder()
.description(master.branchName().applyValue(branchName -> String.format("AWS Amplify build notifications for : App: %s Branch: %s", aws_amplify_app.app().id(),branchName)))
.eventPattern(Output.tuple(example.id(), master.branchName()).applyValue(values -> {
var id = values.t1;
var branchName = values.t2;
return serializeJson(
jsonObject(
jsonProperty("detail", jsonObject(
jsonProperty("appId", jsonArray(id)),
jsonProperty("branchName", jsonArray(branchName)),
jsonProperty("jobStatus", jsonArray(
"SUCCEED",
"FAILED",
"STARTED"
))
)),
jsonProperty("detail-type", jsonArray("Amplify Deployment Status Change")),
jsonProperty("source", jsonArray("aws.amplify"))
));
}))
.build());
var amplifyAppMasterTopic = new Topic("amplifyAppMasterTopic");
var amplifyAppMasterEventTarget = new EventTarget("amplifyAppMasterEventTarget", EventTargetArgs.builder()
.rule(amplifyAppMasterEventRule.name())
.arn(amplifyAppMasterTopic.arn())
.inputTransformer(EventTargetInputTransformerArgs.builder()
.inputPaths(Map.ofEntries(
Map.entry("jobId", "$.detail.jobId"),
Map.entry("appId", "$.detail.appId"),
Map.entry("region", "$.region"),
Map.entry("branch", "$.detail.branchName"),
Map.entry("status", "$.detail.jobStatus")
))
.inputTemplate("\"Build notification from the AWS Amplify Console for app: https://<branch>.<appId>.amplifyapp.com/. Your build status is <status>. Go to https://console.aws.amazon.com/amplify/home?region=<region>#<appId>/<branch>/<jobId> to view details on your build. \"")
.build())
.build());
final var amplifyAppMasterPolicyDocument = IamFunctions.getPolicyDocument(GetPolicyDocumentArgs.builder()
.statements(GetPolicyDocumentStatementArgs.builder()
.sid(master.arn().applyValue(arn -> String.format("Allow_Publish_Events %s", arn)))
.effect("Allow")
.actions("SNS:Publish")
.principals(GetPolicyDocumentStatementPrincipalArgs.builder()
.type("Service")
.identifiers("events.amazonaws.com")
.build())
.resources(amplifyAppMasterTopic.arn())
.build())
.build());
var amplifyAppMasterTopicPolicy = new TopicPolicy("amplifyAppMasterTopicPolicy", TopicPolicyArgs.builder()
.arn(amplifyAppMasterTopic.arn())
.policy(amplifyAppMasterPolicyDocument.applyValue(getPolicyDocumentResult -> getPolicyDocumentResult).applyValue(amplifyAppMasterPolicyDocument -> amplifyAppMasterPolicyDocument.applyValue(getPolicyDocumentResult -> getPolicyDocumentResult.json())))
.build());
var this_ = new TopicSubscription("this", TopicSubscriptionArgs.builder()
.topic(amplifyAppMasterTopic.arn())
.protocol("email")
.endpoint("user@acme.com")
.build());
}
}
Import
Amplify branch can be imported using app_id
and branch_name
, e.g.,
$ pulumi import aws:amplify/branch:Branch master d2ypk4k47z8u6/master
Properties
A list of custom resources that are linked to this branch.
ARN for a backend environment that is part of an Amplify app.
Basic authorization credentials for the branch.
Name for the branch.
Custom domains for the branch.
Description for the branch.
Destination branch if the branch is a pull request branch.
Display name for a branch. This is used as the default domain prefix.
Enables auto building for the branch.
Enables basic authorization for the branch.
Enables notifications for the branch.
Enables performance mode for the branch.
Enables pull request previews for this branch.
Environment variables for the branch.
Amplify environment name for the pull request.
Source branch if the branch is a pull request branch.