Git Product home page Git Product logo

pulumi-aws's Introduction

Actions Status Slack NPM version Python version NuGet version PkgGoDev License

Amazon Web Services (AWS) provider

The Amazon Web Services (AWS) resource provider for Pulumi lets you use AWS resources in your cloud programs. To use this package, install the Pulumi CLI. For a streamlined Pulumi walkthrough, including language runtime installation and AWS configuration, select "Get Started" below.

Installing

This package is available in many languages in the standard packaging formats.

Node.js (Java/TypeScript)

To use from JavaScript or TypeScript in Node.js, install using either npm:

$ npm install @pulumi/aws

or yarn:

$ yarn add @pulumi/aws

Python

To use from Python, install using pip:

$ pip install pulumi_aws

Go

To use from Go, use go get to grab the latest version of the library

$ go get github.com/pulumi/pulumi-aws/sdk/v6

.NET

To use from .NET, install using dotnet add package:

$ dotnet add package Pulumi.Aws

Concepts

The @pulumi/aws package provides a strongly-typed means to create cloud applications that create and interact closely with AWS resources. Resources are exposed for the entirety of AWS resources and their properties, including (but not limited to), 'apigateway', 'cloudformation', 'EC2', 'ECS', 'iam', 'lambda', etc. Many convenience APIs have also been added to make development easier and to help avoid common mistakes, and to get stronger typing.

Serverless Functions

The aws.lambda.CallbackFunction class allows you to create an AWS lambda function directly out of a JavaScript/TypeScript function object of the right signature. This allows a Pulumi program to simply define a lambda using a simple lambda in the language of choice, while having Pulumi itself do the appropriate transformation into the final AWS Lambda resource.

This makes many APIs easier to use, such as defining a Lambda to execute when an S3 Bucket is manipulated, or a CloudWatch timer is fired. To see some examples of this in action, please refer to the examples/ directory.

Configuration

The following configuration points are available:

  • aws:region - (Required) This is the AWS region.

  • aws:accessKey - (Optional) This is the AWS access key. It can also be sourced from the AWS_ACCESS_KEY_ID environment variable, or via a shared credentials file if aws:profile is specified.

  • aws:secretKey - (Optional) This is the AWS secret key. It can also be sourced from the AWS_SECRET_ACCESS_KEY environment variable, or via a shared credentials file if aws:profile is specified.

  • aws:profile - (Optional) This is the AWS profile name as set in the shared credentials file.

  • aws:sharedCredentialsFiles - (Optional) List of paths to the shared credentials file. If not set and a profile is used, the default value is [~/.aws/credentials]. A single value can also be set with the AWS_SHARED_CREDENTIALS_FILE environment variable.

  • aws:token - (Optional) Session token for validating temporary credentials. Typically provided after successful identity federation or Multi-Factor Authentication (MFA) login. With MFA login, this is the session token provided afterward, not the 6 digit MFA code used to get temporary credentials. It can also be sourced from the AWS_SESSION_TOKEN environment variable.

  • aws:maxRetries - (Optional) This is the maximum number of times an API call is retried, in the case where requests are being throttled or experiencing transient failures. The delay between the subsequent API calls increases exponentially. If omitted, the default value is 25.

  • aws:allowedAccountIds - (Optional) List of allowed AWS account IDs to prevent you from mistakenly using an incorrect one. Conflicts with aws:forbiddenAccountIds.

  • aws:endpoints - (Optional) Configuration block for customizing service endpoints. See the Custom Service Endpoints Guide for more information about connecting to alternate AWS endpoints or AWS compatible solutions. See also aws:useFipsEndpoint.

  • aws:forbiddenAccountIds - (Optional) List of forbidden AWS account IDs to prevent you from mistakenly using the wrong one. Conflicts with aws:allowedAccountIds.

  • aws:assumeRole - (Optional) Supports the following (optional) arguments: durationSections: Number of seconds to restrict the assume role session duration. externalId: External identifier to use when assuming the role. policy: IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. policyArns: Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the role. roleArn: Amazon Resource Name (ARN) of the IAM Role to assume. sessionName: Session name to use when assuming the role. tags: Map of assume role session tags.

  • aws:insecure - (Optional) Explicitly allow the provider to perform "insecure" SSL requests. If omitted, the default value is false.

  • aws:skipCredentialsValidation - (Optional) Skip the credentials validation via the STS API. Useful for AWS API implementations that do not have STS available or implemented. Default value is false. Can be set via the environment variable AWS_SKIP_CREDENTIALS_VALIDATION.

  • aws:skipRegionValidation - (Optional) Skip validation of provided region name. Useful for AWS-like implementations that use their own region names or to bypass the validation for regions that aren't publicly available yet. Default value is true.

  • aws:skipRequestionAccountId - (Optional) Skip requesting the account ID. Useful for AWS API implementations that do not have the IAM, STS API, or metadata API. Default value is false. When specified, the use of ARNs is compromised as there is no accountID available to construct the ARN.

  • aws:skipMetadataApiCheck - (Optional) Skip the AWS Metadata API check. Useful for AWS API implementations that do not have a metadata API endpoint. This provider from authenticating via the Metadata API by default. You may need to use other authentication methods like static credentials, configuration variables, or environment variables. Default is true. Can be set via the environment variable AWS_SKIP_METADATA_API_CHECK.

  • aws:s3UsePathStyle - (Optional) Set this to true to force the request to use path-style addressing, i.e., http://s3.amazonaws.com/BUCKET/KEY. By default, the S3 client will use virtual hosted bucket addressing, http://BUCKET.s3.amazonaws.com/KEY, when possible. Specific to the Amazon S3 service. Default is false.

  • aws:useFipsEndpoint - (Optional) Force the provider to resolve endpoints with FIPS capability. Can also be set with the AWS_USE_FIPS_ENDPOINT environment variable.

Authenticating pulumi-aws via EC2 Instance Metadata?

As of pulumi-aws v3.28.1, the default behaviour for the provider was changed to disable MetadataApiCheck by default. This means, you need to do either of the following

  1. When using the default provider:
pulumi config set aws:skipMetadataApiCheck false
  1. When using a named provider
const myProvider = new aws.Provider("named-provider", {
  // other config
  skipMetadataApiCheck: false,
});
var provider = new Aws.Provider("named-provider", new Aws.ProviderArgs
{
  // other config
  SkipMetadataApiCheck = false,
});
provider, err := aws.NewProvider(ctx, "named-provider", &aws.ProviderArgs{
    // other config
    SkipMetadataApiCheck: pulumi.BoolPtr(false),
})
provider = pulumi_aws.Provider('named-provider', skip_metadata_api_check=False)

Reference

For further information, visit AWS in the Pulumi Registry or for detailed API reference documentation, visit AWS API Docs in the Pulumi Registry.

pulumi-aws's People

Contributors

aaronfriel avatar corymhall avatar cyrusnajmabadi avatar danielrbradley avatar dependabot[bot] avatar ellismg avatar guineveresaenger avatar iwahbe avatar jaxxstorm avatar jen20 avatar jkodroff avatar joeduffy avatar justinvp avatar khyperia avatar komalali avatar kpitzen avatar lukehoban avatar mikhailshilkov avatar mjeffryes avatar mmdriley avatar pgavlin avatar pierskarsenbarg avatar pulumi-bot avatar rquitales avatar squaremo avatar stack72 avatar swgillespie avatar t0yv0 avatar thomas11 avatar venelinmartinov avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pulumi-aws's Issues

Should we require explicitly providing AWS Access Key Id and Secret Access Key?

Today, we require explicitly providing aws:config:region, but we pick up the access key and secret from the ambient environment.

This is inconsistent, and can lead to confusion about what the IAM credentials for the deployment really are, as they depend ambiently on where the program was run.

We could choose to require that these be provided via config settings instead of picking them up ambiently - in a similar way to how we require region today.

On the other hand, having to explicitly specify these will make simple examples a lot more painful, and will put a lot more burden on a robust secrets story so that creds don't accidentally leak.

Beanstalk test failing

The examples/beanstalk test is currently failing with the following output:

=== RUN   TestExamples//Users/luke/go/src/github.com/pulumi/aws/examples/beanstalk
[ /pulumi/aws/examples/beanstalk ] sample: /Users/luke/go/src/github.com/pulumi/aws/examples/beanstalk
[ /pulumi/aws/examples/beanstalk ] lumijs: /usr/local/bin/lumijs
[ /pulumi/aws/examples/beanstalk ] lumi: /Users/luke/go/bin/lumi
[ /pulumi/aws/examples/beanstalk ] yarn: /usr/local/bin/yarn
[ /pulumi/aws/examples/beanstalk ]
[ /pulumi/aws/examples/beanstalk ] **** Invoke '/usr/local/bin/yarn link @lumi/lumirt' in /Users/luke/go/src/github.com/pulumi/aws/examples/beanstalk
[ /pulumi/aws/examples/beanstalk ] yarn link v0.24.6
[ /pulumi/aws/examples/beanstalk ] success Registered "@lumi/lumirt".
[ /pulumi/aws/examples/beanstalk ] Done in 0.02s.
[ /pulumi/aws/examples/beanstalk ]
[ /pulumi/aws/examples/beanstalk ] **** Invoke '/usr/local/bin/yarn link @lumi/lumi' in /Users/luke/go/src/github.com/pulumi/aws/examples/beanstalk
[ /pulumi/aws/examples/beanstalk ] yarn link v0.24.6
[ /pulumi/aws/examples/beanstalk ] success Registered "@lumi/lumi".
[ /pulumi/aws/examples/beanstalk ] Done in 0.02s.
[ /pulumi/aws/examples/beanstalk ]
[ /pulumi/aws/examples/beanstalk ] **** Invoke '/usr/local/bin/yarn link @lumi/aws' in /Users/luke/go/src/github.com/pulumi/aws/examples/beanstalk
[ /pulumi/aws/examples/beanstalk ] yarn link v0.24.6
[ /pulumi/aws/examples/beanstalk ] success Registered "@lumi/aws".
[ /pulumi/aws/examples/beanstalk ] Done in 0.02s.
[ /pulumi/aws/examples/beanstalk ]
[ /pulumi/aws/examples/beanstalk ] **** Invoke '/usr/local/bin/lumijs --verbose' in /Users/luke/go/src/github.com/pulumi/aws/examples/beanstalk
[ /pulumi/aws/examples/beanstalk ] files: ["/Users/luke/go/src/github.com/pulumi/aws/examples/beanstalk/index.ts"]
[ /pulumi/aws/examples/beanstalk ] options: {
[ /pulumi/aws/examples/beanstalk ]     "outDir": "/Users/luke/go/src/github.com/pulumi/aws/examples/beanstalk/.lumi/bin",
[ /pulumi/aws/examples/beanstalk ]     "target": 2,
[ /pulumi/aws/examples/beanstalk ]     "module": 1,
[ /pulumi/aws/examples/beanstalk ]     "moduleResolution": 2,
[ /pulumi/aws/examples/beanstalk ]     "declaration": true,
[ /pulumi/aws/examples/beanstalk ]     "sourceMap": true,
[ /pulumi/aws/examples/beanstalk ]     "stripInternal": true,
[ /pulumi/aws/examples/beanstalk ]     "experimentalDecorators": true,
[ /pulumi/aws/examples/beanstalk ]     "pretty": true,
[ /pulumi/aws/examples/beanstalk ]     "noFallthroughCasesInSwitch": true,
[ /pulumi/aws/examples/beanstalk ]     "noImplicitAny": true,
[ /pulumi/aws/examples/beanstalk ]     "noImplicitReturns": true,
[ /pulumi/aws/examples/beanstalk ]     "forceConsistentCasingInFileNames": true,
[ /pulumi/aws/examples/beanstalk ]     "strictNullChecks": true
[ /pulumi/aws/examples/beanstalk ] }
[ /pulumi/aws/examples/beanstalk ] Transforming source file: /Users/luke/go/src/github.com/pulumi/aws/examples/beanstalk/index.ts
[ /pulumi/aws/examples/beanstalk ] Detected named import aws:elasticbeanstalk/index:Application as Application from /usr/local/lumi/packs/aws/elasticbeanstalk/index
[ /pulumi/aws/examples/beanstalk ] Detected named import aws:elasticbeanstalk/index:ApplicationVersion as ApplicationVersion from /usr/local/lumi/packs/aws/elasticbeanstalk/index
[ /pulumi/aws/examples/beanstalk ] Detected named import aws:elasticbeanstalk/index:Environment as Environment from /usr/local/lumi/packs/aws/elasticbeanstalk/index
[ /pulumi/aws/examples/beanstalk ] Detected bulk import iam=/usr/local/lumi/packs/aws/iam/index
[ /pulumi/aws/examples/beanstalk ] Detected named import aws:s3/index:Bucket as Bucket from /usr/local/lumi/packs/aws/s3/index
[ /pulumi/aws/examples/beanstalk ] Detected named import aws:s3/index:Object as Object from /usr/local/lumi/packs/aws/s3/index
[ /pulumi/aws/examples/beanstalk ] Detected named import lumi:asset/index:File as File from /Users/luke/go/src/github.com/pulumi/lumi/lib/lumi/asset/index
[ /pulumi/aws/examples/beanstalk ] Detected named import lumirt:index:jsonStringify as jsonStringify from /Users/luke/go/src/github.com/pulumi/lumi/lib/lumirt/index
[ /pulumi/aws/examples/beanstalk ]
[ /pulumi/aws/examples/beanstalk ] **** Invoke '/Users/luke/go/bin/lumi env init integrationtesting' in /Users/luke/go/src/github.com/pulumi/aws/examples/beanstalk
[ /pulumi/aws/examples/beanstalk ] Environment 'integrationtesting' initialized; see `lumi deploy` to deploy into it
[ /pulumi/aws/examples/beanstalk ]
[ /pulumi/aws/examples/beanstalk ] **** Invoke '/Users/luke/go/bin/lumi config aws:config:region eu-west-1' in /Users/luke/go/src/github.com/pulumi/aws/examples/beanstalk
[ /pulumi/aws/examples/beanstalk ]
[ /pulumi/aws/examples/beanstalk ] **** Invoke '/Users/luke/go/bin/lumi deploy' in /Users/luke/go/src/github.com/pulumi/aws/examples/beanstalk
[ /pulumi/aws/examples/beanstalk ] Deploying changes:
[ /pulumi/aws/examples/beanstalk ] Applying step #1 [create]
[ /pulumi/aws/examples/beanstalk ] + aws:s3/bucket:Bucket:
[ /pulumi/aws/examples/beanstalk ]       [urn=urn:lumi:integrationtesting::beanstalk:index::aws:s3/bucket:Bucket::sourceBucket]
[ /pulumi/aws/examples/beanstalk ]       name                    : "sourceBucket"
[ /pulumi/aws/examples/beanstalk ] warning: S3 bucket: sourcebucket-02d03d634eac6060338108c89b2c3ea6d20578eb, no CORS configuration could be found.
[ /pulumi/aws/examples/beanstalk ]       accelerationStatus: ""
[ /pulumi/aws/examples/beanstalk ]       acl               : "private"
[ /pulumi/aws/examples/beanstalk ]       arn               : "arn:aws:s3:::sourcebucket-02d03d634eac6060338108c89b2c3ea6d20578eb"
[ /pulumi/aws/examples/beanstalk ]       bucket            : "sourcebucket-02d03d634eac6060338108c89b2c3ea6d20578eb"
[ /pulumi/aws/examples/beanstalk ]       bucketDomainName  : "sourcebucket-02d03d634eac6060338108c89b2c3ea6d20578eb.s3.amazonaws.com"
[ /pulumi/aws/examples/beanstalk ]       forceDestroy      : false
[ /pulumi/aws/examples/beanstalk ]       hostedZoneId      : "Z1BKCTXD74EZPE"
[ /pulumi/aws/examples/beanstalk ]       id                : "sourcebucket-02d03d634eac6060338108c89b2c3ea6d20578eb"
[ /pulumi/aws/examples/beanstalk ]       logging           : []
[ /pulumi/aws/examples/beanstalk ]       region            : "eu-west-1"
[ /pulumi/aws/examples/beanstalk ]       requestPayer      : "BucketOwner"
[ /pulumi/aws/examples/beanstalk ]       tags              : {}
[ /pulumi/aws/examples/beanstalk ]       versioning        : [
[ /pulumi/aws/examples/beanstalk ]           [0]: {
[ /pulumi/aws/examples/beanstalk ]                    enabled  : false
[ /pulumi/aws/examples/beanstalk ]                    mfaDelete: false
[ /pulumi/aws/examples/beanstalk ]                }
[ /pulumi/aws/examples/beanstalk ]       ]
[ /pulumi/aws/examples/beanstalk ]       website           : []
[ /pulumi/aws/examples/beanstalk ] Applying step #2 [create]
[ /pulumi/aws/examples/beanstalk ] + aws:s3/object:Object:
[ /pulumi/aws/examples/beanstalk ]       [urn=urn:lumi:integrationtesting::beanstalk:index::aws:s3/object:Object::sourcebucket-02d03d634eac6060338108c89b2c3ea6d20578eb:testSource/app.zip]
[ /pulumi/aws/examples/beanstalk ]       bucket              : "sourcebucket-02d03d634eac6060338108c89b2c3ea6d20578eb"
[ /pulumi/aws/examples/beanstalk ]       key                 : "testSource/app.zip"
[ /pulumi/aws/examples/beanstalk ]       source              : asset { file://app.zip }
[ /pulumi/aws/examples/beanstalk ]       acl                 : "private"
[ /pulumi/aws/examples/beanstalk ]       cacheControl        : ""
[ /pulumi/aws/examples/beanstalk ]       contentDisposition  : ""
[ /pulumi/aws/examples/beanstalk ]       contentEncoding     : ""
[ /pulumi/aws/examples/beanstalk ]       contentLanguage     : ""
[ /pulumi/aws/examples/beanstalk ]       contentType         : "binary/octet-stream"
[ /pulumi/aws/examples/beanstalk ]       etag                : "8fc82246a694f85ecc90eae50c0e712a"
[ /pulumi/aws/examples/beanstalk ]       id                  : "testSource/app.zip"
[ /pulumi/aws/examples/beanstalk ]       serverSideEncryption: ""
[ /pulumi/aws/examples/beanstalk ]       source              : "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/lumi-asset-for-tf851482557"
[ /pulumi/aws/examples/beanstalk ]       storageClass        : "STANDARD"
[ /pulumi/aws/examples/beanstalk ]       tags                : {}
[ /pulumi/aws/examples/beanstalk ]       versionId           : ""
[ /pulumi/aws/examples/beanstalk ]       websiteRedirect     : ""
[ /pulumi/aws/examples/beanstalk ] Applying step #3 [create]
[ /pulumi/aws/examples/beanstalk ] + aws:elasticbeanstalk/application:Application:
[ /pulumi/aws/examples/beanstalk ]       [urn=urn:lumi:integrationtesting::beanstalk:index::aws:elasticbeanstalk/application:Application::myapp]
[ /pulumi/aws/examples/beanstalk ]       name           : "myapp"
[ /pulumi/aws/examples/beanstalk ]       applicationName: "myapp-619710701803f646ce2a84afd0a79076e6439f6c"
[ /pulumi/aws/examples/beanstalk ]       description    : ""
[ /pulumi/aws/examples/beanstalk ]       id             : "myapp-619710701803f646ce2a84afd0a79076e6439f6c"
[ /pulumi/aws/examples/beanstalk ] Applying step #4 [create]
[ /pulumi/aws/examples/beanstalk ] + aws:elasticbeanstalk/applicationVersion:ApplicationVersion:
[ /pulumi/aws/examples/beanstalk ]       [urn=urn:lumi:integrationtesting::beanstalk:index::aws:elasticbeanstalk/applicationVersion:ApplicationVersion::myappversion]
[ /pulumi/aws/examples/beanstalk ]       application           : "myapp-619710701803f646ce2a84afd0a79076e6439f6c"
[ /pulumi/aws/examples/beanstalk ]       bucket                : "sourcebucket-02d03d634eac6060338108c89b2c3ea6d20578eb"
[ /pulumi/aws/examples/beanstalk ]       key                   : "testSource/app.zip"
[ /pulumi/aws/examples/beanstalk ]       name                  : "myappversion"
[ /pulumi/aws/examples/beanstalk ] info: Elastic Beanstalk Application Version Label: myappversion-afcc5ff8765fcfba74156e13a4fa7fb6e52a3e87
[ /pulumi/aws/examples/beanstalk ]       applicationVersionName: "myappversion-afcc5ff8765fcfba74156e13a4fa7fb6e52a3e87"
[ /pulumi/aws/examples/beanstalk ]       description           : ""
[ /pulumi/aws/examples/beanstalk ]       forceDelete           : false
[ /pulumi/aws/examples/beanstalk ]       id                    : "myappversion-afcc5ff8765fcfba74156e13a4fa7fb6e52a3e87"
[ /pulumi/aws/examples/beanstalk ] Applying step #5 [create]
[ /pulumi/aws/examples/beanstalk ] + aws:iam/role:Role:
[ /pulumi/aws/examples/beanstalk ]       [urn=urn:lumi:integrationtesting::beanstalk:index::aws:iam/role:Role::myapp-instanceRole]
[ /pulumi/aws/examples/beanstalk ]       assumeRolePolicy   : "{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Sid\": \"\", \"Effect\": \"Allow\", \"Principal\": { \"Service\": \"ec2.amazonaws.com\"}, \"Action\": \"sts:AssumeRole\"}]}"
[ /pulumi/aws/examples/beanstalk ]       name               : "myapp-instanceRole"
[ /pulumi/aws/examples/beanstalk ]       arn                : "arn:aws:iam::153052954103:role/myapp-instanceRole-08f3cc26afa5f43e2da6bc7e796044c7e44af707"
[ /pulumi/aws/examples/beanstalk ]       assumeRolePolicy   : "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"ec2.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}"
[ /pulumi/aws/examples/beanstalk ]       createDate         : "2017-07-25T04:06:45Z"
[ /pulumi/aws/examples/beanstalk ]       forceDetachPolicies: false
[ /pulumi/aws/examples/beanstalk ]       id                 : "myapp-instanceRole-08f3cc26afa5f43e2da6bc7e796044c7e44af707"
[ /pulumi/aws/examples/beanstalk ]       path               : "/"
[ /pulumi/aws/examples/beanstalk ]       roleName           : "myapp-instanceRole-08f3cc26afa5f43e2da6bc7e796044c7e44af707"
[ /pulumi/aws/examples/beanstalk ]       uniqueId           : "AROAJGL63TRW5YY26ETL2"
[ /pulumi/aws/examples/beanstalk ] Applying step #6 [create]
[ /pulumi/aws/examples/beanstalk ] + aws:iam/rolePolicyAttachment:RolePolicyAttachment:
[ /pulumi/aws/examples/beanstalk ]       [urn=urn:lumi:integrationtesting::beanstalk:index::aws:iam/rolePolicyAttachment:RolePolicyAttachment::myapp-instanceRole-webtierPolicy]
[ /pulumi/aws/examples/beanstalk ]       name     : "myapp-instanceRole-webtierPolicy"
[ /pulumi/aws/examples/beanstalk ]       policyArn: "arn:aws:iam::aws:policy/AWSElasticBeanstalkWebTier"
[ /pulumi/aws/examples/beanstalk ]       role     : "myapp-instanceRole-08f3cc26afa5f43e2da6bc7e796044c7e44af707"
[ /pulumi/aws/examples/beanstalk ]       id       : "myapp-instanceRole-08f3cc26afa5f43e2da6bc7e796044c7e44af707-00684497e9bfb18cb48923115d"
[ /pulumi/aws/examples/beanstalk ] error: resource[aws].stderr: panic: runtime error: index out of range
[ /pulumi/aws/examples/beanstalk ] error: resource[aws].stderr:
[ /pulumi/aws/examples/beanstalk ] error: resource[aws].stderr: goroutine 64 [running]:
[ /pulumi/aws/examples/beanstalk ] error: resource[aws].stderr: github.com/pulumi/aws/vendor/github.com/pulumi/terraform-bridge/pkg/tfbridge.(*Provider).Check(0xc4205361e0, 0x62a6940, 0xc4205f90e0, 0xc42052bd20, 0xc4205361e0, 0x102946e, 0x0)
[ /pulumi/aws/examples/beanstalk ] error: resource[aws].stderr: 	/Users/luke/go/src/github.com/pulumi/aws/vendor/github.com/pulumi/terraform-bridge/pkg/tfbridge/provider.go:456 +0x42b
[ /pulumi/aws/examples/beanstalk ] error: resource[aws].stderr: github.com/pulumi/aws/vendor/github.com/pulumi/lumi/sdk/go/pkg/lumirpc._ResourceProvider_Check_Handler(0x2f20140, 0xc4205361e0, 0x62a6940, 0xc4205f90e0, 0xc42051ac80, 0x0, 0x0, 0x0, 0x0, 0x0)
[ /pulumi/aws/examples/beanstalk ] error: resource[aws].stderr: 	/Users/luke/go/src/github.com/pulumi/aws/vendor/github.com/pulumi/lumi/sdk/go/pkg/lumirpc/provider.pb.go:517 +0x28d
[ /pulumi/aws/examples/beanstalk ] error: resource[aws].stderr: github.com/pulumi/aws/vendor/google.golang.org/grpc.(*Server).processUnaryRPC(0xc4202928c0, 0x429d720, 0xc4202aa160, 0xc42026b800, 0xc4205311a0, 0x42de520, 0xc42060a2d0, 0x0, 0x0)
[ /pulumi/aws/examples/beanstalk ] error: resource[aws].stderr: 	/Users/luke/go/src/github.com/pulumi/aws/vendor/google.golang.org/grpc/server.go:781 +0xc41
[ /pulumi/aws/examples/beanstalk ] error: resource[aws].stderr: github.com/pulumi/aws/vendor/google.golang.org/grpc.(*Server).handleStream(0xc4202928c0, 0x429d720, 0xc4202aa160, 0xc42026b800, 0xc42060a2d0)
[ /pulumi/aws/examples/beanstalk ] error: resource[aws].stderr: 	/Users/luke/go/src/github.com/pulumi/aws/vendor/google.golang.org/grpc/server.go:981 +0x15a6
[ /pulumi/aws/examples/beanstalk ] error: resource[aws].stderr: github.com/pulumi/aws/vendor/google.golang.org/grpc.(*Server).serveStreams.func1.1(0xc42054aa40, 0xc4202928c0, 0x429d720, 0xc4202aa160, 0xc42026b800)
[ /pulumi/aws/examples/beanstalk ] error: resource[aws].stderr: 	/Users/luke/go/src/github.com/pulumi/aws/vendor/google.golang.org/grpc/server.go:551 +0xa9
[ /pulumi/aws/examples/beanstalk ] error: resource[aws].stderr: created by github.com/pulumi/aws/vendor/google.golang.org/grpc.(*Server).serveStreams.func1
[ /pulumi/aws/examples/beanstalk ] error: resource[aws].stderr: 	/Users/luke/go/src/github.com/pulumi/aws/vendor/google.golang.org/grpc/server.go:552 +0xa1
[ /pulumi/aws/examples/beanstalk ] 2017/07/24 21:06:47 transport: http2Client.notifyError got notified that the client transport was broken EOF.
[ /pulumi/aws/examples/beanstalk ] 2017/07/24 21:06:47 grpc: addrConn.resetTransport failed to create client transport: connection error: desc = "transport: dial tcp :57128: getsockopt: connection refused"; Reconnecting to {:57128 <nil>}
[ /pulumi/aws/examples/beanstalk ] info: 6 deployed changes:
[ /pulumi/aws/examples/beanstalk ]     + 6 resources created
[ /pulumi/aws/examples/beanstalk ] Deployment duration: 22.995448429s
[ /pulumi/aws/examples/beanstalk ] 2017/07/24 21:06:47 grpc: addrConn.transportMonitor exits due to: context canceled
[ /pulumi/aws/examples/beanstalk ] error: rpc error: code = Internal desc = transport is closing
[ /pulumi/aws/examples/beanstalk ]
[ /pulumi/aws/examples/beanstalk ] **** Invoke '/Users/luke/go/bin/lumi destroy --yes' in /Users/luke/go/src/github.com/pulumi/aws/examples/beanstalk
[ /pulumi/aws/examples/beanstalk ] Deploying changes:
[ /pulumi/aws/examples/beanstalk ] Applying step #1 [delete]
[ /pulumi/aws/examples/beanstalk ] - aws:iam/rolePolicyAttachment:RolePolicyAttachment:
[ /pulumi/aws/examples/beanstalk ]       [id=myapp-instanceRole-08f3cc26afa5f43e2da6bc7e796044c7e44af707-00684497e9bfb18cb48923115d]
[ /pulumi/aws/examples/beanstalk ]       [urn=urn:lumi:integrationtesting::beanstalk:index::aws:iam/rolePolicyAttachment:RolePolicyAttachment::myapp-instanceRole-webtierPolicy]
[ /pulumi/aws/examples/beanstalk ]       name     : "myapp-instanceRole-webtierPolicy"
[ /pulumi/aws/examples/beanstalk ]       policyArn: "arn:aws:iam::aws:policy/AWSElasticBeanstalkWebTier"
[ /pulumi/aws/examples/beanstalk ]       role     : "myapp-instanceRole-08f3cc26afa5f43e2da6bc7e796044c7e44af707"
[ /pulumi/aws/examples/beanstalk ] Applying step #2 [delete]
[ /pulumi/aws/examples/beanstalk ] - aws:iam/role:Role:
[ /pulumi/aws/examples/beanstalk ]       [id=myapp-instanceRole-08f3cc26afa5f43e2da6bc7e796044c7e44af707]
[ /pulumi/aws/examples/beanstalk ]       [urn=urn:lumi:integrationtesting::beanstalk:index::aws:iam/role:Role::myapp-instanceRole]
[ /pulumi/aws/examples/beanstalk ]       assumeRolePolicy: "{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Sid\": \"\", \"Effect\": \"Allow\", \"Principal\": { \"Service\": \"ec2.amazonaws.com\"}, \"Action\": \"sts:AssumeRole\"}]}"
[ /pulumi/aws/examples/beanstalk ]       name            : "myapp-instanceRole"
[ /pulumi/aws/examples/beanstalk ] Applying step #3 [delete]
[ /pulumi/aws/examples/beanstalk ] - aws:elasticbeanstalk/applicationVersion:ApplicationVersion:
[ /pulumi/aws/examples/beanstalk ]       [id=myappversion-afcc5ff8765fcfba74156e13a4fa7fb6e52a3e87]
[ /pulumi/aws/examples/beanstalk ]       [urn=urn:lumi:integrationtesting::beanstalk:index::aws:elasticbeanstalk/applicationVersion:ApplicationVersion::myappversion]
[ /pulumi/aws/examples/beanstalk ]       application: "myapp-619710701803f646ce2a84afd0a79076e6439f6c"
[ /pulumi/aws/examples/beanstalk ]       bucket     : "sourcebucket-02d03d634eac6060338108c89b2c3ea6d20578eb"
[ /pulumi/aws/examples/beanstalk ]       key        : "testSource/app.zip"
[ /pulumi/aws/examples/beanstalk ]       name       : "myappversion"
[ /pulumi/aws/examples/beanstalk ] Applying step #4 [delete]
[ /pulumi/aws/examples/beanstalk ] - aws:elasticbeanstalk/application:Application:
[ /pulumi/aws/examples/beanstalk ]       [id=myapp-619710701803f646ce2a84afd0a79076e6439f6c]
[ /pulumi/aws/examples/beanstalk ]       [urn=urn:lumi:integrationtesting::beanstalk:index::aws:elasticbeanstalk/application:Application::myapp]
[ /pulumi/aws/examples/beanstalk ]       name: "myapp"
[ /pulumi/aws/examples/beanstalk ] Applying step #5 [delete]
[ /pulumi/aws/examples/beanstalk ] - aws:s3/object:Object:
[ /pulumi/aws/examples/beanstalk ]       [id=testSource/app.zip]
[ /pulumi/aws/examples/beanstalk ]       [urn=urn:lumi:integrationtesting::beanstalk:index::aws:s3/object:Object::sourcebucket-02d03d634eac6060338108c89b2c3ea6d20578eb:testSource/app.zip]
[ /pulumi/aws/examples/beanstalk ]       bucket: "sourcebucket-02d03d634eac6060338108c89b2c3ea6d20578eb"
[ /pulumi/aws/examples/beanstalk ]       key   : "testSource/app.zip"
[ /pulumi/aws/examples/beanstalk ]       source: asset { file://app.zip }
[ /pulumi/aws/examples/beanstalk ] Applying step #6 [delete]
[ /pulumi/aws/examples/beanstalk ] - aws:s3/bucket:Bucket:
[ /pulumi/aws/examples/beanstalk ]       [id=sourcebucket-02d03d634eac6060338108c89b2c3ea6d20578eb]
[ /pulumi/aws/examples/beanstalk ]       [urn=urn:lumi:integrationtesting::beanstalk:index::aws:s3/bucket:Bucket::sourceBucket]
[ /pulumi/aws/examples/beanstalk ]       name: "sourceBucket"
[ /pulumi/aws/examples/beanstalk ] info: 6 deployed changes:
[ /pulumi/aws/examples/beanstalk ]     - 6 resources deleted
[ /pulumi/aws/examples/beanstalk ] Deployment duration: 10.351409132s
[ /pulumi/aws/examples/beanstalk ]
[ /pulumi/aws/examples/beanstalk ] **** Invoke '/Users/luke/go/bin/lumi env rm --yes integrationtesting' in /Users/luke/go/src/github.com/pulumi/aws/examples/beanstalk
[ /pulumi/aws/examples/beanstalk ] Environment 'integrationtesting' has been removed!
--- FAIL: TestExamples (0.00s)
    --- FAIL: TestExamples//Users/luke/go/src/github.com/pulumi/aws/examples/beanstalk (39.58s)
        Error Trace:    lumiprogram.go:97
    	            	lumiprogram.go:79
    	            	examples_test.go:51
    	Error:      	Received unexpected error:
    	            	exit status 255
    	Messages:   	expected to successfully invoke '/Users/luke/go/bin/lumi deploy' in /Users/luke/go/src/github.com/pulumi/aws/examples/beanstalk: exit status 255
FAIL
coverage: 0.0% of statements
exit status 1
FAIL	github.com/pulumi/aws/examples	39.595s
make: *** [examples] Error 1

Leaking `Role` instances

We've exceeded our 1000 role limit. It appears we are leaking Roles very fast from our tests.

Service disappeared while waiting for it to reach a steady state

We saw an intermittent failure when updating PPCs just now:

Plan apply failed: creating urn:pulumi:learningmachine-ppc-prod::pulumi-service-ppc::cloud:service:Service$aws:ecs/service:Service::learningmachine-ppc-prod-updates: Service arn:aws:ecs:us-east-1:396386917111:service/learningmachine-ppc-prod-updates-99c2e88 disappeared while waiting for it to reach a steady state

The full log is available at https://api.travis-ci.com/v3/job/115796809/log.txt?log.token=DGdrKxgiMyHZ73itqw0oyw.

It seems likely this is related to the changes pertaining to pulumi/pulumi-cloud#312.

node_modules aren't pushed to Lambda

I deployed this code (https://github.com/lindydonna/pulumi-cloud/tree/79dd1757078fa37122c422a00ddbb5117b3e4160/examples/url-shortener) which took a dependency on the redis module. It looks like the module didn't get uploaded, because I saw this error in CloudWatch:

UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): Error: Cannot find module 'redis'

Contents of stacks/testing.json:
testing.json

According to Luke, the regression was likely in d08a0d5

CC @joeduffy

Move closure serialization logic into lumirt

The implementation of aws.serverless.Function includes both the API surface area as well as a lot of logic for serializing the closure environment. The vast majority of that logic is not AWS or Lambda specific, and should be pushed down into the lumirt serializeClosure abstraction instead.

Inconsistent treatment of `role` argument in IAM

In this example, I want to create an IAM role, attach an inline policy, then create an EC2 instance profile with that role.

let assumeInstanceRolePolicyDoc = // ...
let instanceRolePolicyDoc = // ...

let instanceRole = new aws.iam.Role("ecsClusterInstanceRole", {
    assumeRolePolicy: JSON.stringify(assumeInstanceRolePolicyDoc),
});

let instanceRolePolicy = new aws.iam.RolePolicy("ecsClusterInstanceRolePolicy", {
    role: instanceRole.id,  // (a)
    policy: JSON.stringify(instanceRolePolicyDoc),
});

let instanceProfile = new aws.iam.InstanceProfile("ecsClusterInstanceProfile", {
    role: instanceRole,  // (b)
});

At point (a), the role is specified using a string ARN.

readonly role: pulumi.ComputedValue<string>;

At point (b), the role must be specified as the Role object.
readonly role?: pulumi.ComputedValue<Role>;

I haven't looked into how the code is generated yet, but the underlying Terraform schema entries are both schema.TypeString:
https://github.com/terraform-providers/terraform-provider-aws/blob/90d698c66db80d676e2db197be97c1a9977e5393/aws/resource_aws_iam_instance_profile.go#L99
https://github.com/terraform-providers/terraform-provider-aws/blob/90d698c66db80d676e2db197be97c1a9977e5393/aws/resource_aws_iam_role_policy.go#L50

Project outputs with AltTypes as just the main type, not union

Today we apply AltTypes to both inputs and outputs, even though in output position the value will always be of the primary type. Including the union also makes the output property much harder to use in practice.

We should not use AltTypes in Output positions.

warning: aws:index/getRegion:getRegion verification warning

For a while now - we have been seeing the following warning on every preview/update using the @pulumi/aws package.

warning: aws:index/getRegion:getRegion verification warning: "current": [DEPRECATED] Defaults to current provider region if no other filtering is enabled

Apply `AutoName` consistently

Many resources have limits well below the default 255 used in resources.go.

In particular, we had recent issues with many load balancer objects having limits of 36.

We should scrub the regexps in the AWS SDK metadata to apply corrrect autoname limits here.

Poor error when missing AWS creds

If you forget to configure AWS creds, you get a poor error message:

error: failed to load resource plugin aws: failed to configure pkg 'aws' resource provider: No valid credential sources found for AWS Provider.
  Please see https://terraform.io/docs/providers/aws/index.html for more information on
  providing credentials for the AWS Provider

This seems to have regressed recently. Worse, it includes a Terraform URL, which is completely useless to anybody using the Pulumi CLI. Maybe we can leverage some of @swgillespie's recent magic to make this better?

Adopt terraform-provider-aws v1.13.0

There was an emergency release to address a breaking change in AWS APIs:

https://github.com/terraform-providers/terraform-provider-aws/blob/master/CHANGELOG.md#1130-march-28-2018

This release is happening outside the normal release schedule to accomodate a crash fix for the aws_lb_target_group resource. It appears an ELBv2 service update rolling out currently is the root cause. The potential for this crash has been present since the initial resource in Terraform 0.7.7 and all versions of the AWS provider up to v1.13.0.

Check back in generated code?

In #42 we stopped checking in generated code.

This has some upsides (actually - does it even?), but a major downside that its now hard to understand what impact changes to code generation will have on our projection and audit them before checkin. This was a super useful tool previously - both for authoring changes and for code reviewing impact of changes from others. And even for just being able to see what the AWS API surface area actually looks like by looking at the repo.

It's awfully strange now that we have no place we can point to that actually defines (e.g.) an aws.ec2.Instance.

Are we really sure we want to lose this? I'm strongly inclined to bring back checking in these files.

Need to reorder creation/updates of ALB ListnerRule resources

A Pulumi program which creates aws.elasticloadbalancingv2.ListenerRule can get into a state where the stack is essentially wedged. The issue has to do with the fact that priorities must be unique within all of the listener rules attached to an ALB.

If there is an update to a ListenerRule that changes its priority, the update fails with the following error. It's reasonable, but just annoying because the existing listener rule in-use would have been deleted/reassigned if the program continued to execute.

error: Plan apply failed: creating urn:pulumi:pulumi-svc-chris::pulumi-service::aws:elasticloadbalancingv2/listenerRule:ListenerRule::homepage-rule-http-/: Error creating LB Listener Rule: PriorityInUse: Priority '1500' is currently in use
        status code: 400, request id: 5c81aec0-2899-11e8-a3be-6f5f10459723

Even if the program is authored correctly, and each ListenerRule is unique, there is an implicit dependency on the order in which the listener rules are created or updated.

I'm not sure how we could generally solve such a problem, other than delaying ListenerRule updates and trying to get clever about ordering.

Travis build failing in master

https://travis-ci.com/pulumi/pulumi-aws/builds/57279954

[ /pulumi-aws/examples/webserver ] **** Invoke '/opt/pulumi/bin/pulumi preview' in /tmp/lumi-integration-test-245456509

[ /pulumi-aws/examples/webserver ] Previewing changes:

[ /pulumi-aws/examples/webserver ] panic: fatal: An assertion has failed

[ /pulumi-aws/examples/webserver ] 

[ /pulumi-aws/examples/webserver ] goroutine 1 [running]:

[ /pulumi-aws/examples/webserver ] github.com/pulumi/pulumi/pkg/util/contract.failfast(0x9f0c8f, 0x17)

[ /pulumi-aws/examples/webserver ] 	/home/travis/gopath/src/github.com/pulumi/pulumi/pkg/util/contract/failfast.go:11 +0xf3

[ /pulumi-aws/examples/webserver ] github.com/pulumi/pulumi/pkg/util/contract.Assert(0xc420302a00)

[ /pulumi-aws/examples/webserver ] 	/home/travis/gopath/src/github.com/pulumi/pulumi/pkg/util/contract/assert.go:14 +0x49

[ /pulumi-aws/examples/webserver ] github.com/pulumi/pulumi/pkg/resource/deploy.NewDeleteStep(0xc4201b66e0, 0xc42015aa10, 0xc420022301, 0x53[ /pulumi-aws/examples/webserver ] , 0xc4202ce449)

[ /pulumi-aws/examples/webserver ] 	/home/travis/gopath/src/github.com/pulumi/pulumi/pkg/resource/deploy/step.go:193 +0x88

[ /pulumi-aws/examples/webserver ] github.com/pulumi/pulumi/pkg/resource/deploy.(*PlanIterator).nextDeleteStep(0xc4201b66e0, 0xc420302ab0, 0x2)

[ /pulumi-aws/examples/webserver ] 	/home/travis/gopath/src/github.com/pulumi/pulumi/pkg/resource/deploy/plan_apply.go:367 +0x20b

[ /pulumi-aws/examples/webserver ] github.com/pulumi/pulumi/pkg/resource/deploy.(*PlanIterator).Next(0xc4201b66e0, 0xcdf220, 0xc4203014d0, 0x0, 0x0)

[ /pulumi-aws/examples/webserver ] 	/home/travis/gopath/src/github.com/pulumi/pulumi/pkg/resource/deploy/plan_apply.go:163 +0x274

[ /pulumi-aws/examples/webserver ] github.com/pulumi/pulumi/pkg/engine.(*planResult).Walk(0xc420066e40, 0xcd36c0, 0xc4200820c0, 0x0, 0xc420182e10, 0xc420181310, 0x29, 0x3, 0xc420000180, 0xc420064240)

[ /pulumi-aws/examples/webserver ] 	/home/travis/gopath/src/github.com/pulumi/pulumi/pkg/engine/plan.go:114 +0xfb

[ /pulumi-aws/examples/webserver ] github.com/pulumi/pulumi/pkg/engine.(*Engine).printPlan(0xd23220, 0xc420066e40, 0xcd3680, 0xc420066e40)

[ /pulumi-aws/examples/webserver ] 	/home/travis/gopath/src/github.com/pulumi/pulumi/pkg/engine/plan.go:168 +0x288

[ /pulumi-aws/examples/webserver ] github.com/pulumi/pulumi/pkg/engine.(*Engine).previewLatest(0xd23220, 0xc420186260, 0x10000, 0xd435e8, 0x0, 0x0, 0x0, 0x0, 0xc4200221e0, 0xce0840, ...)

[ /pulumi-aws/examples/webserver ] 	/home/travis/gopath/src/github.com/pulumi/pulumi/pkg/engine/preview.go:60 +0x18c

[ /pulumi-aws/examples/webserver ] github.com/pulumi/pulumi/pkg/engine.(*Engine).Preview(0xd23220, 0xc420014b20, 0x12, 0xc4200221e0, 0x0, 0x0, 0xd435e8, 0x0, 0x0, 0x0, ...)

[ /pulumi-aws/examples/webserver ] 	/home/travis/gopath/src/github.com/pulumi/pulumi/pkg/engine/preview.go:50 +0x25a

[ /pulumi-aws/examples/webserver ] github.com/pulumi/pulumi/cmd.newPreviewCmd.func1(0xc42015e900, 0xd435e8, 0x0, 0x0, 0x0, 0x0)

[ /pulumi-aws/examples/webserver ] 	/home/travis/gopath/src/github.com/pulumi/pulumi/cmd/preview.go:46 +0x273

[ /pulumi-aws/examples/webserver ] github.com/pulumi/pulumi/pkg/util/cmdutil.RunFunc.func1(0xc42015e900, 0xd435e8, 0x0, 0x0)

[ /pulumi-aws/examples/webserver ] 	/home/travis/gopath/src/github.com/pulumi/pulumi/pkg/util/cmdutil/exit.go:20 +0x51

[ /pulumi-aws/examples/webserver ] github.com/pulumi/pulumi/vendor/github.com/spf13/cobra.(*Command).execute(0xc42015e900, 0xd435e8, 0x0, 0x0, 0xc42015e900, 0xd435e8)

[ /pulumi-aws/examples/webserver ] 	/home/travis/gopath/src/github.com/pulumi/pulumi/vendor/github.com/spf13/cobra/command.go:654 +0x2a2

[ /pulumi-aws/examples/webserver ] github.com/pulumi/pulumi/vendor/github.com/spf13/cobra.(*Command).ExecuteC(0xc4200a5680, 0xc420012c31, 0xc420012c30, 0xc42004b2a0)

[ /pulumi-aws/examples/webserver ] 	/home/travis/gopath/src/github.com/pulumi/pulumi/vendor/github.com/spf13/cobra/command.go:729 +0x2fe

[ /pulumi-aws/examples/webserver ] github.com/pulumi/pulumi/vendor/github.com/spf13/cobra.(*Command).Execute(0xc4200a5680, 0x9, 0xc4200a5680)

[ /pulumi-aws/examples/webserver ] 	/home/travis/gopath/src/github.com/pulumi/pulumi/vendor/github.com/spf13/cobra/command.go:688 +0x2b

[ /pulumi-aws/examples/webserver ] main.main()

[ /pulumi-aws/examples/webserver ] 	/home/travis/gopath/src/github.com/pulumi/pulumi/main.go:16 +0x4b

[ /pulumi-aws/examples/webserver ] 

code property on aws.lambda.Function forces replacement

It looks like changes to the code property on an aws.lambda.Function are forcing it to be replaced. This causes a lot of churn as many things are keyed off of the function identity, and should not be necessary.

If you deploy this:

import {timer} from "@lumi/platform";
timer.interval("foobar", {minutes: 1}, async () => {
    console.log("hello");
});

and then change "hello" to "goodbye", you would expect to see just an in-place update of the function object. Instead, you see a replace followed by lots of create/deletes for dependent objects.

(Note - the error at the end is presumably an unrelated bug that I'm investigating now).

Applying step #1 [replace] (part of a replacement change)
+-aws:lambda/function:Function:
      [id=foobar-697d9b8fe508772267e2579706a3362694f81b2e]
      [urn=urn:lumi:test::integration:index::aws:lambda/function:Function::foobar]
    - code            : archive {
    -     "index.js": asset {
    -         "exports.handler = __5b28b23dd0f4eca7c8ded1f6335aeb995c70882f;"
    -         ""
    -         "function __5b28b23dd0f4eca7c8ded1f6335aeb995c70882f() {"
    -         "  var _this;"
    -         "  with({ handler: __7988284d11819f2f843419db36b9bd51127e9a58 }) {"
    -         "    return (function() {"
    -         ""
    -         "return function (ev, ctx, cb) {"
    -         "    handler().then(function () { cb(null, null); })["catch"](function (err) { cb(err, null); });"
    -         "};"
    -         ""
    -         "    }).apply(_this).apply(undefined, arguments);"
    -         "  }"
    -         "}"
    -         ""
    -         "function __7988284d11819f2f843419db36b9bd51127e9a58() {"
    -         "  var _this;"
    -         "  with({ }) {"
    -         "    return (function() {"
    -         ""
    -         "var _this = this;"
    -         "return function () { return __awaiter(_this, void 0, void 0, function () {"
    -         "    return __generator(this, function (_a) {"
    -         "        console.log("hello");"
    -         "        return [2 /*return*/];"
    -         "    });"
    -         "}); };"
    -         ""
    -         "    }).apply(_this).apply(undefined, arguments);"
    -         "  }"
    -         "}"
    -         ""
    -         ""
    -         "function __awaiter(thisArg, _arguments, P, generator) {"
    -         "    return new (P || (P = Promise))(function (resolve, reject) {"
    -         "        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }"
    -         "        function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }"
    -         "        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }"
    -         "        step((generator = generator.apply(thisArg, _arguments || [])).next());"
    -         "    });"
    -         "}"
    -         ""
    -         "function __generator(thisArg, body) {"
    -         "    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;"
    -         "    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;"
    -         "    function verb(n) { return function (v) { return step([n, v]); }; }"
    -         "    function step(op) {"
    -         "        if (f) throw new TypeError("Generator is already executing.");"
    -         "        while (_) try {"
    -         "            if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t;"
    -         "            if (y = 0, t) op = [0, t.value];"
    -         "            switch (op[0]) {"
    -         "                case 0: case 1: t = op; break;"
    -         "                case 4: _.label++; return { value: op[1], done: false };"
    -         "                case 5: _.label++; y = op[1]; op = [0]; continue;"
    -         "                case 7: op = _.ops.pop(); _.trys.pop(); continue;"
    -         "                default:"
    -         "                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }"
    -         "                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }"
    -         "                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }"
    -         "                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }"
    -         "                    if (t[2]) _.ops.pop();"
    -         "                    _.trys.pop(); continue;"
    -         "            }"
    -         "            op = body.call(thisArg, _);"
    -         "        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }"
    -         "        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };"
    -         "    }"
    -         "}"
    -         ""
    -     }
    -     "node_modules": asset { file://node_modules }
    - }
    + code            : archive {
    +     "index.js": asset {
    +         "exports.handler = __5b28b23dd0f4eca7c8ded1f6335aeb995c70882f;"
    +         ""
    +         "function __5b28b23dd0f4eca7c8ded1f6335aeb995c70882f() {"
    +         "  var _this;"
    +         "  with({ handler: __00d4974954f1a4c25e29fbe9fe90f6b621605185 }) {"
    +         "    return (function() {"
    +         ""
    +         "return function (ev, ctx, cb) {"
    +         "    handler().then(function () { cb(null, null); })["catch"](function (err) { cb(err, null); });"
    +         "};"
    +         ""
    +         "    }).apply(_this).apply(undefined, arguments);"
    +         "  }"
    +         "}"
    +         ""
    +         "function __00d4974954f1a4c25e29fbe9fe90f6b621605185() {"
    +         "  var _this;"
    +         "  with({ }) {"
    +         "    return (function() {"
    +         ""
    +         "var _this = this;"
    +         "return function () { return __awaiter(_this, void 0, void 0, function () {"
    +         "    return __generator(this, function (_a) {"
    +         "        console.log("goodbye");"
    +         "        return [2 /*return*/];"
    +         "    });"
    +         "}); };"
    +         ""
    +         "    }).apply(_this).apply(undefined, arguments);"
    +         "  }"
    +         "}"
    +         ""
    +         ""
    +         "function __awaiter(thisArg, _arguments, P, generator) {"
    +         "    return new (P || (P = Promise))(function (resolve, reject) {"
    +         "        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }"
    +         "        function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }"
    +         "        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }"
    +         "        step((generator = generator.apply(thisArg, _arguments || [])).next());"
    +         "    });"
    +         "}"
    +         ""
    +         "function __generator(thisArg, body) {"
    +         "    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;"
    +         "    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;"
    +         "    function verb(n) { return function (v) { return step([n, v]); }; }"
    +         "    function step(op) {"
    +         "        if (f) throw new TypeError("Generator is already executing.");"
    +         "        while (_) try {"
    +         "            if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t;"
    +         "            if (y = 0, t) op = [0, t.value];"
    +         "            switch (op[0]) {"
    +         "                case 0: case 1: t = op; break;"
    +         "                case 4: _.label++; return { value: op[1], done: false };"
    +         "                case 5: _.label++; y = op[1]; op = [0]; continue;"
    +         "                case 7: op = _.ops.pop(); _.trys.pop(); continue;"
    +         "                default:"
    +         "                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }"
    +         "                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }"
    +         "                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }"
    +         "                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }"
    +         "                    if (t[2]) _.ops.pop();"
    +         "                    _.trys.pop(); continue;"
    +         "            }"
    +         "            op = body.call(thisArg, _);"
    +         "        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }"
    +         "        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };"
    +         "    }"
    +         "}"
    +         ""
    +     }
    +     "node_modules": asset { file://node_modules }
    + }
      deadLetterConfig: [
          [0]: {
                   targetArn: "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-377290b8389ac3ddc4f240c08de5c6802147e089"
               }
      ]
      handler         : "index.handler"
      name            : "foobar"
      role            : "arn:aws:iam::153052954103:role/foobar-iamrole-719f4cf975e79b59952844317fbc58145a92ea24"
      runtime         : "nodejs6.10"
      timeout         : 180
info: Setting Lambda foobar-98691711c59cd888b8e77a55264a254aa5d4d88c VPC config []map[string]interface {}(nil) from API
Applying step #2 [replace] (part of a replacement change)
+-aws:cloudwatch/logGroup:LogGroup:
      [id=/aws/lambda/foobar-697d9b8fe508772267e2579706a3362694f81b2e]
      [urn=urn:lumi:test::integration:index::aws:cloudwatch/logGroup:LogGroup::foobar]
    - logGroupName   : "/aws/lambda/foobar-697d9b8fe508772267e2579706a3362694f81b2e"
    + logGroupName   : "/aws/lambda/foobar-98691711c59cd888b8e77a55264a254aa5d4d88c"
      name           : "foobar"
      retentionInDays: 1
info: CloudWatch Log Group created
Applying step #3 [replace] (part of a replacement change)
+-aws:cloudwatch/logSubscriptionFilter:LogSubscriptionFilter:
      [id=cwlsf-1506378676]
      [urn=urn:lumi:test::integration:index::aws:cloudwatch/logSubscriptionFilter:LogSubscriptionFilter::foobar]
      destinationArn: "arn:aws:lambda:us-east-2:153052954103:function:pulumi-app-log-collector-b43b2ad077b90ce2f629dada2d5f400df2b4758"
      filterPattern : ""
    - logGroup      : "/aws/lambda/foobar-697d9b8fe508772267e2579706a3362694f81b2e"
    + logGroup      : "/aws/lambda/foobar-98691711c59cd888b8e77a55264a254aa5d4d88c"
      name          : "foobar"
Applying step #4 [update]
~ aws:cloudwatch/eventTarget:EventTarget:
      [id=foobar-1d4607eef0758ce43610c38acebde2ea21566cf8-terraform-00de914977c8c7f5504533a6c4]
      [urn=urn:lumi:test::integration:index::aws:cloudwatch/eventTarget:EventTarget::foobar]
    - arn : "arn:aws:lambda:us-east-2:153052954103:function:foobar-697d9b8fe508772267e2579706a3362694f81b2e"
    + arn : "arn:aws:lambda:us-east-2:153052954103:function:foobar-98691711c59cd888b8e77a55264a254aa5d4d88c"
      name: "foobar"
      rule: "foobar-1d4607eef0758ce43610c38acebde2ea21566cf8"
error LUMI2003: Plan apply failed: rpc error: code = Unknown desc = Error applying aws:cloudwatch/eventTarget:EventTarget update: Updating CloudWatch Event Target failed: InvalidParameter: 1 validation error(s) found.
- minimum field size of 1, PutTargetsInput.Targets[0].Id.

Step #4 failed [update]: this failure was catastrophic and the provider cannot guarantee recovery
info: 3 deployed changes:
    +-3 resources replaced
Deployment duration: 9.785868681s
A catastrophic error occurred; resources states may be unknown
error: rpc error: code = Unknown desc = Error applying aws:cloudwatch/eventTarget:EventTarget update: Updating CloudWatch Event Target failed: InvalidParameter: 1 validation error(s) found.
- minimum field size of 1, PutTargetsInput.Targets[0].Id.

Use S3 bucket's name as part of an object's name

At the moment, we just use the object name in its URN (and auto-propagate that to the key). Unfortunately, this means if you have two objects in the same module, with the same names but different buckets, they will get assigned the same URN. Ideally there would be a way to use a different property than id when referencing another resource object, in which case object could reference bucket's name property and then it would, in theory, not be computed (necessarily).

Call to GetGitInfo requires entire source checkout to be present

When building the deployment container for the Pulumi service, we'd like to bring in the terraform-provider-aws binary without also having to bring in the source. However, this call to GetGitInfo will fail if we do that:

git, err := tfbridge.GetGitInfo("aws")

Let's determine if this is necessary and, if so, if we can find a better way to bake in version information.

Expose new APIs in v1.13.0

In #184 we are adopting v1.13.0 of the TF provider. This also exposes many new APIs. We should expose these from the Pulumi API surface area.

warning: Could not find docs for resource aws_api_gateway_request_validator; consider overriding doc source location
warning: resource aws_appsync_datasource not found in provider map; skipping
warning: resource aws_iot_thing not found in provider map; skipping
warning: resource aws_kms_grant not found in provider map; skipping
warning: resource aws_organizations_organization not found in provider map; skipping
warning: resource aws_waf_geo_match_set not found in provider map; skipping
warning: resource aws_waf_regex_match_set not found in provider map; skipping
warning: resource aws_waf_regex_pattern_set not found in provider map; skipping
warning: resource aws_waf_rule_group not found in provider map; skipping
warning: resource aws_wafregional_geo_match_set not found in provider map; skipping
warning: resource aws_wafregional_rate_based_rule not found in provider map; skipping
warning: resource aws_wafregional_regex_match_set not found in provider map; skipping
warning: resource aws_wafregional_regex_pattern_set not found in provider map; skipping
warning: resource aws_wafregional_rule not found in provider map; skipping
warning: resource aws_wafregional_rule_group not found in provider map; skipping
warning: resource aws_wafregional_size_constraint_set not found in provider map; skipping
warning: resource aws_wafregional_sql_injection_match_set not found in provider map; skipping
warning: resource aws_wafregional_web_acl not found in provider map; skipping
warning: resource aws_wafregional_web_acl_association not found in provider map; skipping
warning: resource aws_wafregional_xss_match_set not found in provider map; skipping
warning: Could not find docs for resource aws_ecr_credentials; consider overriding doc source location
warning: data source aws_kms_key not found in provider map; skipping

Failures in Travis

We just hit an odd failure in Travis, which appears to be just an intermittent issue. May be worth looking into this further to see what the underlying issue is.

[ /pulumi-aws/examples/webserver ] error LUMI2003: Plan apply failed: rpc error: code = Unknown desc = Error waiting for instance (i-04d84e065ebee81ec) to become ready: Failed to reach target state. Reason: Server.InternalError: Internal error on launch
[ /pulumi-aws/examples/webserver ] Step #2 failed [create-replacement]: this failure was catastrophic and the provider cannot guarantee recovery
[ /pulumi-aws/examples/webserver ] panic: fatal: An assertion has failed: Unexpected duplicate resource resource.URN 

https://travis-ci.com/pulumi/pulumi-aws/builds/55153551?utm_source=github_status&utm_medium=notification

DynamoDB migration errors

I can't figure out what's going on here. If I deploy an example that uses DynamoDB through the containerized Ubuntu image I see lumi deploy failures inside the Terraform bridge. But I can't reproduce these locally. I believe versions of everything are the same - but very well could be that something is different (currently hard to create a stable environment with the complex sets of static and dynamic dependencies).

Here's the error I get (some of this may be out-of-order due to how the deployment service currently prints stdout/stderr):


debug: plugin: plugin address: unix /tmp/plugin240061921
debug: No assume_role block read from configuration
debug: Building AWS region structure
debug: Building AWS auth structure
debug: Setting AWS metadata API timeout to 100ms
debug: Ignoring AWS metadata API endpoint at default location as it doesn't return any instance-id
debug: AWS Auth provider used: "SharedCredentialsProvider"
debug: Initializing DeviceFarm SDK connection
debug: Trying to get account ID via iam:GetUser
Applying step #1 [create]
+ aws:dynamodb/table:Table:
      [urn=urn:lumi:pulumi::todo:index::aws:dynamodb/table:Table::urls]
      attribute           : [
          [0]: {
                   name: "name"
                   type: "S"
               }
      ]
      hashKey             : "name"
      name                : "urls"
      readCapacity        : 5
      writeCapacity       : 5
debug: DynamoDB table create: urls-8ec8d8e9d8e114d2998bc3a1d6f8823b6316ac90
debug: Sleeping for 5 seconds for table to become active
debug: Sleeping for 5 seconds for table to become active
debug: Setting DynamoDB TimeToLive on arn: arn:aws:dynamodb:eu-west-1:153052954103:table/urls-8ec8d8e9d8e114d2998bc3a1d6f8823b6316ac90
debug: Loading data for DynamoDB table 'urls-8ec8d8e9d8e114d2998bc3a1d6f8823b6316ac90'
debug: Added Attribute: name
debug: Loaded TimeToLive data for DynamoDB table 'urls-8ec8d8e9d8e114d2998bc3a1d6f8823b6316ac90'
info: Found AWS DynamoDB Table State v0; migrating to v1
debug: DynamoDB Table Attributes before Migration: map[string]string(nil)
debug: panic: assignment to entry in nil map
debug:
debug: goroutine 153 [running]:
debug: github.com/terraform-providers/terraform-provider-aws/aws.migrateDynamoDBStateV0toV1(0xc420531270, 0x1, 0x1, 0xc4201dccf0)
debug: 	/go/src/github.com/terraform-providers/terraform-provider-aws/aws/resource_aws_dynamodb_table_migrate.go:64 +0x526
debug: github.com/terraform-providers/terraform-provider-aws/aws.resourceAwsDynamoDbTableMigrateState(0x0, 0xc420531270, 0x1d9eb80, 0xc4201fb200, 0x33faf00, 0x0, 0x18)
debug: 	/go/src/github.com/terraform-providers/terraform-provider-aws/aws/resource_aws_dynamodb_table_migrate.go:17 +0xb8
Step #1 failed [create]: this failure was catastrophic and the provider cannot guarantee recovery
debug: github.com/terraform-providers/terraform-provider-aws/vendor/github.com/hashicorp/terraform/helper/schema.(*Resource).Refresh(0xc420302660, 0xc420531270, 0x1d9eb80, 0xc4201fb200, 0xc4203cb818, 0xc42064d401, 0x0)
info: no changes were made
debug: 	/go/src/github.com/terraform-providers/terraform-provider-aws/vendor/github.com/hashicorp/terraform/helper/schema/resource.go:308 +0x347
A catastrophic error occurred; resources states may be unknown
Error: topic.ts(22,25): warning LUMI504: Type 'T' could not be found: unrecognized primitive type name
topic.ts(22,25): warning LUMI504: Type 'T' could not be found: unrecognized primitive type name
error LUMI2003: Plan apply failed: rpc error: code = Unknown desc = Error reading aws:dynamodb/table:Table's state: unexpected EOF
error: rpc error: code = Unknown desc = Error reading aws:dynamodb/table:Table's state: unexpected EOF

Note the attempt to migrate state from v0 to v1, then the failure to read the state (which appears to have been passed as nil).

Any ideas what might be going on here?

For reference, here's current Dockerfile contents to try to create a deployment environment:

RUN go get -d -v github.com/terraform-providers/terraform-provider-aws
RUN go install github.com/terraform-providers/terraform-provider-aws

RUN mkdir -p /go/src/github.com/pulumi
COPY . /go/src/github.com/pulumi

# Build and install deployment binary
RUN go get -d -v github.com/pulumi/pulumi/deployment 
RUN go install github.com/pulumi/pulumi/deployment

# Build and install Lumi binaries (`lumi` and `lumijs`)
RUN go get -d -v github.com/pulumi/lumi/cmd/lumi 
RUN go install github.com/pulumi/lumi/cmd/lumi
RUN cd /go/src/github.com/pulumi/lumi/cmd/lumijs \
  && yarn run build \
  && ln -s /go/src/github.com/pulumi/lumi/cmd/lumijs/lumijs /usr/local/bin/lumijs

# Build and install Pulumi libraries (`lumirt`, `lumi`, `lumijs`, `aws`, `platform`)
RUN mkdir -p /usr/local/lumi/packs
RUN cd /go/src/github.com/pulumi/lumi/lib/lumirt \
  && rm -rf node_modules \
  && lumijs \
  && yarn link \
  && cp -RL ./.lumi/bin/ /usr/local/lumi/packs/lumirt
RUN cd /go/src/github.com/pulumi/lumi/lib/lumi \
  && rm -rf node_modules \
  && lumijs \
  && yarn link \
  && cp -RL ./.lumi/bin/ /usr/local/lumi/packs/lumi
RUN cd /go/src/github.com/pulumi/lumi/lib/lumijs \
  && rm -rf node_modules \
  && yarn link @lumi/lumirt \
  && lumijs \
  && yarn link \
  && cp -RL ./.lumi/bin/ /usr/local/lumi/packs/lumijs
RUN cd /go/src/github.com/pulumi/aws/pack \
  && rm -rf node_modules \
  && yarn link @lumi/lumirt @lumi/lumijs @lumi/lumi \
  && lumijs \
  && mkdir -p /usr/local/lumi/packs/aws \
  && cp VERSION /usr/local/lumi/packs/aws \
  && cp package.json /usr/local/lumi/packs/aws \
  && cp -RL .lumi/bin/* /usr/local/lumi/packs/aws \
  && cp -RL node_modules /usr/local/lumi/packs/aws \
  && cd .. \
  && go install github.com/pulumi/aws/cmd/lumi-tfbridge-aws \
  && cp /go/bin/lumi-tfbridge-aws /usr/local/lumi/packs/aws/lumi-resource-aws \
  && cd /usr/local/lumi/packs/aws \
  && yarn link
RUN cd /go/src/github.com/pulumi/aws-serverless/ \
  && rm -rf node_modules \
  && yarn link @lumi/lumirt @lumi/lumi @lumi/aws \
  && lumijs \
  && yarn link \
  && cp -RL ./.lumi/bin/ /usr/local/lumi/packs/aws-serverless
RUN cd /go/src/github.com/pulumi/lumi-platform/ \
  && rm -rf node_modules \
  && yarn link @lumi/lumirt @lumi/lumi @lumi/aws @lumi/aws-serverless \
  && lumijs \
  && yarn link \
  && cp -RL ./.lumi/bin/ /usr/local/lumi/packs/platform
WORKDIR /src

CI Failing due to old version requirement for Elastic Beanstack stack

Master is failing with this error:

[ /pulumi-aws/examples/beanstalk ]     + aws:elasticbeanstalk/environment:Environment: (create)
[ /pulumi-aws/examples/beanstalk ]         [urn=urn:pulumi:p-it-travis-job-beanstalk::beanstalk::aws:elasticbeanstalk/environment:Environment::myenv]
[ /pulumi-aws/examples/beanstalk ]         application        : "myapp-f6238d1"
[ /pulumi-aws/examples/beanstalk ]         name               : "myenv-d444f07"
[ /pulumi-aws/examples/beanstalk ]         setting            : [
[ /pulumi-aws/examples/beanstalk ]             [0]: {
[ /pulumi-aws/examples/beanstalk ]                 name     : "MinSize"
[ /pulumi-aws/examples/beanstalk ]                 namespace: "aws:autoscaling:asg"
[ /pulumi-aws/examples/beanstalk ]                 value    : "2"
[ /pulumi-aws/examples/beanstalk ]             }
[ /pulumi-aws/examples/beanstalk ]             [1]: {
[ /pulumi-aws/examples/beanstalk ]                 name     : "InstanceType"
[ /pulumi-aws/examples/beanstalk ]                 namespace: "aws:autoscaling:launchconfiguration"
[ /pulumi-aws/examples/beanstalk ]                 value    : "t2.nano"
[ /pulumi-aws/examples/beanstalk ]             }
[ /pulumi-aws/examples/beanstalk ]             [2]: {
[ /pulumi-aws/examples/beanstalk ]                 name     : "IamInstanceProfile"
[ /pulumi-aws/examples/beanstalk ]                 namespace: "aws:autoscaling:launchconfiguration"
[ /pulumi-aws/examples/beanstalk ]                 value    : "arn:aws:iam::086028354146:instance-profile/myapp-instanceProfile-b794a17"
[ /pulumi-aws/examples/beanstalk ]             }
[ /pulumi-aws/examples/beanstalk ]             [3]: {
[ /pulumi-aws/examples/beanstalk ]                 name     : "ServiceRole"
[ /pulumi-aws/examples/beanstalk ]                 namespace: "aws:elasticbeanstalk:environment"
[ /pulumi-aws/examples/beanstalk ]                 value    : "arn:aws:iam::086028354146:role/myapp-dcb79aa"
[ /pulumi-aws/examples/beanstalk ]             }
[ /pulumi-aws/examples/beanstalk ]         ]
[ /pulumi-aws/examples/beanstalk ]         solutionStackName  : "64bit Amazon Linux 2017.03 v4.1.0 running Node.js"
[ /pulumi-aws/examples/beanstalk ]         tier               : "WebServer"
[ /pulumi-aws/examples/beanstalk ]         version            : "myappversion-e326dd1"
[ /pulumi-aws/examples/beanstalk ]         waitForReadyTimeout: "20m"
[ /pulumi-aws/examples/beanstalk ] error PU2003: Plan apply failed: rpc error: code = Unknown desc = creating urn:pulumi:p-it-travis-job-beanstalk::beanstalk::aws:elasticbeanstalk/environment:Environment::myenv: InvalidParameterValue: No Solution Stack named '64bit Amazon Linux 2017.03 v4.1.0 running Node.js' found.
[ /pulumi-aws/examples/beanstalk ] 	status code: 400, request id: 330636c4-6e08-4522-ad6d-350fd7bb9199
[ /pulumi-aws/examples/beanstalk ] Step #12 failed [create]: this failure was catastrophic and the provider cannot guarantee recovery
[ /pulumi-aws/examples/beanstalk ] info: 11 changes performed:
[ /pulumi-aws/examples/beanstalk ]     + 11 resources created
[ /pulumi-aws/examples/beanstalk ] Update duration: 14.498046111s
[ /pulumi-aws/examples/beanstalk ] A catastrophic error occurred; resources states may be unknown
[ /pulumi-aws/examples/beanstalk ] error: rpc error: code = Unknown desc = creating urn:pulumi:p-it-travis-job-beanstalk::beanstalk::aws:elasticbeanstalk/environment:Environment::myenv: InvalidParameterValue: No Solution Stack named '64bit Amazon Linux 2017.03 v4.1.0 running Node.js' found.
[ /pulumi-aws/examples/beanstalk ] 	status code: 400, request id: 330636c4-6e08-4522-ad6d-350fd7bb9199
[ /pulumi-aws/examples/beanstalk ] 
[ /pulumi-aws/examples/beanstalk ] Wrote output to /tmp/p-it-travis-job-beanstalk-117420998/command-output/pulumi-update-initial.20180113-005037.1664d.log

We just need to upgrade the version, which @khyperia Is already doing in #114

s3.Bucket `websites` property is pluralized but should not be

Looks like website is not marked as MaxItems = 1, even though it is in practice, so we should force this and/or update the TF provider.

        let bucket = new aws.s3.Bucket(name, {
            websites: [{
                indexDocument: "index.html",
            }],
        }, { parent: this});

Address tfgen warnings

We have several places where we may need to make updates to align with more recent changes in the TF AWS provider:

warning: Could not find docs for resource aws_alb; consider overriding doc source location
warning: Could not find docs for resource aws_alb_listener; consider overriding doc source location
warning: Could not find docs for resource aws_alb_listener_rule; consider overriding doc source location
warning: Could not find docs for resource aws_alb_target_group; consider overriding doc source location
warning: Could not find docs for resource aws_alb_target_group_attachment; consider overriding doc source location
warning: Could not find docs for resource aws_api_gateway_request_validator; consider overriding doc source location
warning: Resource aws_athena_database not found in provider map; skipping
warning: Resource aws_athena_named_query not found in provider map; skipping
warning: Resource aws_batch_job_definition not found in provider map; skipping
warning: Resource aws_batch_job_queue not found in provider map; skipping
warning: Resource aws_cognito_identity_pool_roles_attachment not found in provider map; skipping
warning: Resource aws_cognito_user_pool not found in provider map; skipping
warning: Resource aws_dx_connection not found in provider map; skipping
warning: Resource aws_dx_lag not found in provider map; skipping
warning: Resource aws_ecr_lifecycle_policy not found in provider map; skipping
warning: Resource aws_servicecatalog_portfolio not found in provider map; skipping
warning: Resource aws_ses_domain_dkim not found in provider map; skipping
warning: Resource aws_ses_template not found in provider map; skipping
warning: Resource aws_ssm_resource_data_sync not found in provider map; skipping
warning: Could not find docs for resource aws_alb; consider overriding doc source location
warning: Could not find docs for resource aws_alb_listener; consider overriding doc source location
warning: Could not find docs for resource aws_alb_target_group; consider overriding doc source location
warning: Data source aws_cloudtrail_service_account not found in provider map; skipping
warning: Data source aws_dynamodb_table not found in provider map; skipping
warning: Could not find docs for resource aws_ecr_credentials; consider overriding doc source location
warning: Data source aws_elasticache_replication_group not found in provider map; skipping
warning: Data source aws_iam_user not found in provider map; skipping
warning: Data source aws_instances not found in provider map; skipping
warning: Data source aws_nat_gateway not found in provider map; skipping
warning: Data source aws_rds_cluster not found in provider map; skipping
warning: Data source aws_s3_bucket not found in provider map; skipping

Travis build failing in master

https://travis-ci.com/pulumi/pulumi-aws

Potentially relevant part of logs:

[ /pulumi-aws/examples/webserver ] error: Missing required configuration variable 'aws:config:region'
[ /pulumi-aws/examples/webserver ] please set a value using the command `pulumi config aws:config:region <value>`
[ /pulumi-aws/examples/webserver ] error: One or more errors occurred during this preview
[ /pulumi-aws/examples/webserver ]
[ /pulumi-aws/examples/webserver ] **** Invoke '/opt/pulumi/bin/pulumi update' in /tmp/lumi-integration-test-002443633
[ /pulumi-aws/examples/webserver ] Performing changes:
[ /pulumi-aws/examples/webserver ] error: Missing required configuration variable 'aws:config:region'
[ /pulumi-aws/examples/webserver ] please set a value using the command `pulumi config aws:config:region <value>`
[ /pulumi-aws/examples/webserver ] - aws:ec2/instance:Instance: (delete)
[ /pulumi-aws/examples/webserver ] [id=i-036b55fb45b6e1a16]
[ /pulumi-aws/examples/webserver ] [urn=urn:pulumi:integrationtesting::webserver::aws:ec2/instance:Instance::web-server-www]
[ /pulumi-aws/examples/webserver ] ami : "ami-7172b611"
[ /pulumi-aws/examples/webserver ] instanceType : "t2.micro"
[ /pulumi-aws/examples/webserver ] securityGroups : [
[ /pulumi-aws/examples/webserver ] [0]: "web-secgrp-805315ca69c8722f"
[ /pulumi-aws/examples/webserver ] ]
[ /pulumi-aws/examples/webserver ] sourceDestCheck: true
[ /pulumi-aws/examples/webserver ] error PU2003: Plan apply failed: rpc error: code = Unavailable desc = transport is closing
[ /pulumi-aws/examples/webserver ] error: rpc error: code = Unavailable desc = transport is closing
[ /pulumi-aws/examples/webserver ] info: panic: interface conversion: interface {} is nil, not *aws.AWSClient
[ /pulumi-aws/examples/webserver ] info:
[ /pulumi-aws/examples/webserver ] info: goroutine 28 [running]:
[ /pulumi-aws/examples/webserver ] info: github.com/pulumi/pulumi-aws/vendor/github.com/terraform-providers/terraform-provider-aws/aws.resourceAwsInstanceDelete(0xc420430700, 0x0, 0x0, 0x24, 0x37d7160)
[ /pulumi-aws/examples/webserver ] info: /home/travis/gopath/src/github.com/pulumi/pulumi-aws/vendor/github.com/terraform-providers/terraform-provider-aws/aws/resource_aws_instance.go:1033 +0x110
[ /pulumi-aws/examples/webserver ] info: github.com/pulumi/pulumi-aws/vendor/github.com/hashicorp/terraform/helper/schema.(*Resource).Apply(0xc4202f3200, 0xc420414550, 0xc4202566e0, 0x0, 0x0, 0x412801, 0x20, 0x21bf0e0)
[ /pulumi-aws/examples/webserver ] info: /home/travis/gopath/src/github.com/pulumi/pulumi-aws/vendor/github.com/hashicorp/terraform/helper/schema/resource.go:166 +0x4b1
[ /pulumi-aws/examples/webserver ] info: github.com/pulumi/pulumi-aws/vendor/github.com/hashicorp/terraform/helper/schema.(*Provider).Apply(0xc42024a460, 0xc420125920, 0xc420414550, 0xc4202566e0, 0x0, 0xc420410ea0, 0x0)
[ /pulumi-aws/examples/webserver ] info: /home/travis/gopath/src/github.com/pulumi/pulumi-aws/vendor/github.com/hashicorp/terraform/helper/schema/provider.go:259 +0xa4
[ /pulumi-aws/examples/webserver ] info: github.com/pulumi/pulumi-aws/vendor/github.com/pulumi/pulumi-terraform/pkg/tfbridge.(*Provider).Delete(0xc42024a4d0, 0x375fa20, 0xc4204109f0, 0xc420410ab0, 0xc42024a4d0, 0x0, 0x0)
[ /pulumi-aws/examples/webserver ] info: /home/travis/gopath/src/github.com/pulumi/pulumi-aws/vendor/github.com/pulumi/pulumi-terraform/pkg/tfbridge/provider.go:434 +0x3d6
[ /pulumi-aws/examples/webserver ] info: github.com/pulumi/pulumi-aws/vendor/github.com/pulumi/pulumi/sdk/proto/go._ResourceProvider_Delete_Handler(0x22330a0, 0xc42024a4d0, 0x375fa20, 0xc4204109f0, 0xc420414500, 0x0, 0x0, 0x0, 0x0, 0x0)
[ /pulumi-aws/examples/webserver ] info: /home/travis/gopath/src/github.com/pulumi/pulumi-aws/vendor/github.com/pulumi/pulumi/sdk/proto/go/provider.pb.go:612 +0x276
[ /pulumi-aws/examples/webserver ] info: github.com/pulumi/pulumi-aws/vendor/google.golang.org/grpc.(*Server).processUnaryRPC(0xc42023cb40, 0x37626e0, 0xc420462000, 0xc420416400, 0xc4203c8a50, 0x37aacb0, 0x0, 0x0, 0x0)
[ /pulumi-aws/examples/webserver ] info: /home/travis/gopath/src/github.com/pulumi/pulumi-aws/vendor/google.golang.org/grpc/server.go:826 +0xab4
[ /pulumi-aws/examples/webserver ] info: github.com/pulumi/pulumi-aws/vendor/google.golang.org/grpc.(*Server).handleStream(0xc42023cb40, 0x37626e0, 0xc420462000, 0xc420416400, 0x0)
[ /pulumi-aws/examples/webserver ] info: /home/travis/gopath/src/github.com/pulumi/pulumi-aws/vendor/google.golang.org/grpc/server.go:1023 +0x1528
[ /pulumi-aws/examples/webserver ] info: github.com/pulumi/pulumi-aws/vendor/google.golang.org/grpc.(*Server).serveStreams.func1.1(0xc42041a050, 0xc42023cb40, 0x37626e0, 0xc420462000, 0xc420416400)
[ /pulumi-aws/examples/webserver ] info: /home/travis/gopath/src/github.com/pulumi/pulumi-aws/vendor/google.golang.org/grpc/server.go:572 +0x9f
[ /pulumi-aws/examples/webserver ] info: created by github.com/pulumi/pulumi-aws/vendor/google.golang.org/grpc.(*Server).serveStreams.func1
[ /pulumi-aws/examples/webserver ] info: /home/travis/gopath/src/github.com/pulumi/pulumi-aws/vendor/google.golang.org/grpc/server.go:570 +0xa1
[ /pulumi-aws/examples/webserver ] Step #1 failed [delete]: this failure was catastrophic and the provider cannot guarantee recovery

Add overlays for types where JSON strings are expected

There are many places where Terraform providers accept a JSON string. We should at least add overlays that provide the shapes of those JSON objects. And likely we should consider transformation on the properties that allow passing strongly typed object values instead of JSON strings from Pulumi.

See for example: https://github.com/pulumi/pulumi-service/commit/80a9d402bb30a948f09104df27a8fda647735e8d and pulumi/pulumi-cloud@999bdb1#diff-411860beb3c2bdcbd01894df3b3bd69aR20

Start a "Known Issues" page/site/etc

credit to donna:

we should create a known issues page, and make sure it's linked to in our documentation, and every issue has a link to a GitHub issue

Ship checklist for AWS provider

  • Good examples
    • Improve serverless-raw example (tracking in #166)
    • Other larger examples can live in pulumi-examples repo.
  • Attempt to minimize future breaking changes
    • Simplify generated type names (remove repetition in type name) (tracked in #167)
    • Accept strongly typed inputs as options, not replacements (and project as raw type on output)
    • Remove getLinuxAMI
    • Pluralize and project nested structs properly
  • API and overlay consistency (largely work to continue to do over time)

Controlling what gets uploaded to Lambda zip file

With #34 we now upload the entire source folder as part of the Lambda zip. Previously, we uploaded the entire node_modules folder.

It is in general necessary to have the full source folder to support arbitrary require('./foo') in code running "on the inside".

However, for many/most Lambdas, they will not use any of the files in the root folder or even the node_modules on the inside. So we are carrying these along even though they won't be used.

Additionally, in local workflows, the working directory may contain source files or sensitive data that should not be uploaded into the runtime environment.

We could solve this with a configuration setting (possibly in Pulumi.yaml) along the lines of https://serverless.com/framework/docs/providers/aws/guide/packaging/.

Need ability to specify ACM cert for HttpEndpoint

We need the ability to specify an ACM certificate for the cloud.HttpEndpoint type, to enable customers to use custom domains without needing to manage certificate files themselves.

After lots of discussion with @lukehoban it sounded like the best way to design this would be to not expose this on @pulumi/cloud cloud.HttpEndpoint but instead in @pulumi/cloud-aws which has an extension of cloud.HttpEndpoint, which takes an optional Amazon-specific ACM cert ARN.

That way we don't require AWS-specific config in the cloud.HttpEndpoint, but still enable customers to use AWS-specific features when using @pulumi/cloud-aws.

Consider improving API Resource design to avoid manual dependsOn

Before creating an apigateway.Integration resource, we need to have created the apigateway.Methods associated with the target apigateway.RestApi resource. Similarly, we must have created all of those things before creating the final apigateway.Deployment resource.

Because the properties of said resources do not naturally lead to the proper dependency graph, enabling parallelism can lead to attempting to create resources out of order.

We can fix this with manual dependsOn annotations, but this is unfortunate, and it seems worth considering whether we can improve the API Gateway class design to avoid needing to do so.

`namePrefix` properties are not usable

Many AWS TF resources expose namePrefix members. These will use a user-provided prefix, and augment with randomness from the TF provider.

However, namePrefix and name cannot both be specified. And we auto-specify name unless name itself has already been specified.

As a result, there is no way to pass the namePrefix property on these APIs (for example LoadBalancer, TargetGroup, etc.).

aws.lambda.CallbackFunction: Support lambdas greater than 69905067 bytes via intermediate S3 bucket

From @chrsmith on November 15, 2017 19:29

Running pulumi preview doesn't detect if a lambda to be deployed is too large for AWS, which leads to a catastrophic failure when you try to deploy your program. Perhaps we could issue a warning/error if we detect this during preview?

error PU2003: Plan apply failed: rpc error: code = Unknown desc = Error creating Lambda
function: RequestEntityTooLargeException: Request must be smaller than 69905067 bytes
for the CreateFunction operation

status code: 413, request id: 8ae171d3-ca34-11e7-b1aa-01928c26ca07

Copied from original issue: pulumi/pulumi#573

Add "Name" tag when creating resources

When creating an instance such as aws.ec2.Instance, should use the first constructor argument to automatically name the resource using the Name property in the tags collection.

Should do this for all resources that are named, not just EC2.

Recover lost typings

After switching to the Terraform provider, we lost a fair number of strong typing niceties. Once we pop up for air, we should attempt to recover as many of them as possible. See the commit pulumi/pulumi@5eb8edc for a good reference of what it used to look like. Essentially any enums in that file are missing, and I'm sure many of the "capability-like" views have been lost in favor of weak IDs.

Error creating Lambda function: InvalidSignatureException: Signature expired: 20171026T165425Z is now earlier than 20171026T165554Z (20171026T170054Z - 5 min.)

Today in CI we hit an error where a Lambda create failed with the following;

error PU2003: Plan apply failed: rpc error: code = Unknown desc = Error creating Lambda function: InvalidSignatureException: Signature expired: 20171026T165425Z is now earlier than 20171026T165554Z (20171026T170054Z - 5 min.)

Not clear what triggered this or whether there is anything we can do to make it less likely.

The one time we hit this was while we were running tests in the Sydney region, so it could just be really slow internet connection to Travis that was the problem.

Fix KeyPair names

KeyPairs end up with names like terraform-20180121155020407300000001. Ideally they would use the same naming scheme we use for all other resources (Pulumi name plus random hash).

Use Node v8.10 by default in `aws.serverless.Function`

Splitting off from pulumi/pulumi#1113. Now that we support any Node.js version for running Pulumi programs, we need to choose independently what version to default to for aws.serverless.Function.

For now, we should default to 8.10 to give access to the broadest set of capabilities.

In the future, we will need to make this configurable as well.

`aws.apigateway.RestApi` can be leaked if provider creation fails

To reproduce, create an API gateway as with an invalid uri within the swagger spec:

let swaggerObj = {
    swagger: "2.0",
    info: { title: "donnapulumiapi", version: "1.0" },
    paths: {
        "/foo": {
            "x-amazon-apigateway-any-method": {
                "x-amazon-apigateway-integration": {
                    uri: "INVALID!!!!",
                    passthroughBehavior: "when_no_match",
                    httpMethod: "POST",
                    type: "aws_proxy",
                },
            },
        },
    },
}

let swagger = JSON.stringify(swaggerObj);

let restApi = new aws.apigateway.RestApi("api", {
    body: swagger,
});

Output of pulumi update:

error PU2003: Plan apply failed: rpc error: code = Unknown desc = creating urn:pulumi:donna-local::serverless::aws:apigateway/restApi:RestApi::api: Error creating API Gateway specification: BadRequestException: Errors found during import:
	Unable to put integration on 'ANY' for resource at path '/foo': Invalid ARN specified in the request
	status code: 400, request id: ca88a46e-1dc7-11e8-88b6-715f54a7bb2f
Step #6 failed [create]: this failure was catastrophic and the provider cannot guarantee recovery
info: no changes required:
      5 resources unchanged
A catastrophic error occurred; resources states may be unknown

The resource will be partially created but not put in the checkpoint file, effectively leaking it. You can see the leaked APIs in the AWS console; look for ones named api-*.

Possibly related to this: when I had resources in this partially deleted state, I got failures when it came time to create the apigateway.Stage resource. Deleting the stack completely and recreating it from scratch, made it all create without errors.

$ pulumi update
Performing changes:
+ pulumi:pulumi:Stack: (create)
    [urn=urn:pulumi:donna-local::serverless::pulumi:pulumi:Stack::serverless-donna-local]
    + aws:dynamodb/table:Table: (create)
        [urn=urn:pulumi:donna-local::serverless::aws:dynamodb/table:Table::UsersDynamoTable]
        attribute    : [
            [0]: {
                name: "UserId"
                type: "S"
            }
        ]
        hashKey      : "UserId"
        name         : "UsersDynamoTable-5e2bf1e"
        readCapacity : 1
        writeCapacity: 1
        ---outputs:---
        arn                 : "arn:aws:dynamodb:us-west-1:153052954103:table/UsersDynamoTable-5e2bf1e"
        id                  : "UsersDynamoTable-5e2bf1e"
        readCapacity        : "1"
        writeCapacity       : "1"
    + aws:iam/role:Role: (create)
        [urn=urn:pulumi:donna-local::serverless::aws:iam/role:Role::mylambda-role]
        assumeRolePolicy   : "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"},\"Effect\":\"Allow\",\"Sid\":\"\"}]}"
        forceDetachPolicies: false
        name               : "mylambda-role-3ed7288"
        path               : "/"
        ---outputs:---
        arn                : "arn:aws:iam::153052954103:role/mylambda-role-3ed7288"
        assumeRolePolicy   : "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}"
        createDate         : "2018-03-02T03:16:34Z"
        id                 : "mylambda-role-3ed7288"
        uniqueId           : "AROAJ6IFKWKS5HNXG3OOC"
    + aws:iam/rolePolicyAttachment:RolePolicyAttachment: (create)
        [urn=urn:pulumi:donna-local::serverless::aws:iam/rolePolicyAttachment:RolePolicyAttachment::mylambda-access]
        policyArn: "arn:aws:iam::aws:policy/AWSLambdaFullAccess"
        role     : "mylambda-role-3ed7288"
        ---outputs:---
        id       : "mylambda-role-3ed7288-20180302031635575800000001"
    + aws:lambda/function:Function: (create)
        [urn=urn:pulumi:donna-local::serverless::aws:lambda/function:Function::mylambda]
        code       : archive(assets:c9e7c3e) {
            "index.js": asset(file:aa7f787) { ./app/index.js }
            "node_modules": archive(file:3a30828) { ./app/node_modules }
        }
        environment: [
            [0]: {
                variables: {
                    USERS_TABLE: "arn:aws:dynamodb:us-west-1:153052954103:table/UsersDynamoTable-5e2bf1e"
                }
            }
        ]
        handler    : "index.handler"
        memorySize : 128
        name       : "mylambda-cdf1556"
        publish    : false
        role       : "arn:aws:iam::153052954103:role/mylambda-role-3ed7288"
        runtime    : "nodejs6.10"
        timeout    : 3
        ---outputs:---
        arn                         : "arn:aws:lambda:us-west-1:153052954103:function:mylambda-cdf1556"
        code                        : "/var/folders/2x/066l0t5d2ssc9plghjzydm600000gn/T/pulumi-asset-c9e7c3e0abc60eece7bcb534f1a162af314bed8fc769357c99a3b00f6581462f"
        id                          : "mylambda-cdf1556"
        invokeArn                   : "arn:aws:apigateway:us-west-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-1:153052954103:function:mylambda-cdf1556/invocations"
        lastModified                : "2018-03-02T03:16:46.269+0000"
        memorySize                  : "128"
        qualifiedArn                : "arn:aws:lambda:us-west-1:153052954103:function:mylambda-cdf1556:$LATEST"
        reservedConcurrentExecutions: "0"
        sourceCodeHash              : "MH5Qeo3tkTacA2I8H9mjV04ROCQrEUPQ01Mhtsevv/g="
        timeout                     : "3"
        tracingConfig               : [
            [0]: {
                mode: "PassThrough"
            }
        ]
        version                     : "$LATEST"
    + aws:apigateway/restApi:RestApi: (create)
        [urn=urn:pulumi:donna-local::serverless::aws:apigateway/restApi:RestApi::api]
        body: "{\"swagger\":\"2.0\",\"info\":{\"title\":\"donnapulumiapi\",\"version\":\"1.0\"},\"paths\":{\"/foo\":{\"x-amazon-apigateway-any-method\":{\"x-amazon-apigateway-integration\":{\"uri\":\"arn:aws:apigateway:us-west-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-1:153052954103:function:mylambda-cdf1556/invocations\",\"passthroughBehavior\":\"when_no_match\",\"httpMethod\":\"POST\",\"type\":\"aws_proxy\"}}}}}"
        name: "api-d148900"
        ---outputs:---
        createdDate     : "2018-03-02T03:16:47Z"
        id              : "ovkqzokbs7"
        name            : "donnapulumiapi"
        rootResourceId  : "u90yxubvpg"
    + aws:apigateway/deployment:Deployment: (create)
        [urn=urn:pulumi:donna-local::serverless::aws:apigateway/deployment:Deployment::donna-deployment-dev]
        description: "my deployment"
        restApi    : "ovkqzokbs7"
        stageName  : "dev"
        ---outputs:---
        createdDate : "2018-03-02T03:16:48Z"
        executionArn: "arn:aws:execute-api:us-west-1:153052954103:ovkqzokbs7/dev"
        id          : "vyoagk"
        invokeUrl   : "https://ovkqzokbs7.execute-api.us-west-1.amazonaws.com/dev"
    + aws:apigateway/stage:Stage: (create)
        [urn=urn:pulumi:donna-local::serverless::aws:apigateway/stage:Stage::donna-stage-dev]
        deployment: "vyoagk"
        restApi   : "ovkqzokbs7"
        stageName : "dev"
error PU2003: Plan apply failed: rpc error: code = Unknown desc = creating urn:pulumi:donna-local::serverless::aws:apigateway/stage:Stage::donna-stage-dev: Error creating API Gateway Stage: ConflictException: Stage already exists
	status code: 409, request id: 255bae2a-1dc8-11e8-b18a-d5c377f85ee0
Step #8 failed [create]: this failure was catastrophic and the provider cannot guarantee recovery
info: 7 changes performed:
    + 7 resources created
Update duration: 29.832033483s
A catastrophic error occurred; resources states may be unknown
error: rpc error: code = Unknown desc = creating urn:pulumi:donna-local::serverless::aws:apigateway/stage:Stage::donna-stage-dev: Error creating API Gateway Stage: ConflictException: Stage already exists
	status code: 409, request id: 255bae2a-1dc8-11e8-b18a-d5c377f85ee0

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.