@pulumi/aws
Version:
A Pulumi package for creating and managing Amazon Web Services (AWS) cloud resources.
224 lines • 10.2 kB
JavaScript
// *** WARNING: this file was generated by pulumi-language-nodejs. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
Object.defineProperty(exports, "__esModule", { value: true });
exports.Branch = void 0;
const pulumi = require("@pulumi/pulumi");
const utilities = require("../utilities");
/**
* Provides an Amplify Branch resource.
*
* ## Example Usage
*
* ```typescript
* import * as pulumi from "@pulumi/pulumi";
* import * as aws from "@pulumi/aws";
*
* const example = new aws.amplify.App("example", {name: "app"});
* const master = new aws.amplify.Branch("master", {
* appId: example.id,
* branchName: "master",
* framework: "React",
* stage: "PRODUCTION",
* environmentVariables: {
* REACT_APP_API_SERVER: "https://api.example.com",
* },
* });
* ```
*
* ### Basic Authentication
*
* ```typescript
* 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: "app"});
* const master = new aws.amplify.Branch("master", {
* appId: example.id,
* branchName: "master",
* enableBasicAuth: true,
* basicAuthCredentials: std.base64encode({
* input: "username:password",
* }).then(invoke => invoke.result),
* });
* ```
*
* ### Notifications
*
* Amplify Console uses EventBridge (formerly known as CloudWatch Events) and SNS for email notifications. To implement the same functionality, you need to set `enableNotification` in a `aws.amplify.Branch` resource, as well as creating an EventBridge Rule, an SNS topic, and SNS subscriptions.
*
* ```typescript
* import * as pulumi from "@pulumi/pulumi";
* import * as aws from "@pulumi/aws";
*
* const example = new aws.amplify.App("example", {name: "app"});
* const master = new aws.amplify.Branch("master", {
* appId: example.id,
* branchName: "master",
* enableNotification: true,
* });
* // EventBridge Rule for Amplify notifications
* const amplifyAppMasterEventRule = new aws.cloudwatch.EventRule("amplify_app_master", {
* name: pulumi.interpolate`amplify-${app.id}-${master.branchName}-branch-notification`,
* description: pulumi.interpolate`AWS Amplify build notifications for : App: ${app.id} Branch: ${master.branchName}`,
* eventPattern: pulumi.jsonStringify({
* detail: {
* appId: [example.id],
* branchName: [master.branchName],
* jobStatus: [
* "SUCCEED",
* "FAILED",
* "STARTED",
* ],
* },
* "detail-type": ["Amplify Deployment Status Change"],
* source: ["aws.amplify"],
* }),
* });
* // SNS Topic for Amplify notifications
* const amplifyAppMasterTopic = new aws.sns.Topic("amplify_app_master", {name: pulumi.interpolate`amplify-${app.id}_${master.branchName}`});
* const amplifyAppMasterEventTarget = new aws.cloudwatch.EventTarget("amplify_app_master", {
* rule: amplifyAppMasterEventRule.name,
* targetId: master.branchName,
* arn: amplifyAppMasterTopic.arn,
* inputTransformer: {
* inputPaths: {
* jobId: "$.detail.jobId",
* appId: "$.detail.appId",
* region: "$.region",
* branch: "$.detail.branchName",
* 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. \"",
* },
* });
* const amplifyAppMaster = aws.iam.getPolicyDocumentOutput({
* statements: [{
* sid: pulumi.interpolate`Allow_Publish_Events ${master.arn}`,
* effect: "Allow",
* actions: ["SNS:Publish"],
* principals: [{
* type: "Service",
* identifiers: ["events.amazonaws.com"],
* }],
* resources: [amplifyAppMasterTopic.arn],
* }],
* });
* const amplifyAppMasterTopicPolicy = new aws.sns.TopicPolicy("amplify_app_master", {
* arn: amplifyAppMasterTopic.arn,
* policy: amplifyAppMaster.apply(amplifyAppMaster => amplifyAppMaster.json),
* });
* const _this = new aws.sns.TopicSubscription("this", {
* topic: amplifyAppMasterTopic.arn,
* protocol: "email",
* endpoint: "user@acme.com",
* });
* ```
*
* ## Import
*
* Using `pulumi import`, import Amplify branch using `app_id` and `branch_name`. For example:
*
* ```sh
* $ pulumi import aws:amplify/branch:Branch master d2ypk4k47z8u6/master
* ```
*/
class Branch extends pulumi.CustomResource {
/**
* Get an existing Branch resource's state with the given name, ID, and optional extra
* properties used to qualify the lookup.
*
* @param name The _unique_ name of the resulting resource.
* @param id The _unique_ provider ID of the resource to lookup.
* @param state Any extra arguments used during the lookup.
* @param opts Optional settings to control the behavior of the CustomResource.
*/
static get(name, id, state, opts) {
return new Branch(name, state, { ...opts, id: id });
}
/**
* Returns true if the given object is an instance of Branch. This is designed to work even
* when multiple copies of the Pulumi SDK have been loaded into the same process.
*/
static isInstance(obj) {
if (obj === undefined || obj === null) {
return false;
}
return obj['__pulumiType'] === Branch.__pulumiType;
}
constructor(name, argsOrState, opts) {
let resourceInputs = {};
opts = opts || {};
if (opts.id) {
const state = argsOrState;
resourceInputs["appId"] = state?.appId;
resourceInputs["arn"] = state?.arn;
resourceInputs["associatedResources"] = state?.associatedResources;
resourceInputs["backendEnvironmentArn"] = state?.backendEnvironmentArn;
resourceInputs["basicAuthCredentials"] = state?.basicAuthCredentials;
resourceInputs["branchName"] = state?.branchName;
resourceInputs["customDomains"] = state?.customDomains;
resourceInputs["description"] = state?.description;
resourceInputs["destinationBranch"] = state?.destinationBranch;
resourceInputs["displayName"] = state?.displayName;
resourceInputs["enableAutoBuild"] = state?.enableAutoBuild;
resourceInputs["enableBasicAuth"] = state?.enableBasicAuth;
resourceInputs["enableNotification"] = state?.enableNotification;
resourceInputs["enablePerformanceMode"] = state?.enablePerformanceMode;
resourceInputs["enablePullRequestPreview"] = state?.enablePullRequestPreview;
resourceInputs["enableSkewProtection"] = state?.enableSkewProtection;
resourceInputs["environmentVariables"] = state?.environmentVariables;
resourceInputs["framework"] = state?.framework;
resourceInputs["pullRequestEnvironmentName"] = state?.pullRequestEnvironmentName;
resourceInputs["region"] = state?.region;
resourceInputs["sourceBranch"] = state?.sourceBranch;
resourceInputs["stage"] = state?.stage;
resourceInputs["tags"] = state?.tags;
resourceInputs["tagsAll"] = state?.tagsAll;
resourceInputs["ttl"] = state?.ttl;
}
else {
const args = argsOrState;
if (args?.appId === undefined && !opts.urn) {
throw new Error("Missing required property 'appId'");
}
if (args?.branchName === undefined && !opts.urn) {
throw new Error("Missing required property 'branchName'");
}
resourceInputs["appId"] = args?.appId;
resourceInputs["backendEnvironmentArn"] = args?.backendEnvironmentArn;
resourceInputs["basicAuthCredentials"] = args?.basicAuthCredentials ? pulumi.secret(args.basicAuthCredentials) : undefined;
resourceInputs["branchName"] = args?.branchName;
resourceInputs["description"] = args?.description;
resourceInputs["displayName"] = args?.displayName;
resourceInputs["enableAutoBuild"] = args?.enableAutoBuild;
resourceInputs["enableBasicAuth"] = args?.enableBasicAuth;
resourceInputs["enableNotification"] = args?.enableNotification;
resourceInputs["enablePerformanceMode"] = args?.enablePerformanceMode;
resourceInputs["enablePullRequestPreview"] = args?.enablePullRequestPreview;
resourceInputs["enableSkewProtection"] = args?.enableSkewProtection;
resourceInputs["environmentVariables"] = args?.environmentVariables;
resourceInputs["framework"] = args?.framework;
resourceInputs["pullRequestEnvironmentName"] = args?.pullRequestEnvironmentName;
resourceInputs["region"] = args?.region;
resourceInputs["stage"] = args?.stage;
resourceInputs["tags"] = args?.tags;
resourceInputs["ttl"] = args?.ttl;
resourceInputs["arn"] = undefined /*out*/;
resourceInputs["associatedResources"] = undefined /*out*/;
resourceInputs["customDomains"] = undefined /*out*/;
resourceInputs["destinationBranch"] = undefined /*out*/;
resourceInputs["sourceBranch"] = undefined /*out*/;
resourceInputs["tagsAll"] = undefined /*out*/;
}
opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts);
const secretOpts = { additionalSecretOutputs: ["basicAuthCredentials"] };
opts = pulumi.mergeOptions(opts, secretOpts);
super(Branch.__pulumiType, name, resourceInputs, opts);
}
}
exports.Branch = Branch;
/** @internal */
Branch.__pulumiType = 'aws:amplify/branch:Branch';
//# sourceMappingURL=branch.js.map
;