UNPKG

@pulumi/aws

Version:

A Pulumi package for creating and managing Amazon Web Services (AWS) cloud resources.

224 lines • 10.2 kB
"use strict"; // *** 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