Skip to content

Latest commit

 

History

History
2919 lines (2203 loc) · 240 KB

CHANGELOG.md

File metadata and controls

2919 lines (2203 loc) · 240 KB

Change Log

All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

0.35.0 (2019-06-19)

Bug Fixes

Code Refactoring

Features

  • cli: Expose props in CFN resources and remove propertyOverrides (#2372) (#2372) (aa61dfb), closes #2100
  • cli: deploy/destory require explicit stack selection if app contains more than a single stack (#2772) (118a716), closes #2731
  • cli: Remove stack rename support (#2819) (0f30e39), closes #2670
  • cloudformation: add option to restrict data returned AwsCustomResource (#2859) (a691900), closes #2825
  • cloudformation: Add removalPolicy on CustomResource (#2770) (859248a)
  • cloudfront: add Lambda associations (#2760) (b088c8c)
  • codepipeline: final form of the CodeBuild Pipeline action. (#2716) (c10fc9a)
  • core: show token creation stack trace upon resolve error (#2886) (f4c8dcd)
  • ecs: add metrics for Fargate services (#2798) (acf015d)
  • ecs-patterns: LoadBalancedFargateService - allow specifying containerName and role (#2764) (df12197)
  • elasticloadbalancing: add crossZone load balancing (#2787) (192bab7), closes #2786
  • lambda: Expose $LATEST function version (#2792) (55d1bc8), closes #2776
  • s3: add CORS Property to S3 Bucket (#2101) (#2843) (1a386d8)
  • s3: add missing storage classes and API cleanups (#2834) (5cd9609), closes #2708
  • stepfunctions: add grantStartExecution() (#2793) (da32176)
  • stepfunctions: add support for AmazonSageMaker APIs (#2808) (8b1f3ed), closes #1314
  • stepfunctions: waitForTaskToken for Lambda, SQS, SNS (#2686) (d017a14), closes #2658 #2735
  • formalize the concept of physical names, and use them for cross-environment CodePipelines. (#1924) (6daaca8)

BREAKING CHANGES

  • assets: AssetProps.packaging has been removed and is now automatically discovered based on the file type.
  • assets: ZipDirectoryAsset has been removed, use aws-s3-assets.Asset.
  • assets: FileAsset has been removed, use aws-s3-assets.Asset.
  • lambda: Code.directory and Code.file have been removed. Use Code.asset.
  • assets-docker: The module has been renamed to aws-ecr-assets
  • ecs: the property that specifies the type of EC2 AMI optimized for ECS was renamed to hardwareType from hwType.
  • codebuild: the method addToRoleInlinePolicy in CodeBuild's Project class has been removed.
  • dynamodb: TableOptions.pitrEnabled renamed to pointInTimeRecovery.
  • dynamodb: TableOptions.sseEnabled renamed to serverSideEncryption.
  • dynamodb: TableOptions.ttlAttributeName renamed to timeToLiveAttribute.
  • dynamodb: TableOptions.streamSpecification renamed stream.
  • ecs: ContainerImage.fromAsset() now takes only build directory directly (no need to pass scope or id anymore).
  • secretsmanager: ISecret.secretJsonValue renamed to secretValueFromJson.
  • ssm: ParameterStoreString has been removed. Use StringParameter.fromStringParameterAttributes.
  • ssm: ParameterStoreSecureString has been removed. Use StringParameter.fromSecureStringParameterAttributes.
  • ssm: ParameterOptions.name was renamed to parameterName.
  • logs: newStream renamed to addStream and doesn't need a scope
  • logs: newSubscriptionFilter renamed to addSubscriptionFilter and doesn't need a scope
  • logs: newMetricFilter renamed to addMetricFilter and doesn't need a scope
  • logs: NewSubscriptionFilterProps renamed to SubscriptionProps
  • logs: NewLogStreamProps renamed to LogStreamOptions
  • logs: NewMetricFilterProps renamed to MetricFilterOptions
  • logs: JSONPattern renamed to JsonPattern
  • apigateway: MethodOptions.authorizerId is now called authorizer and accepts an IAuthorizer which is a placeholder interface for the authorizer resource.
  • apigateway: restapi.executeApiArn renamed to arnForExecuteApi.
  • apigateway: restapi.latestDeployment and deploymentStage are now read-only.
  • events: EventPattern.detail is now a map.
  • events: scheduleExpression: string is now schedule: Schedule.
  • multiple modules have been changed to use cdk.RemovalPolicy to configure the resource's removal policy.
  • core: applyRemovalPolicy is now CfnResource.applyRemovalPolicy.
  • core: RemovalPolicy.Orphan has been renamed to Retain.
  • core: RemovalPolicy.Forbid has been removed, use Retain.
  • ecr: RepositoryProps.retain is now removalPolicy, and defaults to Retain instead of remove since ECR is a stateful resource
  • kms: KeyProps.retain is now removalPolicy
  • logs: LogGroupProps.retainLogGroup is now removalPolicy
  • logs: LogStreamProps.retainLogStream is now removalPolicy
  • rds: DatabaseClusterProps.deleteReplacePolicy is now removalPolicy
  • rds: DatabaseInstanceNewProps.deleteReplacePolicy is now removalPolicy
  • codebuild: rename BuildSource to Source, S3BucketSource to S3Source, BuildArtifacts to Artifacts, S3BucketBuildArtifacts to S3Artifacts
  • codebuild: the classes CodePipelineBuildSource, CodePipelineBuildArtifacts, NoBuildSource, and NoBuildArtifacts have been removed
  • codebuild: rename buildScriptAsset and buildScriptAssetEntrypoint to buildScript and buildScriptEntrypoint, respectively
  • cli: All L1 ("Cfn") Resources attributes are now prefixed with attr instead of the resource type. For example, in S3 bucket.bucketArn is now bucket.attrArn.
  • propertyOverrides has been removed from all "Cfn" resources, instead users can now read/write resource properties directly on the resource class. For example, instead of lambda.propertyOverrides.runtime just use lambda.runtime.
  • codepipeline: the property designating the name of the stage when creating a CodePipeline is now called stageName instead of name
  • codepipeline: the output and extraOutputs properties of the CodeBuildAction were merged into one property, outputs.
  • lambda:
    • Renamed Function.addLayer to addLayers and made it variadic
    • Removed IFunction.handler property
    • Removed IVersion.versionArn property (the value is at functionArn)
    • Removed SingletonLayerVersion
    • Stopped exporting LogRetention
  • cli: if an app includes more than one stack "cdk deploy" and "cdk destroy" now require that an explicit selector will be passed. Use "cdk deploy '*'" if you want to select all stacks.
  • iam: PolicyStatement no longer has a fluid API, and accepts a props object to be able to set the important fields.
  • iam: rename ImportedResourcePrincipal to UnknownPrincipal.
  • iam: managedPolicyArns renamed to managedPolicies, takes return value from ManagedPolicy.fromAwsManagedPolicyName().
  • iam: PolicyDocument.postProcess() is now removed.
  • iam: PolicyDocument.addStatement() renamed to addStatements.
  • iam: PolicyStatement is no longer IResolvable, call .toStatementJson() to retrieve the IAM policy statement JSON.
  • iam: AwsPrincipal has been removed, use ArnPrincipal instead.
  • s3: s3.StorageClass is now an enum-like class instead of a regular enum. This means that you need to call .value in order to obtain it's value.
  • s3: s3.Coordinates renamed to s3.Location
  • codepipeline: Artifact.s3Coordinates renamed to Artifact.s3Location.
  • codebuild: buildSpec argument is now a BuildSpec object.
  • lambda: lambda.Runtime.NodeJS* are now lambda.Runtime.Nodejs*
  • core: multiple changes to the Stack API
  • core: stack.name renamed to stack.stackName
  • core: stack.stackName will return the concrete stack name. Use Aws.stackName to indicate { Ref: "AWS::StackName" }.
  • core: stack.account and stack.region will return the concrete account/region only if they are explicitly specified when the stack is defined (under the env prop). Otherwise, they will return a token that resolves to the AWS::AccountId and AWS::Region intrinsic references. Use Context.getDefaultAccount() and Context.getDefaultRegion() to obtain the defaults passed through the toolkit in case those are needed. Use Token.isUnresolved(v) to check if you have a concrete or intrinsic.
  • core: stack.logicalId has been removed. Use stack.getLogicalId()
  • core: stack.env has been removed, use stack.account, stack.region and stack.environment instead
  • core: stack.accountId renamed to stack.account (to allow treating account more abstractly)
  • core: AvailabilityZoneProvider can now be accessed through Context.getAvailabilityZones()
  • core: SSMParameterProvider can now be accessed through Context.getSsmParameter()
  • core: parseArn is now Arn.parse
  • core: arnFromComponents is now arn.format
  • core: node.lock and node.unlock are now private
  • core: stack.requireRegion and requireAccountId have been removed. Use Token.unresolved(stack.region) instead
  • core: stack.parentApp have been removed. Use App.isApp(stack.node.root) instead.
  • core: stack.missingContext is now private
  • core: stack.renameLogical have been renamed to stack.renameLogicalId
  • core: IAddressingScheme, HashedAddressingScheme and LogicalIDs are now internal. Override Stack.allocateLogicalId to customize how logical IDs are allocated to resources.
  • cli: The CLI no longer accepts --rename, and the stack names are now immutable on the stack artifact.
  • sns: using a queue, lambda, email, URL as SNS Subscriber now requires an integration object from the @aws-cdk/aws-sns-subscribers package.
  • ecs-patterns: Renamed QueueWorkerService for base, ec2 and fargate to QueueProcessingService, QueueProcessingEc2Service, and QueueProcessingFargateService.
  • iam: roleName in RoleProps is now of type PhysicalName
  • s3: bucketName in BucketProps is now of type PhysicalName
  • codebuild: roleName in RoleProps is now of type PhysicalName

0.34.0 (2019-06-07)

Bug Fixes

  • build: Correct buildspec so it does not fail (#2737) (e362ac8)
  • certificatemanager: correct certificateArn typo in the README (#2712) (2bfc1c2)
  • cli: don't fail if region cannot be determined (#2721) (0c72ef3), closes #2697
  • cli: remove support for applets (#2691) (0997ee2)
  • cloudwatch: move SNS Alarm Action to aws-cloudwatch-actions (#2688) (e3df21a)
  • codebuild: grant the Project's Role permissions to the KMS Key if it was passed. (#2715) (4e12fe6)
  • core: apply overrides after rendering properties (#2685) (f2636e5), closes #2677
  • core: Make filterUndefined null-safe (#2789) (e4fb811), closes awslabs/jsii#523
  • ecs: remove LoadBalancedFargateServiceApplet, no longer supported (#2779) (a610017)
  • ecs-patterns: expose service on queue worker services (#2780) (6d83cb9)
  • pkglint: Adjust stability banner style (#2768) (da94d8b)
  • route53: support zone roots as record names (#2705) (08a2852)
  • stepfunctions: improve Task payload encoding (#2706) (1c13faa)

Code Refactoring

Features

BREAKING CHANGES

  • route53: recordValue: string prop in route53.TxtRecord changed to values: string[]
  • recordValue prop in route53.CnameRecord renamed to domainName
  • route53.AliasRecord has been removed, use route53.ARecord or route53.AaaaRecord with the target prop.
  • kms: The EncryptionKeyAlias class was renamed to Alias. Associated types (such as EncryptionKeyAliasProps) were renamed in the same way.
  • cli: This release requires CDK CLI >= 0.34.0
  • core: App.run() was renamed to App.synth() (soft deprecation, it will be removed in the next release).
  • core: node.stack is now Stack.of(construct) (fixes #2766)
  • core: node.resolve has been moved to stack.resolve.
  • core: node.stringifyJson has been moved to stack.stringifyJson.
  • core: node.validateTree is now ConstructNode.validate(node)
  • core: node.prepareTree is now ConstructNode.prepare(node)
  • core: node.getContext is now node.tryGetContext
  • core: node.recordReference is now node.addReference
  • core: node.apply is now node.applyAspect
  • core: node.ancestors() is now node.scopes
  • core: node.required has been removed.
  • core: node.typename has been removed.
  • core: node.addChild is now private
  • core: node.findReferences() is now node.references
  • core: node.findDependencies() is now node.dependencies
  • core: stack.dependencies() is now stack.dependencies
  • core: CfnElement.stackPath has been removed.
  • core: CloudFormationLang is now internal (use stack.toJsonString())
  • cloudwatch: using an SNS topic as CloudWatch Alarm Actxion now requires an integration object from the @aws-cdk/aws-cloudwatch-actions package.
  • event-targets: targets.EcsEc2Task renamed to targets.EcsTask
  • SNS - Subscription endpoint is now type string (previously any)
  • Step Functions - result in the Pass state is now type map (previously any)
  • the following modules are no longer released: @aws-cdk/applet-js, @aws-cdk/aws-autoscaling-api, @aws-cdk/aws-codedeploy-api
  • cli: applets are no longer supported as an app type, use "decdk" instead.
  • core: Properties passed to addPropertyOverride should match in capitalization to the CloudFormation schema (normally pascal case). For example, addPropertyOverride('accessControl', 'xxx') should now be addPropertyOverride('AccessControl', 'xxx').
  • rds: rds.RotationSingleUser renamed to rds.SecretRotation
  • rds: rds.ClusterParameterGroup no longer has setParameter() and removeParameter() methods, use the parameters prop directly in the constructor instead.

0.33.0 (2019-05-30)

IMPORTANT: apps created with the CDK version 0.33.0 and above cannot be used with an older CLI version.

Bug Fixes

  • core: Fn.cidr should return a list and not a string (#2678) (9d2ea2a), closes #2671
  • cli: fix ts-node usage on Windows (#2660) (5fe0af5)
  • cli: make cdk docs open the new API reference (#2633) (6450758)
  • cli: correctly pass build args to docker build (#2634) (9c58d6f)
  • core: hide dependencyRoots from public API (#2668) (2ba5ad2), closes #2348
  • autoscaling: move lifecycle hook targets to their own module (#2628) (b282132), closes #2447
  • codepipeline: no longer allow providing an index when adding a Stage to a Pipeline. (#2624) (ce39b12)
  • codepipeline-actions: correctly serialize the userParameters passed to the Lambda invoke Action. (#2537) (ceaf54a)
  • cx-api: improve compatibility messages for cli <=> app (#2676) (38a9894)
  • ecs: move high level ECS constructs into aws-ecs-patterns (#2623) (f901313)
  • logs: move log destinations into 'aws-logs-destinations' (#2655) (01601c2), closes #2444
  • s3: move notification destinations into their own module (#2659) (185951c), closes #2445

Features

BREAKING CHANGES

  • logs: using a Lambda or Kinesis Stream as CloudWatch log subscription destination now requires an integration object from the @aws-cdk/aws-logs-destinations package.
  • codepipeline-actions: removed the addPutJobResultPolicy property when creating LambdaInvokeAction.
  • cli: --interactive has been removed
  • cli: --numbered has been removed
  • cli: --staging is now a boolean flag that indicates whether assets should be copied to the --output directory or directly referenced (--no-staging is useful for e.g. local debugging with SAM CLI)
  • assets: Assets (e.g. Lambda code assets) are now referenced relative to the output directory.
  • assert: SynthUtils.templateForStackName has been removed (use SynthUtils.synthesize(stack).template).
  • cx-api: cxapi.SynthesizedStack renamed to cxapi.CloudFormationStackArtifact with multiple API changes.
  • core: cdk.App.run() now returns a cxapi.CloudAssembly instead of cdk.ISynthesisSession.
  • s3: using a Topic, Queue or Lambda as bucket notification destination now requires an integration object from the @aws-cdk/aws-s3-notifications package.
  • autoscaling: using a Topic, Queue or Lambda as Lifecycle Hook Target now requires an integration object from the @aws-cdk/aws-autoscaling-hooktargets package.
  • codepipeline: the property atIndex has been removed from the StagePlacement interface.
  • aws-ecs: These changes move all L3 and higher constructs out of the aws-ecs module into the aws-ecs-patterns module. The following constructs have been moved into the aws-ecs-patterns module: EcsQueueWorkerService, FargateQueueWorkerService, LoadBalancedEcsService, LoadBalancedFargateService and LoadBalancedFargateServiceApplets.
  • cloudwatch: rename leftAxisRange => leftYAxis, rightAxisRange => rightYAxis, rename YAxisRange => YAxisProps.

0.32.0 (2019-05-24)

Bug Fixes

  • update all 'onXxx' methods to be CloudWatch Events (#2609) (28942d2), closes #2278
  • appscaling: fix StepScaling (#2522) (1f004f6)
  • aws-ecs: allow linux parameters to be settable (#2397) (417e5e8), closes #2380
  • aws-glue: fix glue tableArn and integer schema name (#2585) (99e173e)
  • cdk: CfnMapping.findInMap with tokens (#2531) (756e2b6), closes #1363
  • cloudfront: Use regional endpoint for S3 bucket origins (64c3c6b)
  • codebuild: correctly pass the VPC subnet IDs to the Policy Statement's condition when using a VPC. (#2506) (145da28), closes #2335
  • codecommit: add a Repository.fromRepositoryName() method. (#2515) (6fc3718), closes #2514
  • codedeploy: change the load balancer API in server Deployment Group. (#2548) (8e05d49), closes #2449
  • codepipeline: correctly validate Artifacts used by Actions in the same Stage. (#2558) (cfe46f6), closes #2549
  • core: Correctly search for loaded modules in node 12 (#2612) (286866a), closes nodejs/node#27583
  • ec2: allow disabling privateDnsEnabled on VPCs (#2596) (4d2fbe9), closes #2556
  • ec2: fix VPC endpoint name for SageMaker Notebooks (#2598) (aec8ec2)
  • iam: allow CompositePrincipal construction with spread (#2507) (eb13741)
  • lambda: compare Runtimes by value instead of identity (#2543) (584579e)
  • lambda: deprecate old Lambda runtimes (#2594) (20f4ec1)
  • route53-targets: move Alias Targets into their own package (#2617) (f40fe98), closes #2448
  • s3: Make IBucket.arnForObject accept only (exactly) one key pattern (5ac6e77)

Code Refactoring

Features

BREAKING CHANGES

  • route53-targets: using a CloudFront Distribution or an ELBv2 Load Balancer as an Alias Record Target now requires an integration object from the @aws-cdk/aws-route53-targets package.
  • s3: The IBucket.arnForObject method no longer concatenates path fragments on your behalf. Pass the /-concatenated key pattern instead.
  • All export methods from all AWS resources have been removed. CloudFormation Exports are now automatically created when attributes are referenced across stacks within the same app. To export resources manually, you can explicitly define a CfnOutput.
  • kms: kms.EncryptionKey renamed to kms.Key
  • ec2: ec2.VpcNetwork renamed to ec2.Vpc
  • ec2: ec2.VpcSubnet renamed to ec2.Subnet
  • cloudtrail: cloudtrail.CloudTrail renamed to cloudtrail.Trail`
  • Deleted a few XxxAttribute and XxxImportProps interfaces which were no longer in used after their corresponding export method was deleted and there was no use for them in imports.
  • ecs: ecs.ClusterAttributes now accepts IVpc and ISecurityGroup instead of attributes. You can use their corresponding fromXxx methods to import them as needed.
  • servicediscovery: servicediscovery.CnameInstance.instanceCname renamed to cname.
  • glue: glue.IDatabase.locationUrl is now only in glue.Database (not on the interface)
  • ec2: ec2.TcpPortFromAttribute and UdpPortFromAttribute removed. Use TcpPort and UdpPort with new Token(x).toNumber instead.
  • ec2: ec2.VpcNetwork.importFromContext renamed to ec2.Vpc.fromLookup
  • iam: iam.IRole.roleId has been removed from the interface, but Role.roleId is still available for owned resources.
  • codedeploy: the type of the loadBalancer property in ServerDeploymentGroupProps has been changed.
  • apigateway: apigateway.ResourceBase.trackChild is now internal.
  • cloudfront: cloudfront.S3OriginConfig.originAccessIdentity is now originAccessIdentityId
  • codedeploy: codedeploy.LambdaDeploymentGroup.alarms is now cloudwatch.IAlarm[] (previously cloudwatch.Alarm[])
  • codepipeline: codepipeline.crossRegionScaffoldingStacks renamed to crossRegionScaffolding
  • codepipeline: codepipeline.CrossRegionScaffoldingStack renamed to codepipeline.CrossRegionScaffolding and cannot be instantiated (abstract)
  • ec2: ec2.VpcSubnet.addDefaultRouteToNAT renamed to addDefaultNatRoute and made public
  • ec2: ec2.VpcSubnet.addDefaultRouteToIGW renamed to addDefaultInternetRoute, made public and first argument is the gateway ID (string) and not the CFN L1 class
  • ecs: ecs.Ec2EventRuleTarget.taskDefinition is now ITaskDefinition (previously TaskDefinition)
  • lambda: lambda.IEventSource.bind now accepts IFunction instead of FunctionBase. Use IFunction.addEventSourceMapping to add an event source mapping under the function.
  • lambda: lambda.Layer.grantUsage renamed to lambda.layer.addPermission and returns void
  • stepfunctions: stepfunctions.StateMachine.role is now iam.IRole (previously iam.Role)
  • cloudwatch-events: the events API has been significantly re-worked
    • ⚠️ This new API is still being discussed (see #2609) and might change again in the next release!
    • All onXxx() CloudWatch Event methods now have the signature:
      resource.onEvent('SomeId', {
          target: new SomeTarget(...),
          // options
      });
    • CloudWatch:
      • onAlarm was renamed to addAlarmAction
      • onOk was renamed to addOkAction
      • onInsufficientData was renamed to addInsufficientDataAction
    • AutoScaling:
      • onLifecycleTransition was renamed to addLifecycleHook
    • LambdaDeploymentGroup
      • onPreHook was renamed to addPreHook
      • onPostHook was renamed to addPostHook
    • UserPool:
      • all onXxx were renamed to addXxxTrigger
    • Repository:
      • onImagePushed was renamed to onCloudTrailImagePushed
    • Bucket:
      • onEvent was renamed to addEventNotification
      • onObjectCreated was renamed to addObjectCreatedNotification
      • onObjectRemoved was renamed to addObjectRemovedNotification
      • onPutObject was renamed to onCloudTrailPutObject

0.31.0 (2019-05-06)

Bug Fixes

Code Refactoring

Features

  • bootstrap: allow specifying the toolkit staging bucket name (#2407) (3bfc641), closes #2390
  • codebuild: add webhook Filter Groups. (#2319) (fd74d07), closes #1842
  • elbv2: add fixed response support for application load balancers (#2328) (750bc8b)

BREAKING CHANGES

  • all Foo.import static methods are now Foo.fromFooAttributes
  • all FooImportProps structs are now called FooAttributes
  • stepfunctions.StateMachine.export has been removed.
  • ses.ReceiptRule.name is now ses.ReceiptRule.receiptRuleName
  • ses.ReceiptRuleSet.name is now ses.ReceiptRuleSet.receiptRuleSetName
  • secretsmanager.AttachedSecret is now called secretsmanager.SecretTargetAttachment to match service semantics
  • ecr.Repository.export has been removed
  • s3.Bucket.bucketUrl is now called s3.Bucket.bucketWebsiteUrl
  • lambda.Version.functionVersion is now called lambda.Version.version
  • ec2.SecurityGroup.groupName is now ec2.SecurityGroup.securityGroupName
  • cognito.UserPoolClient.clientId is now cognito.UserPoolClient.userPoolClientId
  • apigateway.IRestApiResource is now apigateway.IResource
  • apigateway.IResource.resourcePath is now apigateway.IResource.path
  • apigateway.IResource.resourceApi is now apigateway.IResource.restApi

0.30.0 (2019-05-02)

Bug Fixes

Code Refactoring

Features

  • cdk-test: check API compatibility (#2356) (1642925), closes #145
  • codepipeline: allow creation of GitHub Pipelines without source trigger (#2332) (ed39a8c)
  • elbv2: add TLS listener for NLB (#2122) (71d694f)

BREAKING CHANGES

  • s3.Bucket.domainName renamed to s3.Bucket.bucketDomainName.
  • codedeploy.IXxxDeploymentConfig.deploymentConfigArn is now a property and not a method.
  • ec2.SecurityGroupBase is now private
  • ec2.VpcNetworkBase is now private
  • kinesis.StreamBase is now private
  • kms.EncryptionKeyBase is now private
  • logs.LogGroupBase is now private
  • ssm.ParameterBase is now private
  • eks.ClusterBase is now private
  • codebuild.ProjectBase is now private
  • codecommit.RepositoryBase is now private
  • codedeploy.ServerDeploymentGroupBase is now private
  • eks.ClusterBase is now private
  • lambda.LayerVersionBase is now private
  • rds.DatabaseClusterBase is now private
  • secretsmanager.SecretBase is now private
  • ses.ReceiptRuleSetBase is now private
  • codepipeline: the pollForSourceChanges property in GitHubSourceAction has been renamed to trigger, and its type changed from a boolean to an enum.

0.29.0 (2019-04-24)

Bug Fixes

  • acm: enabled validation of certificates on the zone name (#2133) (f216f96)
  • aws-apigateway: add integrationHttpMethod prop to AwsIntegration (#2160) (dfc6665), closes #2105
  • aws-cloudwatch: remove workaround on optional DashboardName (6c73d8a), closes #213
  • aws-ecs: fix default daemon deploymentConfig values (#2210) (c2e806b), closes #2209
  • aws-ecs: handle long ARN formats for services (#2176) (66df1c8), closes #1849
  • aws-lambda: fix circular dependency with lambda and codedeploy (#2236) (382da6a)
  • certificatemanager: remove bundled lambda devdependencies (#2186) (6728b41)
  • codebuild: add validation for Source when the badge property is true (#2242) (07812b2), closes #1749
  • core: allow CfnMapping.findInMap to use pseudo functions/params (#2220) (464cb6f), closes #1363
  • core: Use different symbol for Stack.isStack versus CfnReference.isCfnReference (#2305) (c1e41ed)
  • decdk: set the timeout in the schema tests to 10 seconds. (#2250) (8521b6f)
  • dynamodb: remove global secondary index limit (#2301) (43afa3a), closes #2262
  • ecr: Fix typo in ImportRepository error message (#2217) (b7c9b21)
  • elasticloadbalancingv2: dependency between ALB and logging bucket (#2221) (99e085d), closes #1633
  • java-app-template: invoke app.run() (#2300) (47ff448), closes #2289 awslabs/jsii#456
  • lambda: avoid OperationAbortedException when using log retention (#2237) (12a118c)
  • s3: Add validations for S3 bucket names (#2256) (f810265), closes #1308
  • servicediscovery: allow to register multiple instances on a service (#2207) (9f88696)
  • toolkit: don't fail when terminal width is 0 (#2355) (9c2220c), closes #2253
  • toolkit: fix broken confirmation prompt (#2333) (4112c84)
  • toolkit: options requiring arguments fail if not supplied (#2197) (0f6ce56), closes #2192
  • toolkit: remove metadata warning if region does not have resource (#2216) (22ed67c)
  • toolkit: stop 'cdk doctor' from printing AWS_ variables (#2357) (6209c6b), closes #1931
  • codebuild: remove oauthToken property from source (#2252) (8705af3), closes #2252 #2199
  • aws-ec2: correct InstanceSize.Nano spelling (#2215) (d22a154), closes #2215 #2214

Features

  • aws-dynamodb-global: global dynamodb tables (experimental) (#2251) (ec367c8)
  • aws-events-targets: centralized module for cloudwatch event targets (#2343) (1069938)
  • cdk-dasm: generate cdk code from cloudformation (#2244) (b707782)
  • cloudwatch: add support for time ranges in dashboards (#2248) (18c1723)
  • codebuild: add support for more images (#2233) (87b1ea0), closes #2079
  • codepipeline: add ECS deploy Action. (#2050) (d46b814), closes #1386
  • codepipeline: change to stand-alone Artifacts. (#2338) (b778e10)
  • codepipeline: make the default CodePipeline Bucket have an encryption key (#2241) (ef9bba5), closes #1924
  • core: verify CfnOutput has a value and fix VPC export (#2219) (9e87661), closes #2012
  • events-targets: LambdaFunction (#2350) (48d536b), closes #1663
  • ec2: add support for vpc endpoints (#2104) (bbb3f34)
  • lambda: introduce a new kind of Code, CfnParametersCode. (#2027) (4247966)
  • cfnspec: update CloudFormation resources to v2.30.0 (#2239) (aebcde5)
  • toolkit: stage assets under .cdk.assets (#2182) (2f74eb4), closes #1716 #2096

BREAKING CHANGES

  • cloudwatch: Renamed MetricCustomization to MetricOptions.
  • codepipeline: CodePipeline Actions no longer have the outputArtifact and outputArtifacts properties.
  • codepipeline: inputArtifact(s) and additionalInputArtifacts properties were renamed to input(s) and extraInputs.
  • codepipeline: outputArtifactName(s) and additionalOutputArtifactNames properties were renamed to output(s) and extraOutputs.
  • codepipeline: The classes CodeBuildBuildAction and CodeBuildTestAction were merged into one class CodeBuildAction.
  • codepipeline: The classes JenkinsBuildAction and JenkinsTestAction were merged into one class JenkinsAction.
  • events-targets: lambda.Function no longer implements IEventRuleTarget. Instead, use @aws-cdk/aws-events-targets.LambdaFunction.
  • aws-events-targets: sns.Topic no longer implements IEventRuleTarget. Use @aws-cdk/aws-events-targets.SnsTopic instead.
  • codebuild: codebuild.Project no longer implements IEventRuleTarget. Use @aws-cdk/aws-events-targets.CodeBuildProject.
  • core: the cdk.Root construct has been removed. Use cdk.App instead.
  • stepfunctions: In stepfunctions.WaitProps: the props seconds, timestamp, secondsPath and timestampPath are now duration of a union-like class WaitDuration (e.g. duration: WaitDuration.seconds(n))
  • codedeploy: In codedeploy.ServerDeploymentConfigProps: the props minHealthyHostCount and minHealthyHostPercentage are now minimumHealthyHosts of union-like class MinimumHealthyHosts (e.g. minimumHealthyHosts: MinimumHealthyHosts.percentage(50))
  • cloudformation: In cloudformation.CustomResourceProps: the props topicProvider and lambdaProvider are now provider of union-like class CustomResourceProvider (e.g. CustomResourceProvider.lambda(fn)
  • cloudformation: cloudformation.CustomResource no longer extends CfnCustomResource.
  • ssm: ssm.ParameterProps renamed to ssm.ParameterOptions.
  • codepipeline: customers who use GitHub, GitHubEnterprise or Bitbucket as source will need to remove the oauthToken field as it's no longer available.
  • codebuild: change the default image from UBUNTU_14_04_BASE to UBUNTU_18_04_STANDARD.
  • ec2: aws-ec2.InstanceSize.None was renamed to InstanceSize.Nano
  • ec2: * vpc.selectSubnetIds(...) has been replaced with vpc.selectSubnets(...).subnetIds.
  • You will not be able to combine jsii libraries written against previous versions of jsii with this version of the CDK.

0.28.0 (2019-04-04)

Bug Fixes

Code Refactoring

  • cdk: introduce SecretValue to represent secrets (#2161) (a3d9f2e)

Features

  • codepipeline: move all of the Pipeline Actions to their dedicated package. (#2098) (b314ecf)
  • codepipeline: re-factor the CodePipeline Action bind method to take a Role separately from the Pipeline. (#2085) (ffe0046)
  • ec2: support reserving IP space in VPCs (#2090) (4819ff4)
  • Add python support to cdk init (#2130) (997dbcc)
  • ecs: support AWS Cloud Map (service discovery) (#2065) (4864cc8), closes #1554
  • lambda: add a newVersion method. (#2099) (6fc179a)
  • update CloudFormation resource spec to v2.29.0 (#2170) (ebc490d)

BREAKING CHANGES

  • The secretsmanager.SecretString class has been removed in favor of cdk.SecretValue.secretsManager(id[, options])
  • The following prop types have been changed from string to cdk.SecretValue: codepipeline-actions.AlexaSkillDeployAction.clientSecret, codepipeline-actions.AlexaSkillDeployAction.refreshToken, codepipeline-actions.GitHubSourceAction.oauthToken, iam.User.password
  • secretsmanager.Secret.stringValue and jsonFieldValue have been removed. Use secretsmanage.Secret.secretValue and secretJsonValue instead.
  • secretsmanager.Secret.secretString have been removed. Use cdk.SecretValue.secretsManager() or secretsmanager.Secret.import(..).secretValue.
  • The class cdk.Secret has been removed. Use cdk.SecretValue instead.
  • The class cdk.DynamicReference is no longer a construct, and it's constructor signature was changed and was renamed cdk.CfnDynamicReference.
  • grant(function.role) and grant(project.role) are now grant(function) and grant(role).
  • core: Replace use of cdk.Secret with secretsmanager.SecretString (preferred) or ssm.ParameterStoreSecureString.
  • codepipeline: this changes the package of all CodePipeline Actions to be aws-codepipeline-actions.
  • codepipeline: this moves all classes from the aws-codepipeline-api package to the aws-codepipeline package.
  • codepipeline: this changes the CodePipeline Action naming scheme from .PipelineAction (s3.PipelineSourceAction) to codepipeline_actions.Action (codepipeline_actions.S3SourceAction).

0.27.0 (2019-03-28)

Highlights

  • Python support (experimental)
  • You can now run the CLI through npx cdk
  • Make sure to go through the BREAKING CHANGES section below

Bug Fixes

  • autoscaling: verify public subnets for associatePublicIpAddress (#2077) (1e3d41e)
  • ec2: descriptive error message when selecting 0 subnets (#2025) (0de2206), closes #2011
  • lambda: use Alias ARN directly (#2091) (bc40494)
  • rds: remove Instance class (#2081) (6699fed)
  • secretsmanager: allow templated string creation (#2010) (4e105a3)
  • secretsmanager/ssm: verify presence of parameter name (#2066) (b93350f)
  • serverless: rename aws-serverless to aws-sam (#2074) (4a82f13)
  • stepfunctions: make Fail.error optional (#2042) (86e9d03)

Code Refactoring

Features

  • toolkit:: new 'cdk' package to allow executing the cli through npx cdk (#2113) (32bca05)
  • Python Support (#2009) (e6083fa)
  • core: present reason for cyclic references (#2061) (e82e208)
  • lambda: add support for log retention (#2067) (63132ec), closes #667 #667
  • rds: cluster retention, reference KMS key by object (#2063) (99ab46d)
  • secretsmanager/rds: support credential rotation (#2052) (bf79c82)
  • toolkit: introduce the concept of auto-deployed Stacks. (#2046) (abacc66)

BREAKING CHANGES

  • lambda: cloudWatchLogsRetentionTimeDays in @aws-cdk/aws-cloudtrail now uses a logs.RetentionDays instead of a LogRetention.
  • core: stack._toCloudFormation method is now unavailable and is replaced by @aws-cdk/assert.SynthUtils.toCloudFormation(stack).
  • rds: replaced kmsKeyArn: string by kmsKey: kms.IEncryptionKey in DatabaseClusterProps
  • autoscaling: VpcNetwork.isPublicSubnet() has been renamed to VpcNetwork.isPublicSubnetIds().
  • serverless: renamed aws-serverless to aws-sam
  • ec2: vpcPlacement has been renamed to vpcSubnets on all objects, subnetsToUse has been renamed to subnetType. natGatewayPlacement has been renamed to natGatewaySubnets.
  • All properties of all structs (interfaces that do not begin with an "I") are now readonly since it is passed by-value and not by-ref (Python is the first language to require that). This may impact code in all languages that assumed it is possible to mutate these structs. Let us know if this blocks you in any way.

0.26.0 (2019-03-20)

Bug Fixes

Code Refactoring

Features

  • aws-cdk: support fixed repository name for DockerImageAsset (#2032) (942f938)
  • aws-rds: ability to add an existing security group to RDS cluster (#2021) (1f24336)
  • cfn2ts: make cfn2ts output TSDoc-compatible docblocks (#2000) (c6c66e9)
  • cfnspec: update to version 2.28.0 (#2035) (6a671f2)
  • cloudformation: allow specifying additional inputs for deploy Actions (#2020) (2d463be), closes #1247
  • core: can use Constructs to model applications (#1940) (32c2377), closes #1479
  • ecs: support private registry authentication (#1737) (11ed691), closes #1698
  • glue: add L2 resources for Database and Table (#1988) (3117cd3)
  • region-info: Model region-specific information (#1839) (946b444), closes #1282
  • servicediscovery: AWS Cloud Map construct library (#1804) (1187366)
  • ses: add constructs for email receiving (#1971) (3790858)
  • add more directories excluded and treated as source in the JetBrains script. (#1961) (a1df717)

BREAKING CHANGES

  • “toCloudFormation” is now internal and should not be called directly. Instead use “app.synthesizeStack”
  • ecs: ContainerImage.fromDockerHub has been renamed to ContainerImage.fromRegistry.
  • rename Condition to CfnCondition.
  • rename StackElement to CfnElement.
  • rename Parameter to CfnParameter.
  • rename Resource to CfnResource.
  • rename Output to CfnOutput.
  • rename Mapping to CfnMapping.
  • rename Referenceable to CfnRefElement.
  • rename IConditionExpression to ICfnConditionExpression.
  • rename CfnReference to Reference.
  • rename Rule to CfnRule.

0.25.3 (2019-03-12)

Bug Fixes

  • aws-cloudtrail: correct created log policy when sendToCloudWatchLogs is true (#1966) (f06ff8e)
  • aws-ec2: All SSM WindowsVersion entries (#1977) (85a1840)
  • decdk: relax validation when not using constructs (#1999) (afbd591)

Features

0.25.2 (2019-03-07)

Bug Fixes

  • awslint: Don't fail if the @aws-cdk/cdk module is not present (#1953) (929e854)
  • cdk-integ: Update cdk-integ to use new context file (#1962) (dbd2401)
  • cloudfront: allow IBucket as CloudFront source (855f1f5), closes #1946
  • cloudfront: pass viewerProtocolPolicy to the distribution's behaviors (#1932) (615ecd4)
  • eks: remove 'const' from NodeType enum (#1970) (ac52989), closes #1969
  • init: update the C# init sample with the new App API (#1919) (02f991d)

Features

0.25.1 (2019-03-04)

Bug Fixes

0.25.0 (2019-02-28)

Bug Fixes

  • toolkit: Don't collect runtime information when versionReporting is disabled (#1890) (f827a88)
  • aws-codepipeline: update CFN example. (#1653) (5dec01a)
  • aws-s3-deployment: add setup.cfg to fix pip install bug on mac (#1826) (759c708)
  • cdk: move apply() from Construct to ConstructNode (#1738) (642c8a6), closes #1732
  • cloudtrail: addS3EventSelector does not expose all options (#1854) (5c3431b), closes #1841
  • cloudtrail: Invalid resource for policy when using sendToCloudWatchLogs (#1851) (816cfc0), closes #1848
  • cloudwatch: fix name of 'MetricAlarmProps' (#1765) (c87f09a), closes #1760
  • codebuild: accept IRole instead of Role (#1781) (f08ca15), closes #1778
  • codedeploy: LambdaDeploymentGroup now takes IRole (#1840) (f6adb7c), closes #1833
  • codepipeline: allow providing Tokens as the physical name of the Pipeline. (#1800) (f6aea1b), closes #1788
  • core: improve error message if construct names conflict (#1706) (0ea4a78)
  • core: performance improvements (#1750) (77b516f)
  • ecs: rename capacity adding methods (#1715) (e3738ac)
  • elbv2: explicitly implement IApplicationTargetGroup (#1806) (828a2d7), closes #1799
  • init: add new parameter to C# example (#1831) (c7b99d8)
  • kms: have EncryptionKeyBase implement IEncryptionKey (#1728) (49080c6)
  • lambda: Add 'provided' runtime (#1764) (73d5bef), closes #1761
  • lambda: add region check for environment variables (#1690) (846ed9f)
  • ssm: Generate correct SSM Parameter ARN (#1726) (39df456)
  • toolkit: correctly reset context from the shell command (#1903) (58025c0)
  • toolkit: correcty load cdk.json file without context (#1900) (7731565)
  • toolkit: ignore hidden files for 'cdk init' (#1766) (afdd173), closes #1758
  • toolkit: only fail if errors are on selected stacks (#1807) (9c0cf8d), closes #1784 #1783
  • toolkit: support diff on multiple stacks (#1855) (72d2535)
  • build: Npm ignores files and folders named "core" by default (#1767) (42876e7), closes npm/npm-packlist#24
  • core: stack.partition is never scoped (#1763) (c968588)

Features

  • apigateway: add support for MethodResponse to aws-apigateway. (#1572) (46236d9)
  • autoscaling: bring your own IAM role (#1727) (2016b8d), closes #1701
  • aws-eks: add construct library for EKS (#1655) (22fc8b9), closes #991
  • cfnspec: manually add VPCEndpointService (#1734) (f782958), closes #1659
  • codebuild: add support for setting the gitCloneDepth property on Project sources. (#1798) (5408a53), closes #1789
  • core: Add construct.node.stack attribute (#1753) (a46cfd8), closes #798
  • dynamodb: partitionKey and sortKey are now immutable (#1744) (63ae0b4)
  • ecs: allow ECS to be used declaratively (#1745) (2480f0f), closes #1618
  • kms: Allow opting out of "Retain" deletion policy (#1685) (7706302)
  • lambda: allow specify event sources in props (#1746) (a84157d)
  • lambda-event-sources: "api" event source (#1742) (5c11680)
  • route53: Convenience API for creating zone delegations (#1853) (f974531), closes #1847
  • sns: Support raw message delivery (#1827) (cc0a28c)
  • ssm: allow referencing "latest" version of SSM parameter (#1768) (9af36af), closes #1587
  • toolkit: improve docker build time in CI (#1776) (1060b95), closes #1748
  • codepipelines: re-structure the CodePipeline Construct library API. (#1590) (3c3db07)
  • decdk: Prototype for declarative CDK (decdk) (#1618) (8713ac6)

BREAKING CHANGES

  • cloudtrail: The CloudTrail.addS3EventSelector accepts an options object instead of only a ReadWriteType value.
  • codedeploy: If an existing role is provided to a LambdaDeploymentGroup, you will need to provide the assuming service principal (codedeploy.amazonaws.com) yourself.
  • core:$$** 'Aws' class returns unscoped Tokens, introduce a new class 'ScopedAws' which returns scoped Tokens.
  • ssm: Rename parameter.valueAsString => parameter.stringValue, rename parameter.valueAsList => parameter.stringListValue, rename ssmParameter.parameterValue => ssmParameter.stringValue or ssmParameter.stringListValue depending on type, rename secretString.value => secretString.stringValue, rename secret.toSecretString() =>secret.secretString
  • cloudwatch: Rename 'MetricAarmProps' => 'MetricAlarmProps'.
  • core: Stack.find(c) and Stack.tryFind(c) were replaced by c.node.stack.
  • dynamodb: partitionKey is now a required property when defining a dynamodb.Table. The addPartitionKey and addSortKey methods have been removed.
  • cdk: Tag aspects use this feature and any consumers of this implementation must change from myConstruct.apply( ... ) to myConstruct.node.apply( ... ).
  • ecs: Rename 'addDefaultAutoScalingGroupCapacity' => 'addCapacity', 'addAutoScalingGroupCapacity' => 'addAutoScalingGroup'.
  • codepipelines: the CodePipeline Stage class is no longer a Construct, and cannot be instantiated directly, only through calling Pipeline#addStage; which now takes an Object argument instead of a String.
  • codepipelines: the CodePipeline Actions are no longer Constructs.
  • codepipelines: the CodePipeline Action name is now part of the Action props, instead of being a separate parameter.
  • codepipelines: the Pipeline#addToPipeline methods in Resources like S3, CodeBuild, CodeCommit etc. have been renamed to toCodePipelineAction.
  • aws-eks: For AutoScalingGroup, renamed minSize => minCapacity, maxSize => maxCapacity, for consistency with desiredCapacity and also Application AutoScaling. For ECS's addDefaultAutoScalingGroupCapacity(), instanceCount => desiredCapacity and the function now takes an ID (pass "DefaultAutoScalingGroup" to avoid interruption to your deployments).

0.24.1 (2019-02-07)

Bug Fixes

  • reference documentation is missing (8fba8bc)

0.24.0 (2019-02-06)

Bug Fixes

Features

  • aws-s3: add option to specify block public access settings (#1664) (299fb6a)
  • cdk: aspect framework and tag implementation (#1451) (f7c8531), closes #1136 #1497 #360
  • cdk: metric functions now automatically generated (#1617) (36cfca8)
  • cognito: Implement user pool and user pool client constructs (#1615) (8e03ed6)
  • core: overrideLogicalId: override IDs of CFN elements (#1670) (823a1e8), closes #1594
  • secretsmanager: L2 construct for Secret (#1686) (8da9115)
  • serverless: add AWS::Serverless::Application to CFN spec (#1634) (bfa40b1)
  • ssm: Add L2 resource for SSM Parameters (#1515) (9858a64)

BREAKING CHANGES

  • cdk: if you are using TagManager the API for this object has completely changed. You should no longer use TagManager directly, but instead replace this with Tag Aspects. cdk.Tag has been renamed to cdk.CfnTag to enable cdk.Tag to be the Tag Aspect.

0.23.0 (2019-02-04)

Bug Fixes

Features

  • alexa-ask: Add deploy action for Alexa (#1613) (0deea61)
  • apigateway: support function alias in LambdaIntegration (9f8bfa5)
  • app: add source map support to TS app template (#1581) (5df22d9), closes #1579
  • autoscaling: Support AssociatePublicIpAddress (#1604) (23c9afc), closes #1603
  • aws-codepipeline: support setting a Role for a CFN Action (#1449) (77fe077)
  • aws-ecs: add additional configuration to Volume (#1357) (ff96f3f)
  • aws-ecs: add support for Event Targets (#1571) (aa68db5), closes #1370
  • aws-ecs: ECS service scaling on ALB RequestCount (#1574) (2b491d4)
  • aws-s3: add the option to not poll to the CodePipeline Action. (#1260) (876b26d)
  • cdk: Support UpdateReplacePolicy on Resources (#1610) (f49c33b)
  • cdk: treat the "fake" CFN intrinsics (Fn::GetArtifactAtt, Fn::GetParam) specially when stringifying JSON. (#1605) (2af2426), closes #1588
  • cfnspec: Upgrade to CFN Resource Specification v2.21.0 (#1622) (21a5529)
  • cloudwatch: Support 'datapointsToAlarm' on Alarms (#1631) (828ac20), closes #1626
  • core: Generalization of dependencies (#1583) (53e68257)
  • ecs: environment variables for LoadBalancedXxxService (#1537) (b633505)
  • ecs: VPC link for API Gatweay and ECS services (#1541) (6642ca2)
  • iam: Make roleName available on IRole (#1589) (9128390)
  • lambda: reserved concurrent executions (#1560) (f7469c1)
  • lambda: Support AWS Lambda Layers (#1411) (036cfdf)
  • s3: Add DeployAction for codepipeline (#1596) (8f1a5e8)
  • s3: export bucket websiteURL (#1521) (#1544) (4e46d3c)
  • s3: imported bucket format option for website URL format (#1550) (28a423d)
  • toolkit: disable colors if a terminal is not attached to stdout (#1641) (58b4685)

BREAKING CHANGES

  • aws-codepipeline: the role property in the CloudFormation Actions has been renamed to deploymentRole.
  • aws-codepipeline: the role property in the app-delivery package has been renamed to deploymentRole.

0.22.0 (2019-01-10)

This is a major release with multiple breaking changes in the core layers. Please consult the breaking changes section below for details.

We are focusing these days on finalizing the common patterns and APIs of the CDK framework and the AWS Construct Library, which is why you are seeing all these breaking changes. Expect a few more releases with changes of that nature as we stabilize these APIs, so you might want to hold off with upgrading. We will communicate when this foundational work is complete.

Bug Fixes

  • core: automatic cross-stack refs for CFN resources (#1510) (ca5ee35)
  • ecs: correct typo and other minor mistakes in ecs readme (#1448) (9c91b20)
  • elbv2: unable to specify load balancer name (#1486) (5b24583), closes #973 #1481
  • lambda: use IRole instead of Role to allow imports (#1509) (b909dcd)
  • toolkit: fix typo in --rename option description (#1438) (1dd56d4)
  • toolkit: support multiple toolkit stacks in the same environment (#1427) (095da14), closes #1416

Features

BREAKING CHANGES

  • Cross-stack references: if you are using export() and import() to share constructs between stacks, you can stop doing that, instead of FooImportProps accept an IFoo directly on the consuming stack, and use that object as usual.
  • ArnUtils.fromComponents() and ArnUtils.parse() have been moved onto Stack.
  • All CloudFormation pseudo-parameter (such as AWS::AccountId etc) are now also accessible via Stack, as stack.accountId etc.
  • All CloudFormation intrinsic functions are now represented as static methods under the Fn class (e.g. Fn.join(...) instead of new FnJoin(...).toString())
  • resolve() has been moved to this.node.resolve().
  • CloudFormationJSON.stringify() has been moved to this.node.stringifyJson(). validate() now should be protected.
  • The deprecated cloudformation.XxxResource classes have been removed. Use the CfnXxx classes instead.
  • Any CfnXxx resource attributes that represented a list of strings are now typed as string[]s (via #1144). Attributes that represent strings, are still typed as string (#712) and all other attribute types are represented as cdk.Token.
  • route53: The route53.TXTRecord class was renamed to route53.TxtRecord.
  • route53: record classes now require a zone when created (not assuming zone is the parent construct).
  • lambda: the static "metric" methods moved from lambda.FunctionRef to lambda.Function.
  • Many AWS resource classes have been changed to conform to API guidelines:
    • XxxRef abstract classes are now IXxx interfaces
    • XxxRefProps are now XxxImportProps
    • XxxRef.import(...) are now Xxx.import(...) accept XxxImportProps and return IXxx
    • export(): XxxImportProps is now defined in IXxx and implemented by imported resources

0.21.0 (2018-12-20)

Bug Fixes

  • aws-cloudformation: change the type of Role in CodePipeline Actions to IRole. (#1364) (3d07e48), closes #1361
  • codebuild: Rename includeBuildID property of S3BucketBuildArtifacts (#1354) (84eb7ad), closes #1347
  • toolkit: scrutiny dialog should fail with no tty (#1382) (478a714), closes #1380

Features

BREAKING CHANGES

  • aws-cloudformation: this changes the type of the role property in CFN CodePipeline Actions from Role to IRole. This is needed to use imported Roles when creating Actions.
  • aws-codebuild: this changes the API of CodeBuild's GitHub and BitBucket Sources to take an owner/repo pair instead of an entire cloneUrl, to make it consistent with the GitHubSourceAction in the CodePipeline package. Also adds handling the reportBuildStatus and insecureSsl Source properties.
  • codebuild: the includeBuildID property of S3BucketBuildArtifacts was renamed to includeBuildId (note the lower-case trailing d).

0.20.0 (2018-12-13)

Bug Fixes

Features

BREAKING CHANGES

  • assert: the behavior change of haveResource can cause tests to fail. If allowing extension of the expected values is the intended behavior, you can switch to the haveResourceLike matcher instead, which exposes the previous behavior.

0.19.0 (2018-12-04)

Bug Fixes

Features

  • aws-codebuild: allow using docker image assets as build images (#1233) (72413c1), closes #1232 #1219
  • aws-codebuild: rename the Project methods for adding Actions to CodePipeline. (#1254) (825e448), closes #1211
  • aws-ecr: add an ECR Repository source CodePipeline Action. (#1255) (01cc8a2)
  • app-delivery: IAM policy for deploy stack (#1165) (edc9a21), closes #1165 #1151
  • Update to CloudFormation spec v2.16.0 (#1280) (9df5c54)

BREAKING CHANGES

  • aws-codebuild: ecr.RepositoryRef has been replaced by ecr.IRepository, which means that RepositoryRef.import is now Repository.import. Futhermore, the CDK Toolkit must also be upgraded since the docker asset protocol was modified. IRepository.grantUseImage was renamed to IRepository.grantPull.
  • aws-codebuild: addBuildToPipeline was renamed to addToPipeline and addTestToPipeline was renamed to addPipelineToTest in order to align with naming conventions.
  • CloudFormationCapabilities.IAM renamed to CloudFormation.AnonymousIAM and PipelineCloudFormationDeployActionProps.capabilities?: CloudFormationCapabilities[] has been changed to PipelineCloudFormationDeployActionProps.capabilities?: CloudFormationCapabilities no longer an array. PipelineCloudFormationDeployActionProps.fullPermissions?: has been renamed to PipelineCloudFormationDeployActionProps.adminPermissions: and is required instead of optional.

0.18.1 (2018-11-21)

Bug Fixes

0.18.0 (2018-11-19)

Bug Fixes

Features

  • aws-autoscaling: add instance AutoScaling (#1134) (d397dd7), closes #1042 #1113
  • aws-codebuild: add support for additional sources and artifact in Projects. (#1110) (d911b08)
  • aws-ec2: add VPC context provider (#1168) (e8380fa), closes #1095
  • aws-ecs: expose service and target group on the LoadBalancedFargateService (#1175) (e799699)
  • aws-ecs: instance autoscaling and drain hook (#1192) (811462e), closes #1162
  • aws-ecs: Support HTTPS in load balanced Fargate service (#1115) (76a5cc7)
  • aws-ecs: TLS support for Fargate service applet (#1184) (18166ce)
  • update to CloudFormation spec v2.13.0 (#1203) (c531c84)
  • aws-elasticloadbalancingv2: add metrics (#1173) (68d481d), closes #853
  • docs: getting started instructions for csharp (#1185) (2915ac1), closes #696
  • toolkit: add 'cdk context' command (#1169) (2db536e), closes #311
  • toolkit: by default hide AWS::CDK::Metadata from "cdk diff" (#1186) (ef0017a), closes #465
  • toolkit: improve diff user interface (#1187) (9c3c5c7), closes #1121 #1120
  • aws-codepipeline: switch to webhooks instead of polling by default for the GitHub (#1074)

BREAKING CHANGES

  • aws-codebuild: this changes the way CodeBuild Sources are constructed (we moved away from multiple parameters in the constructor, in favor of the more idiomatic property interface).
  • aws-elasticloadbalancingv2: targetGroup.listenerDependency() has been renamed to targetGroup.loadBalancerDependency().

0.17.0 (2018-11-14)

Bug Fixes

  • aws-ecs: remove DockerHub constructor class (#1153) (ed14638)
  • aws-ec2: add dependency on gateway attachment for public routes (#1142) (15b255c), closes #1140
  • s3-deployment: bundle modules correctly (#1154) (0cb1adf)

Features

  • aws-codedeploy: add an addToPipeline method to Deployment Group. (#1166) (bdbeb7c)
  • aws-codepipeline, aws-cloudformation: support cross-region CloudFormation pipeline action (#1152) (8e701ad)
  • toolkit: print available templates when --language is omitted (#1159) (5726c45)

BREAKING CHANGES

  • aws-ec2: Method signature of VpcPublicSubnet.addDefaultIGWRouteEntry changed in order to add a dependency on gateway attachment completing before creating the public route to the gateway. Instead of passing a gateway ID string, pass in a cloudformation.InternetGatewayResource object and a cloudformation.VPCGatewayAttachmentResource object.
  • If you were using DockerHub.image() to reference docker hub images, use ContainerImage.fromDockerHub() instead.

0.16.0 (2018-11-12)

Bug Fixes

  • aws-elasticloadbalancingv2: listener dependency (#1146) (e9d3d93), closes #1139
  • aws-elasticloadbalancingv2: unhealthy threshold (#1145) (a70a50d)

Features

  • aws-codedeploy: CodeDeploy Pipeline Action using the L2 DeploymentGroup Construct. (#1085) (ce999b6)
  • aws-route53: route53 Alias record support (#1131) (72f0124)
  • cdk: allow Tokens to be encoded as lists (#1144) (cd7947c), closes #744

BREAKING CHANGES

  • aws-codedeploy: this changes the API of the CodeDeploy Pipeline Action to take the DeploymentGroup AWS Construct as an argument instead of the names of the Application and Deployment Group.

0.15.2 (2018-11-08)

Bug Fixes

Features

  • aws-ecs: Add desired count to LoadBalanced[Fargate|EC2]Service (#1111) (cafcc11)

0.15.1 (2018-11-06)

Bug Fixes

  • Update peer dependencies to refer to correct version so NPM installs don't fail.
  • Switch back to js-yaml as yaml was emitting unquoted single colons as list elements.

0.15.0 (2018-11-06)

Bug Fixes

  • aws-autoscaling: allow minSize to be set to 0 (#1015) (67f7fa1)
  • aws-codebuild: correctly pass the timeout property to CFN when creating a Project. (#1071) (b1322bb)
  • aws-codebuild: correctly set S3 path when using it as artifact. (#1072) (f32cba9)
  • aws-kms: add output value when exporting an encryption key (#1036) (cb490be)
  • Switch from js-yaml to yaml (#1092) (0b132b5)

Features

  • don't upload the same asset multiple times (#1011) (35937b6), closes #989
  • app-delivery: CI/CD for CDK Stacks (#1022) (f2fe4e9)
  • add a new construct library for ECS (#1058) (ae03ddb)
  • applets: integrate into toolkit (#1039) (fdabe95), closes #849 #342 #291
  • aws-codecommit: use CloudWatch Events instead of polling by default in the CodePipeline Action. (#1026) (d09d30c)
  • aws-dynamodb: allow specifying partition/sort keys in props (#1054) (ec87331), closes #1051
  • aws-ec2: AmazonLinuxImage supports AL2 (#1081) (97b57a5), closes #1062
  • aws-lambda: high level API for event sources (#1063) (1be3442)
  • aws-sqs: improvements to IAM grants API (#1052) (6f2475e)
  • codepipeline/cfn: Use fewer statements for pipeline permissions (#1009) (8f4c2ab)
  • pkglint: Make sure .snk files are ignored (#1049) (53c8d76), closes #643
  • toolkit: deployment ui improvements (#1067) (c832eaf)
  • Update to CloudFormation resource specification v2.11.0

BREAKING CHANGES

  • The ec2.Connections object has been changed to be able to manage multiple security groups. The relevant property has been changed from securityGroup to securityGroups (an array of security group objects).
  • aws-codecommit: this modifies the default behavior of the CodeCommit Action. It also changes the internal API contract between the aws-codepipeline-api module and the CodePipeline Actions in the service packages.
  • applets: The applet schema has changed to allow Multiple applets can be define in one file by structuring the files like this:
  • applets: The applet schema has changed to allow definition of multiple applets in the same file.

The schema now looks like this:

applets:
  MyApplet:
    type: ./my-applet-file
    properties:
      property1: value
      ...

By starting an applet specifier with npm://, applet modules can directly be referenced in NPM. You can include a version specifier (@1.2.3) to reference specific versions.

  • aws-sqs: queue.grantReceiveMessages has been removed. It is unlikely that this would be sufficient to interact with a queue. Alternatively you can use queue.grantConsumeMessages or queue.grant('sqs:ReceiveMessage') if there's a need to only grant this action.

0.14.1 (2018-10-26)

Bug Fixes

  • aws-cdk: fix bug in SSM Parameter Provider (#1023) (6e6aa1d)

0.14.0 (2018-10-26)

IMPORTANT NOTE: when upgrading to this version of the CDK framework, you must also upgrade your installation the CDK Toolkit to the matching version:

$ npm i -g aws-cdk
$ cdk --version
0.14.0 (build ...)

Bug Fixes

Features

BREAKING CHANGES

  • DynamoDB AutoScaling: Instead of addReadAutoScaling(), call autoScaleReadCapacity(), and similar for write scaling.
  • CloudFormation resource usage: If you use L1s, you may need to change some XxxName properties back into Name. These will match the CloudFormation property names.
  • You must use the matching aws-cdk toolkit when upgrading to this version, or context providers will cease to work. All existing cached context values in cdk.json will be invalidated and refreshed.

0.13.0 (2018-10-19)

Highlights

  • A new construct library for AWS Step Functions (docs). The library provides rich APIs for modeling state machines by exposing a programmatic interface for Amazon State Language.
  • A new construct library for Amazon S3 bucket deployments (docs). You can use now automatically populate an S3 Bucket from a .zip file or a local directory. This is a building block for end-to-end support for static websites in the AWS CDK.

Bug Fixes

  • aws-apigateway: make LambdaRestApi proxy by default (#963) (a5f5e2c), closes #959
  • aws-cdk: Allow use of assumed roles behind a proxy (#898) (f2b1048)
  • aws-cdk: Auto-delete stacks that failed creating before new attempt (#917) (2af8309)
  • aws-cloudfront: expose distributionId (#938) (f58d98c)
  • aws-dynamodb: don't emit empty array properties (#909) (841975a)
  • docs: use ..code to display file structure in "writing constructs" (#935) (b743362)

Features

  • assets: isZipArchive indicates if this is a zip asset (#944) (65190f9)
  • aws-cdk: deploy supports CloudFormation Role (#940) (393be6f), closes #735
  • aws-cloudformation: allow specifying custom resource type (#943) (9de3a84)
  • aws-cloudformation: correctly handle the templateConfiguration property in the CreateUpdateStack Pipeline Action. (#923) (d251a46)
  • aws-cloudfront: add support for "webAclId" (#969) (3ec9d76)
  • aws-codedeploy: add auto rollback configuration to server Deployment Group. (#925) (7ee91cf)
  • aws-codedeploy: add instance tag filter support for server Deployment Groups. (#824) (e6e8c51)
  • aws-codedeploy: add support for setting CloudWatch alarms on a server Deployment Group. (#926) (27b26b1)
  • add support for Step Functions (#827) (81b533c)
  • aws-lambda: add grantInvoke() method (#962) (1ee8135), closes #961
  • aws-lambda: improvements to the code and runtime APIs (#945) (36f29b6), closes #902 #188 #947 #947 #664
  • aws-logs: extractMetric() returns Metric object (#939) (5558fff), closes #850
  • aws-s3: initial support for website hosting (#946) (2d3661c)
  • aws-s3-deployment: bucket deployments (#971) (84d6876), closes #952 #953 #954
  • docs: added link to CloudFormation concepts (#934) (666bbba)

BREAKING CHANGES

  • aws-apigateway: specifying a path no longer works. If you used to provide a '/', remove it. Otherwise, you will have to supply proxy: false and construct more complex resource paths yourself.
  • aws-lambda: The construct lambda.InlineJavaScriptLambda is no longer supported. Use lambda.Code.inline instead; lambda.Runtime.NodeJS43Edge runtime is removed. CloudFront docs stipulate that you should use node6.10 or node8.10. It is always possible to use any value by instantiating a lambda.Runtime object.

0.12.0 (2018-10-12)

IMPORTANT NOTE: This release includes a fix for a bug that would make the toolkit unusable for multi-stack applications. In order to benefit from this fix, a globally installed CDK toolkit must also be updated:

$ npm i -g aws-cdk
$ cdk --version
0.12.0 (build ...)

Like always, you will also need to update your project's library versions:

Language Update?
JavaScript/TypeScript (npm) npx npm-check-updates -u
Java (maven) mvn versions:use-latest-versions
.NET (NuGet) nuget update

Bug Fixes

  • aws-codebuild: allow passing oauth token to GitHubEnterpriseSource (#908) (c23da91)
  • toolkit: multi-stack apps cannot be synthesized or deployed (#911) (5511076), closes #868 #294 #910

Features

  • aws-cloudformation: add permission management to CreateUpdate and Delete Stack CodePipeline Actions. (#880) (8b3ae43)
  • aws-codepipeline: make input and output artifact names optional when creating Actions. (#845) (3d91c93)

BREAKING CHANGES

  • aws-codepipeline: this commit contains the following breaking changes:

    • Rename 'artifactName' in Action construction properties to 'outputArtifactName'
    • Rename the 'artifact' property of Actions to 'outputArtifact'
    • No longer allow adding output artifacts to Actions by instantiating the Artifact class
    • Rename Action#input/outputArtifacts properties to _input/_outputArtifacts

Previously, we always required customers to explicitly name the output artifacts the Actions used in the Pipeline, and to explicitly "wire together" the outputs of one Action as inputs to another. With this change, the CodePipeline Construct generates artifact names, if the customer didn't provide one explicitly, and tries to find the first available output artifact to use as input to a newly created Action that needs it, thus turning both the input and output artifacts from required to optional properties.

0.11.0 (2018-10-11)

IMPORTANT NOTE: This release includes a breaking change in the toolkit <=> app protocol. This means that in order to synthesize CDK apps that use this version, the globally installed CDK toolkit must also be updated:

$ npm i -g aws-cdk
$ cdk --version
0.11.0 (build ...)

Like always, you will also need to update your project's library versions:

Language Update?
JavaScript/TypeScript (npm) npx npm-check-updates -u
Java (maven) mvn versions:use-latest-versions
.NET (NuGet) nuget update

Bug Fixes

  • aws-apigateway: allow + in path parts (#769) (0c50d27), closes #768
  • aws-cdk: continue after exceptions in stack monitor (#791) (b0f3298), closes #787
  • aws-cloudfront: check for undefined and determining of the defaultRootObject prop is set or not (#801) (32a74c6)
  • aws-cloudfront: properly support loggingConfig (#809) (5512f70), closes #721
  • aws-codecommit: typo in README (#780) (0e79c2d)
  • aws-ec2: Add Burstable Generation 3 Instances (#812) (d36ee6d)
  • aws-ec2: fix capitalization of "VPCEndpointType" to "VpcEndpointType" (#789) (7a8ee2c), closes #765
  • aws-ec2: fix typo in resource identifier (#818) (f529c80)
  • aws-elbv2: fix load balancer registration (#890) (8cc9abe)
  • aws-s3: properly export bucketDomainName (#844) (a65060d)
  • aws-sqs: Queue.import() doesn't return a value (#885) (c592b7f), closes #879
  • cdk: fix TagManager to evaluate to undefined if no tags are included (#882) (477c827)
  • cdk: init templates were not upgraded to typescript ^3.0.0 (#904) (2cc7475)
  • cdk: jsx support conflicts with React usage (#884) (76d8031), closes #830
  • cfn2ts: expect Token instead of CloudFormationToken (#896) (6eee1d2)
  • docs: fix issue #718 (Aurora DB example) (#783) (016f3a8)
  • docs: update supported languages in README (#819, #450) (#820) (ffac98c)
  • Correct heading level of CHANGELOG.md 0.10.0 (40d9ef0)
  • Emit valid YAML-1.1 (#876) (ff857ea), closes #875
  • toolkit: improve error message for large templates (#900) (a41f48f), closes #34

Code Refactoring

Features

  • aws-apigateway: "LambdaRestApi" and "addProxy" routes (#867) (905a95d)
  • aws-cdk: add maven wrapper to java template (#811) (72aa872)
  • aws-cloudformation: rename the CFN CodePipeline Actions. (#771) (007e7b4)
  • aws-cloudformation: update the ReadMe of the module to reflect the new Action names. (#775) (6c0e75b), closes #771
  • aws-cloudfront: Support Security Policy (#804) (b39bf11), closes #795
  • aws-codedeploy: Add the auto-scaling groups property to ServerDeploymentGroup. (#739) (0b28886)
  • aws-codedeploy: Deployment Configuration Construct. (#653) (e6b67ad)
  • aws-codedeploy: support setting a load balancer on a Deployment Group. (#786) (e7af9f5)
  • aws-codepipeline: allow specifying the runOrder property when creating Actions. (#776) (d146c8d)
  • aws-codepipeline, aws-codecommit, aws-s3: change the convention for naming the source Actions to XxxSourceAction. (#753) (9c3ce7f)
  • aws-dynamodb: IAM grants support (#870) (c5a4200)
  • aws-dynamodb: support Global Secondary Indexes (#760) (3601440)
  • aws-dynamodb: tags support (#814) (924c84e)
  • aws-dynamodB: support Local Secondary Indexes (#825) (3175af3)
  • aws-ec2: add support for ICMP protocol's classification Types & Codes to SecurityGroupRule (#893) (85bd3c0)
  • aws-ec2: allow configuring subnets for NAT gateway (#874) (8ec761c)
  • aws-ec2: support UDP port ranges in SecurityGroups (#835) (b42ef90)
  • aws-elasticloadbalancingv2: support for ALB/NLB (#750) (bd9ee01)
  • aws-s3: support granting public access to objects (#886) (bdee191), closes #877
  • cdk: Add support for UseOnlineResharding with UpdatePolicies (#881) (1f717e1)
  • cdk: configurable default SSM context provider (#889) (353412b)
  • core: resource overrides (escape hatch) (#784) (5054eef), closes #606
  • aws-codepipeline: Manage IAM permissions for (some) CFN CodePipeline actions (#843) (4c69118)
  • toolkit: Stop creating 'empty' stacks (#779) (1dddd8a)
  • aws-autoscaling, aws-ec2: Tagging support for AutoScaling/SecurityGroup (#766) (3d48eb2)

BREAKING CHANGES

  • framework: The cdk.App constructor doesn't accept any arguments, and app.run() does not return a string anymore. All AWS CDK apps in all languages would need to be modified to adhere to the new API of the cdk.App construct.

    Instead of:

    const app = new App(process.argv); // ERROR
    // add stacks
    process.stdout.write(app.run());   // ERROR
    

    The new usage is:

    const app = new App();
    // add stacks
    app.run();
    
  • framework: The CDK is no longer shipped with built-in support for JSX. You can still use JSX but you will have to manually configure it.

  • aws-iam: PolicyDocument, PolicyStatement and all PolicyPrincipal classes moved from the @aws-cdk/cdk module and into the @aws-cdk/aws-iam module.

  • aws-codepipeline-api: Artifact.subartifact method of the CodePipeline API was renamed to Artifact.atPath.

  • constructor signature of TagManager has changed. initialTags is now passed inside a props object.

  • util: @aws-cdk/util is no longer available

  • aws-elasticloadbalancingv2: Adds classes for modeling Application and Network Load Balancers. AutoScalingGroups now implement the interface that makes constructs a load balancing target. The breaking change is that Security Group rule identifiers have been changed in order to make adding rules more reliable. No code changes are necessary but existing deployments may experience unexpected changes.

  • aws-cloudformation: this renames all CloudFormation Actions for CodePipeline to bring them in line with Actions defined in other service packages.

  • aws-codepipeline, aws-codecommit, aws-s3: change the names of the source Actions from XxxSource to XxxSourceAction. This is to align them with the other Actions, like Build. Also, CodeBuild has the concept of Sources, so it makes sense to strongly differentiate between the two.

0.10.0 (2018-09-27)

This release introduces a better way to "escape" L2 constructs in case of missing features by adding the ability to add arbitrary overrides for resource properties:

const bucket = new s3.Bucket(this, 'L2Bucket');

// access L1
const bucketResource = bucket.findChild('Resource') as s3.cloudformation.BucketResource;

// strongly-typed overrides
bucketResource.propertyOverrides.bucketName = 'NewBucketName';

// weakly-typed overrides
bucketResource.addPropertyOverride('BucketName', 'NewerBucketName');

Bug Fixes

  • aws-codecommit: typo in README (#780) (0e79c2d)
  • aws-ec2: fix capitalization of "VPCEndpointType" to "VpcEndpointType" (#789) (7a8ee2c), closes #765
  • docs: fix issue #718 (Aurora DB example) (#783) (016f3a8)

Code Refactoring

Features

  • aws-cloudformation: rename the CodePipeline actions (#771) (007e7b4)
  • aws-cloudformation: update the README of the module to reflect the new action names (#775) (6c0e75b), closes #771
  • aws-codedeploy: add auto-scaling groups property to ServerDeploymentGroup (#739) (0b28886)
  • aws-codedeploy: add deployment configuration construct (#653) (e6b67ad)
  • aws-codepipeline, aws-codecommit, aws-s3: change the convention for naming the source Actions to XxxSourceAction (#753) (9c3ce7f)
  • aws-elasticloadbalancingv2: support for ALB/NLB (#750) (bd9ee01)
  • tagging support for AutoScaling/SecurityGroup (#766) (3d48eb2)
  • core: resource overrides (escape hatch) (#784) (5054eef), closes #606
  • toolkit: stop creating 'empty' stacks (#779) (1dddd8a)

BREAKING CHANGES

  • cdk: the constructor signature of TagManager has changed. initialTags is now passed inside a props object.
  • util: @aws-cdk/util is no longer available
  • aws-elasticloadbalancingv2: adds classes for modeling Application and Network Load Balancers. AutoScalingGroups now implement the interface that makes constructs a load balancing target. The breaking change is that Security Group rule identifiers have been changed in order to make adding rules more reliable. No code changes are necessary but existing deployments may experience unexpected changes.
  • aws-cloudformation: this renames all CloudFormation Actions for CodePipeline to bring them in line with Actions defined in other service packages.
  • aws-codepipeline, aws-codecommit, aws-s3: change the names of the source Actions from XxxSource to XxxSourceAction. This is to align them with the other Actions, like Build. Also, CodeBuild has the concept of Sources, so it makes sense to strongly differentiate between the two.

CloudFormation Changes

0.9.2 (2018-09-20)

NOTICE: This release includes a framework-wide breaking change which changes the type of all the string resource attributes across the framework. Instead of using strong-types that extend cdk.Token (such as QueueArn, TopicName, etc), we now represent all these attributes as normal strings, and codify the tokens into the string (using the feature introduced in #168).

Furthermore, the cdk.Arn type has been removed. In order to format/parse ARNs, use the static methods on cdk.ArnUtils.

See motivation and discussion in #695.

Breaking Changes

  • cfn2ts: use stringified tokens for resource attributes instead of strong types (#712) (6508f78), closes #518 #695 #744
  • aws-dynamodb: Attribute type for keys, changes the signature of the addPartitionKey and addSortKey methods to be consistent across the board. (#720) (e6cc189)
  • aws-codebuild: fix typo "priviledged" -> "privileged

Bug Fixes

Features

  • aws-apigateway: new API Gateway Construct Library (#665) (b0f3857)
  • aws-cdk: detect presence of EC2 credentials (#724) (8e8c295), closes #702 #130
  • aws-codepipeline: make the Stage insertion API in CodePipeline more flexible (#460) (d182818)
  • aws-codepipeline: new "Pipeline#addStage" convenience method (#647) (25c9fa0)
  • aws-rds: add support for parameter groups (#729) (2541508), closes #719
  • docs: add documentation for CDK toolkit plugings (#733) (965b918)
  • dependencies: upgrade to jsii 0.7.6

0.9.1 (2018-09-13)

Bug Fixes

  • aws-cdk: Fix proxy support for account lookup (#693) (5468225), closes #645

Features

  • aws-ec2 BREAKING: Move LoadBalancer to aws-elasticloadbalancing package (#705) (4bd1cf2)
  • aws-serverless BREAKING: Rename @aws-cdk/aws-serverless to @aws-cdk/aws-sam (#704) (3a67d5d)
  • aws-dynamodb: Support DynamoDB TTL (#691) (35b6206)
  • aws-dynamodb: Support DynamoDB PITR (#701) (7a4d7b7)
  • aws-ecr: Add support for ECR repositories (#697) (c6c09bf)
  • aws-lambda: Add support for XRay Tracing (#675) (b4435cc)
  • cfnspec: Add DeploymentPreference Patch for SAM Spec (#681) (#681) (f96c487)

0.9.0 -- 2018-09-10

The headliners of this release are .NET support, and a wealth of commits by external contributors who are stepping up to fix the CDK for their use cases! Thanks all for the effort put into this release!

Features

  • Add strongly-named .NET targets, and a cdk init template for C# projects (@mpiroc in #617, #643).
  • @aws-cdk/aws-autoscaling: Allow attaching additional security groups to Launch Configuration (@moofish32 in #636).
  • @aws-cdk/aws-autoscaling: Support update and creation policies on AutoScalingGroups (@rix0rrr in #595).
  • @aws-cdk/aws-codebuild: Add support for running script from an asset (@rix0rrr in #677).
  • @aws-cdk/aws-codebuild: New method addBuildToPipeline on Project (@skinny85 in 783dcb3).
  • @aws-cdk/aws-codecommit: New method addToPipeline on Repository (@skinny85 in #616).
  • @aws-cdk/aws-codedeploy: Add initial support for CodeDeploy (@skinny85 in #593, #641).
  • @aws-cdk/aws-dynamodb: Add support for DynamoDB autoscaling (@SeekerWing in #637).
  • @aws-cdk/aws-dynamodb: Add support for DynamoDB streams (@rhboyd in #633).
  • @aws-cdk/aws-dynamodb: Add support for server-side encryption (@jungseoklee in #684).
  • @aws-cdk/aws-ec2 (BREAKING): SecurityGroup can now be used as a Connectable #582).
  • @aws-cdk/aws-ec2: Add VPC tagging ([@moofish] in #538).
  • @aws-cdk/aws-ec2: Add support for InstanceSize.Nano (@rix0rrr in #581)
  • @aws-cdk/aws-lambda: Add support for dead letter queues (@SeekerWing in #663).
  • @aws-cdk/aws-lambda: Add support for placing a Lambda in a VPC (@rix0rrr in #598).
  • @aws-cdk/aws-logs: Add extractMetric() helper function (@rix0rrr in #676).
  • @aws-cdk/aws-rds: Add support for Aurora PostreSQL/MySQL engines (@cookejames in #586)
  • @aws-cdk/aws-s3: Additional grant methods for Buckets (@eladb in #591)
  • @aws-cdk/aws-s3: New method addToPipeline on Bucket (@skinny85 in c8b7a49).
  • aws-cdk: Add support for HTTP proxies (@rix0rrr in #666).
  • aws-cdk: Toolkit now shows failure reason if stack update fails (@rix0rrr in #609).
  • cdk-build-tools: Add support for running experiment JSII versions (@RomainMuller in #649).

Changes

  • BREAKING: Generate classes and types for the CloudFormation resource .ref attributes (@rix0rrr in #627).
  • BREAKING: Make types accepted in Policy-related classes narrower (from any to Arn, for example) to reduce typing mistakes (@rix0rrr in #629).
  • @aws-cdk/aws-codepipeline (BREAKING): Align the CodePipeline APIs (@skinny85 in #492, #568)
  • @aws-cdk/aws-ec2 (BREAKING): Move Fleet/AutoScalingGroup to its own package (@rix0rrr in #608).
  • aws-cdk: Simplify plugin protocol (@RomainMuller in #646).

Bug Fixes

  • @aws-cdk/aws-cloudfront: Fix CloudFront behavior for ViewerProtocolPolicy (@mindstorms6 in #615).
  • @aws-cdk/aws-ec2: VPC Placement now supports picking Isolated subnets (@rix0rrr in #610).
  • @aws-cdk/aws-logs: Add export()/import() capabilities (@rix0rrr in #630).
  • @aws-cdk/aws-rds: Fix a bug where a cluster with 1 instance could not be created (@cookejames in #578)
  • @aws-cdk/aws-s3: Bucket notifications can now add dependencies, fixing creation order (@eladb in #584).
  • @aws-cdk/aws-s3: Remove useless bucket name validation (@rix0rrr in #628).
  • @aws-cdk/aws-sqs: Make QueueRef.encryptionMasterKey readonly (@RomainMuller in #650).
  • assets: S3 read permissions are granted on a prefix to fix lost permissions during asset update (@rix0rrr in #510).
  • aws-cdk: Remove bootstrapping error if multiple stacks are in the same environment (@RomainMuller in #625).
  • aws-cdk: Report and continue if git throws errors during cdk init (@rix0rrr in #587).

CloudFormation Changes

  • @aws-cdk/cfnspec: Updated CloudFormation resource specification to v2.6.0 (@RomainMuller in #594)

    • New AWS Construct Library

      • @aws-cdk/aws-sagemaker supports AWS::SageMaker resources
    • New Resource Types

      • AWS::AmazonMQ::Broker
      • AWS::AmazonMQ::Configuration
      • AWS::CodePipeline::Webhook
      • AWS::Config::AggregationAuthorization
      • AWS::Config::ConfigurationAggregator
      • AWS::EC2::VPCEndpointConnectionNotification
      • AWS::EC2::VPCEndpointServicePermissions
      • AWS::IAM::ServiceLinkedRole
      • AWS::SSM::ResourceDataSync
      • AWS::SageMaker::Endpoint
      • AWS::SageMaker::EndpointConfig
      • AWS::SageMaker::Model
      • AWS::SageMaker::NotebookInstance
      • AWS::SageMaker::NotebookInstanceLifecycleConfig
    • Attribute Changes

      • AWS::CodePipeline::Pipeline Version (added)
    • Property Changes

      • AWS::AppSync::DataSource HttpConfig (added)

      • AWS::DAX::Cluster SSESpecification (added)

      • AWS::DynamoDB::Table Stream (added)

      • AWS::DynamoDB::Table AutoScalingSupport (added)

      • AWS::EC2::VPCEndpoint IsPrivateDnsEnabled (added)

      • AWS::EC2::VPCEndpoint SecurityGroupIds (added)

      • AWS::EC2::VPCEndpoint SubnetIds (added)

      • AWS::EC2::VPCEndpoint VPCEndpointType (added)

      • AWS::EC2::VPCEndpoint RouteTableIds.DuplicatesAllowed (deleted)

      • AWS::EC2::VPCPeeringConnection PeerRegion (added)

      • AWS::EFS::FileSystem ProvisionedThroughputInMibps (added)

      • AWS::EFS::FileSystem ThroughputMode (added)

      • AWS::EMR::Cluster KerberosAttributes (added)

      • AWS::Glue::Classifier JsonClassifier (added)

      • AWS::Glue::Classifier XMLClassifier (added)

      • AWS::Glue::Crawler Configuration (added)

      • AWS::Lambda::Lambda DLQConfigurationSupport (added)

      • AWS::Neptune::DBInstance DBSubnetGroupName.UpdateType (changed)

        • Old: Mutable
        • New: Immutable
      • AWS::SNS::Subscription DeliveryPolicy (added)

      • AWS::SNS::Subscription FilterPolicy (added)

      • AWS::SNS::Subscription RawMessageDelivery (added)

      • AWS::SNS::Subscription Region (added)

      • AWS::SQS::Queue Tags (added)

      • AWS::ServiceDiscovery::Service HealthCheckCustomConfig (added)

    • Property Type Changes

      • AWS::AppSync::DataSource.HttpConfig (added)

      • AWS::DAX::Cluster.SSESpecification (added)

      • AWS::EMR::Cluster.KerberosAttributes (added)

      • AWS::Glue::Classifier.JsonClassifier (added)

      • AWS::Glue::Classifier.XMLClassifier (added)

      • AWS::ServiceDiscovery::Service.HealthCheckCustomConfig (added)

      • AWS::CloudFront::Distribution.CacheBehavior FieldLevelEncryptionId (added)

      • AWS::CloudFront::Distribution.DefaultCacheBehavior FieldLevelEncryptionId (added)

      • AWS::CodeBuild::Project.Artifacts EncryptionDisabled (added)

      • AWS::CodeBuild::Project.Artifacts OverrideArtifactName (added)

      • AWS::CodeBuild::Project.Environment Certificate (added)

      • AWS::CodeBuild::Project.Source ReportBuildStatus (added)

      • AWS::ServiceDiscovery::Service.DnsConfig RoutingPolicy (added)

      • AWS::WAF::WebACL.ActivatedRule Action.Required (changed)

        • Old: true
        • New: false
  • @aws-cdk/cfnspec: Updated Serverless Application Model (SAM) Resource Specification (@RomainMuller in #594)

    • Property Changes

      • AWS::Serverless::Api MethodSettings (added)
    • Property Type Changes

      • AWS::Serverless::Function.SQSEvent (added)

      • AWS::Serverless::Function.EventSource Properties.Types (changed)

        • Added SQSEvent

0.8.2 - 2018-08-15

Features

  • @aws-cdk/cdk: Tokens can now be transparently embedded into strings and encoded into JSON without losing their semantics. This makes it possible to treat late-bound (deploy-time) values as if they were regular strings (@rix0rrr in #518).
  • @aws-cdk/aws-s3: add support for bucket notifications to Lambda, SNS, and SQS targets (@eladb in #201, #560, #561, #564)
  • @aws-cdk/cdk: non-alphanumeric characters can now be used as construct identifiers (@eladb in #556)
  • @aws-cdk/aws-iam: add support for maxSessionDuration for Roles (@eladb in #545).

Changes

  • @aws-cdk/aws-lambda (BREAKING): most classes renamed to be shorter and more in line with official service naming (Lambda renamed to Function or ommitted) (@eladb in #550)
  • @aws-cdk/aws-codepipeline (BREAKING): move all CodePipeline actions from @aws-cdk/aws-xxx-codepipeline packages into the regular @aws-cdk/aws-xxx service packages (@skinny85 in #459).
  • @aws-cdk/aws-custom-resources (BREAKING): package was removed, and the Custom Resource construct added to the @aws-cdk/aws-cloudformation package (@rix0rrr in #513)

Fixes

  • @aws-cdk/aws-lambda: Lambdas that are triggered by CloudWatch Events now show up in the console, and can only be triggered the indicated Event Rule. BREAKING for middleware writers (as this introduces an API change), but transparent to regular consumers (@eladb in #558)
  • @aws-cdk/aws-codecommit: fix a bug where pollForSourceChanges could not be set to false (@maciejwalkowiak in #534)
  • aws-cdk: don't fail if the ~/.aws/credentials file is missing (@RomainMuller in #541)
  • @aws-cdk/aws-cloudformation: fix a bug in the CodePipeline actions to correctly support TemplateConfiguration (@mindstorms6 in #571).
  • @aws-cdk/aws-cloudformation: fix a bug in the CodePipeline actions to correctly support ParameterOverrides (@mindstorms6 in #574).

Known Issues

  • cdk init will try to init a git repository and fail if no global user.name and user.email have been configured.

0.8.1 - 2018-08-08

Features

  • aws-cdk: Support --profile in command-line toolkit (@rix0rrr in #517)
  • @aws-cdk/cdk: Introduce Default construct id (@rix0rrr in #496)
  • @aws-cdk/aws-lambda: Add LambdaRuntime.DotNetCore21 (@Mortifera in #507)
  • @aws-cdk/runtime-values (BREAKING): rename 'rtv' to 'runtime-values' (@rix0rrr in #494)
  • @aws-cdk/aws-ec2: Combine Connections and DefaultConnections classes (@rix0rrr in #453)
  • @aws-cdk/aws-codebuild: allow buildSpec parameter to take a filename (@rix0rrr in #470)
  • @aws-cdk/aws-cloudformation-codepipeline: add support for CloudFormation CodePipeline actions (@mindstorms6 and @rix0rrr in #525).
  • docs: Improvements to Getting Started (@eladb in #462)
  • docs: Updates to README (@Doug-AWS in #456)
  • docs: Upgraded jsii-pacmak to 0.6.4, which includes "language-native" type names and package coordinates (@RomainMuller in awslabs/jsii#130)

Bug fixes

0.8.0 - 2018-07-31

This is the first public release of the AWS CDK!

0.7.4 - 2018-07-26

Highlights

  • A huge shout-out to our first external contributor, @moofish32, for many valuable improvements to the EC2 VPC construct (@moofish32 in #250).
  • The AWS::CDK::Metadata resource is injected to templates to analyze usage and notify about deprecated modules to improve security. To opt-out, use the switch --no-version-reporting or set version-reporting to false in your cdk.json (@RomainMuller in [#221]).
  • Added capability for bundling local assets (files/directories) and referencing them in CDK constructs. This allows, for example, to define Lambda functions with runtime code in the same project and deploy them using the toolkit (@eladb in #371).
  • Reorganization of CodePipeline actions into separate libraries (@skinny85 in #401 and #402).
  • A new library for CloudWatch Logs (@rix0rrr in #307).

AWS Construct Library

  • BREAKING: All AWS libraries renamed from @aws-cdk/xxx to @aws-cdk/aws-xxx in order to avoid conflicts with framework modules (@RomainMuller in #384).
  • BREAKING: The @aws-cdk/resources module has been removed. Low-level CloudFormation resources (e.g. BucketResource) are now integrated into their respective library under the cloudformation namespace to improves discoverability and organization of the layers (@RomainMuller in #264).

Framework

  • Introducing CDK Assets which are local files or directories that can be "bundled" into CDK constructs and apps. During deployment assets are packaged (i.e. zipped), uploaded to S3 and their deployed location can be referenced in CDK apps via the s3BucketName and s3ObjectKey and s3Url and read permissions can be granted via asset.grantRead(principal) (@eladb in #371)
  • Return dummy values instead of fail synthesis if environmental context (AZs, SSM parameters) doesn't exist in order to support unit tests. When synthesizing through the toolkit, an error will be displayed if the context cannot be found (@eladb in #227)
  • Added construct.addError(msg), addWarning(msg) and addInfo(msg) which will emit messages during synthesis via the toolkit. Errors will fail synthesis (unless --ignore-errors is used), warnings will be displayed and will fail synthesis if --strict is used (@eladb in #227)

Command Line Toolkit

  • The toolkit now injects a special CloudFormation resource AWS::CDK::Metadata to all synthesized templates which includes library versions used in the app. This allows the CDK team to analyze usage and notify users if they use deprecated versions (@RomainMuller in [#221]).
  • Bug fix: Fixed "unknown command: docs" (@RomainMuller in #256)
  • Changed output of cdk list to just print stack names (scripting-compatible). Use cdk ls -l to print full info (@eladb in #380)

AWS EC2

  • BREAKING: Add the ability customize subnet configurations. Subnet allocation was changed to improve IP space efficiency. VpcNetwork instances will need to be replaced (@moofish32 in #250)
  • BREAKING: Renamed Fleet to AutoScalingGroup to align with service terminology (@RomainMuller in #318)

AWS Lambda

  • Supports runtime code via local files or directories through assets (@eladb in #405)
  • Support custom execution role in props (@rix0rrr in #205)
  • Add static metricAllConcurrentExecutions and metricAllUnreservedConcurrentExecutions which returns account/region-level metrics for all functions (@rix0rrr in #379)

AWS CloudWatch

  • Added Metric.grantMetricPutData which grants cloudwatch:PutData to IAM principals (@rix0rrr in #214)
  • Bug fix: Allow text included in dashboard widgets to include characters that require JSON-escaping (@eladb in #406).

AWS CloudWatch Logs (new)

  • A new construct library for AWS CloudWatch Logs with support for log groups, metric filters, and subscription filters (@rix0rrr in #307).

AWS S3

  • Added bucketUrl and urlForObject(key) to BucketRef (@eladb in #370)

AWS CodeBuild

  • Add CloudWatch metrics to BuildProject (@eladb in [#407])

AWS CodePipeline

  • BREAKING: Moved CodeCommit and CodeBuild and LambdaInvoke actions from the CodePipeline library to @aws-cdk/aws-xxx-codepipline modules (@skinny85 in #401 and #402).
  • Added attributes pipelineName and pipelineVersion (@eladb in #408)

Docs

  • fix: add instructions and fix Windows setup (@mpiroc in #320)
  • fix: show emphasis of modified code in code snippets (@eladb in #396)

0.7.3 - 2018-07-09

Highlights

  • Introducing Java support (see the Getting Started documentation topic for instructions on how to set up a Java project).
  • Introduce a new programming model for CloudWatch metrics, alarms and dashboards (see the @aws-cdk/cloudwatch documentation).
  • Multiple documentation improvements (open with cdk docs).

Known Issues

  • Missing instructions for Windows Setup (#138)
  • cdk docs works but a message Unknown command: docs is printed (#256)
  • Java: passing null behaves differently than no arguments. Workaround is to build an empty object (#157)

Changes

  • Introduce Java support (@eladb in #229, #245, #148, #149)
  • Changed the way the beta archive is structured to no longer bundle a pre-installed node_modules directory but rather only a local npm repository. This changes the setup instructions to require y-npm i -g aws-cdk to install the toolkit on the system, which is more inline with the setup experience post-beta (@RomainMuller in #161, #162 and awslabs/jsii#43).
  • CloudWatch (new): introduce a rich programming model for metrics, alarms and dashboards (@rix0rrr in #180, #194)
  • S3 (feature): add support for SSE-S3 encryption (@rix0rrr in #257)
  • Lambda (feature): add support for node.js 8.10 runtime (@RomainMuller in #187)
  • Runtime Values (fix): use allowed characters in SSM parameter name when advertising a runtime value (@eladb in #208)
  • SNS (docs): convert examples in README into compiled code (@rix0rrr in #107)
  • Toolkit (feature): introduce cdk doctor to collect information for diagnostics (@RomainMuller in #177)
  • Toolkit (feature): align AWS credentials behavior to AWS CLI (@RomainMuller in #175)
  • Toolkit (performance): cache default AWS account ID on disk (@eladb in #220)
  • Docs: multiple updates (@Doug-AWS in #142)
  • Docs: improve topic on logical IDs (@eladb in #209)
  • Docs: add support for code snippets in multiple tabs (@eladb in #231)
  • Docs: rewrote the "Getting Started" documentation topic to include step-by-step project setup details instead of using cdk-init. This is in order to improve understanding of how the CDK works when users get started (@eladb in #245)
  • Resource bundler: generate .d.ts (@rix0rrr in #172)

0.7.2 - 2018-06-19

Known issues

  • Windows setup has not been vetted and might be broken - no workaround (#138)
  • If region is not defined, error message is unclear - workaround: make sure to define region when running aws configure (#131)
  • cdk docs opens the index instead of the welcome page - workaround: click on "Welcome" in the sidebar (#129)
  • The runtime values library (@aws-cdk/rtv) is broken (#151)

0.7.1 - 2018-06-15

Framework

  • Two-way IAM policy statement additions have been removed for S3 and SNS, because those services treat resource and identity policies as additive. KMS grants are still added on both resource and identity because KMS requires permissions set from both sides.

Toolkit

  • cdk init interface changed to accept the template name as a positional argument, and the language as an option. A --list option was added to allow listing available templates.
  • cdk-beta-npm is a wrapper to npm that executes commands with a local registry that has the CDK packages available. It should be used instead of npm for subcommands such as npm install.
  • CDK now respects AWS_DEFAULT_REGION environment variable if set.

0.7.0 - 2018-06-13

Framework

  • BREAKING: All CDK packages are non under the scope @aws-cdk (e.g. @aws-cdk/s3).
  • BREAKING: The jsii compiler now configures tsconfig.json to produce definition files (files with a .d.ts extension). This requires updating your existing package.json files types key to replace the .ts extension with a .d.ts extension.
  • Java bindings now include static methods and constants.
  • SecretParameter can be used to load values from the SSM parameter store during deployment and use them as Secrets.
  • Stack is locked for mutations during synthesis to protect against accidental changes in lazy values.
  • An overhaul of documentation updates, edits and improvements.

ACM

  • Fix: cloudFrontDefaultCertificate is mutually exclusive with acmCertificateArn.

CloudFront (new)

  • Added a new construct library for AWS CloudFront.

CodeBuild

  • Added support for specifying environment variables at the container and project levels.

CodePipeline

  • Fix: GitHub action "owner" changed to ThirdParty.
  • Removed all fluent APIs
  • Use "master" as the default branch for Source actions
  • BREAKING: AmazonS3SourceProps - renamed key to bucketKey

Custom Resources

  • BREAKING: Require that Lambda is referenced explicitly when defining a custom resource. SingletonLambda can be used to encapsulate the custom resource's lambda function but only have a single instance of it in the stack.

Events (new)

A new cross-stack programming model is introduced to support CloudWatch Events. Event sources implement onXxx methods for various events that can emitted by that source and event targets implement IEventRuleTarget, so they can be polymorphically added to rules.

const repo = new Repository(stack, 'MyRepo', { repositoryName: 'my-repo' });
const project = new BuildProject(stack, 'MyProject', { source: new CodeCommitSource(repo) });

const topic = new Topic(stack, 'MyTopic');
topic.subscribeEmail('Personal', 'myteam@mycompany.com');

project.onStateChange(topic);

Coverage to all event sources and target will be added in subsequent releases.

Supported targets:

  • codebuild.BuildProject
  • codepipline.Pipeline
  • sns.Topic

Supported sources:

  • CodeBuild: onStateChange, onPhaseChange, onBuildStarted, onBuildFailed, onBuildSucceeded.
  • CodeCommit: onEvent, onStateChange, onReferenceCreated, onReferenceUpdated, onReferenceDeleted, onPullRequestStateChange, onCommentOnPullRequest, onCommentOnCommit, onCommit.
  • CodePipeline: pipeline.onStateChange, stage.onStateChange, action.onStateChange.

IAM

  • Add CanonicalUserPrincipal
  • Add statementCount to PolicyDocumennt.
  • Extended support for FederatedPrincipal.

Lambda

  • Add initialPolicy prop which allows specifying a set of PolicyStatements upon definition.

S3

  • Added support for lifecycle rules
  • Add domainName and dualstackDomainName attributes

Serverless

  • version field of FunctionResource is now optional.

SNS

  • BREAKING: subscribeXxx APIs now do not require a name when possible (for queue, Lambda).
  • Unique SID assigned to resource policy statements.

Toolkit

  • cdk docs opens your browser with the bundled documentation content.
  • cdk init interface changed to specify --lang and --type separately.
  • Plug-in architecture improved.

0.6.0 - 2018-05-16

AWS Construct Libraries

The main theme for this release is the stabilization of our framework APIs and an initial set of AWS Construct Libraries.

Previously, CDK users would normally to program against the @aws-cdk/resources library which included generated classes for all CloudFormation resources. For example, the sqs.QueueResource defined the AWS::SQS::Queue CloudFormation resource.

Starting in 0.6, we recommend that users define their infrastructure using a new set of hand-crafted libraries we refer to as AWS Construct Libraries (we used to call these "Layer 2" or "L2"). These libraries include CDK constructs with rich and powerful object-oriented APIs for defining infrastructure.

For example:

const vpc = new VpcNetwork(this, 'MyVpc');

const fleet = new Fleet(this, 'MyFleet', {
    vpc, instanceType: new InstanceTypePair(InstanceClass.M4, InstanceSize.XLarge),
    machineImage: new AmazonLinuxImage()
});

const clb = new ClassicLoadBalancer(this, 'LB', {
    vpc, internetFacing: true
});

clb.addListener({ externalPort: 80 });
clb.addTarget(fleet);

Synthesizing this stack to the us-east-1 region (which has 6 availability zones) will result in a CloudFormation template that contains 72 resources of 17 different resource types.

Construct initializers now include a name

All constructs in a CDK stack must have a name unique amongst its siblings. Names are used to allocate stack-wide logical IDs for each CloudFormation resource. Prior to this release, the name of the class was implicitly used as a default name for the construct. As much as this was convenient, we realized it was misleading and potentially unsafe, since a change in a class name will result in changes to all logical IDs for all resources created within that tree, and changes to logical IDs result in resource replacement since CloudFormation cannot associate the existing resource with the new resource (this is the purpose of logical IDs in CloudFormation).

Therefore, we decided construct names deserve an explicit and prominent place in our programming model and starting from this release, they have been promoted to the 2nd argument of all initializers.

new MyConstruct(parent, name, props);

New scheme for allocating CloudFormation logical IDs

In order to ensure uniqueness of logical IDs within a stack, we need to reflect the resource's full CDK path within it's logical ID. Prior to this release, logical IDs were a simple concatenation of the path components leading up to the resource. However, this could potentially create unresolvable conflicts ("a/b/c" == "ab/c").

Since logical IDs may only use alphanumeric characters and also restricted in length, we are unable to simply use a delimited path as the logical ID. Instead IDs are allocated by concatenating a human-friendly rendition from the path (components, de-duplicate, trim) with a short MD5 hash of the delimited path:

VPCPrivateSubnet2RouteTable0A19E10E
<-----------human---------><-hash->

One exception to this scheme is resources which are direct children of the Stack. Such resources will use their name as a logical ID (without the hash). This is done to support easier migration from existing CloudFormation templates.

Renaming logical IDs to avoid destruction of resources

If you have CDK stacks deployed with persistent resources such as S3 buckets or DynamoDB tables, you may want to explicitly "rename" the new logical IDs to match your existing resources.

First, make sure you compare the newly synthesized template with any deployed stacks. cdk diff will tell you which resources will be destroyed if you deploy this update:

[-] Destroying MyTable (type: AWS::DynamoDB::Table)
[+] Creating MyTableCD117FA1 (type: AWS::DynamoDB::Table)

In order to avoid this, you can use stack.renameLogical(from, to) as follows. Note that renameLogical must be called before the resource is defined as logical IDs are allocated during initialization:

// must be before defining the table (this instanceof Stack)
this.renameLogical('MyTableCD117FA1', 'MyTable');
new dynamodb.Table(this, 'MyTable', { /* .. */ });

Now, cdk diff should indicate no differences.

All "props" types are now interfaces instead of classes

In order to improve the developer experience, we have changed the way we model construct "Props" and now they are defined as TypeScript interfaces. This has a few implications on how to use them:

In TypeScript, new XxxProps() won't work, you will have to simply assign an object literal:

new Queue(this, 'MyQueue', { visibilityTimeoutSec: 300 });

In Java, you can create a concrete object using a builder:

new Queue(this, "MyQueue", QueueProps.builder()
    .withVisibilityTimeout(300)
    .build());

A design pattern for exporting/importing resources

All AWS constructs implement a common pattern which allows treating resources defined within the current stack and existing resources to be treated via a common interface:

For example, when defining a Pipeline, you can supply an artifacts bucket.

The bucket is defined within the same stack:

const bucket = new Bucket(this, 'MyArtifactsBucket');
new Pipeline(this, 'MyCoolPipeline', { artifactsBucket: bucket });

You can also import a bucket by just specifying its name:

const bucket = Bucket.import({ bucketName: new BucketName('my-bucket') });
new Pipeline(this, 'MyCoolPipeline', { artifactsBucket: bucket });

Or you can export the bucket from another stack and import it:

// some other stack:
const bucket = new Bucket(otherStack, 'MyBucket');
const externalBucket = bucket.export();
// bucketRef contains tokens that allow you to pass it into `import`.

// my stack:
const importedBucket = Bucket.import(this, 'OtherArtifactsBucket', externalBucket);
new Pipeline(this, 'MyCoolPipeline', { artifactsBucket: importedBucket });

Region-aware APIs for working with machine images (AMIs)

The @aws-cdk/ec2 library exposes a new API for region-aware AMI discovery:

const ami = new AmazonLinuxImage({
    edition: AmazonLinuxEdition.Standard, // default
    virtualization: AmazonLinuxVirt.HVM,  // default
    storage: AmazonLinuxStorage.EBS       // default is GeneralPurpose
});

new Fleet(this, 'MyAmazonLinuxFleet', { machineImage: ami, ... });

For Windows:

const ami = new WindowsImage(WindowsVersion.WindowsServer2016EnglishNanoBase);
new Fleet(this, 'MyWindowsFleet', { machineImage: ami, ... });

Or, a mapping utility:

const ami = new GenericLinuxImage({
    'us-east-1': 'ami-62bda218',
    'eu-west-1': 'ami-773acbcc'
});

new Fleet(this, 'MySuseFleet', { machineImage: ami, ... });

A rich programming model for Code Suite services

The @aws-cdk/codebuild, @aws-cdk/codecommit and @aws-cdk/codepipeline construct libraries include rich APIs for defining continuous integration pipelines and builds.

The following code defines a pipeline with a CodeCommit source and CodeBuild build step. The pipeline is created with an artifacts bucket and a role, and least-privilege policy documents are automatically generated.

// define a CodeCommit repository
const repo = new Repository(stack, 'MyRepo', { repositoryName: 'my-repo' });

// define a pipeline with two stages ("source" and "build")
const pipeline  = new Pipeline(stack, 'Pipeline');
const sourceStage = new Stage(pipeline, 'source');
const buildStage  = new Stage(pipeline, 'build');

// associate the source stage with the code commit repository
const source = new codecommit.PipelineSource(sourceStage, 'source', {
    artifactName: 'SourceArtifact',
    repository: repo,
});

// associate the build stage with code build project
new codebuild.PipelineBuildAction(buildStage, 'build', {
    project: new BuildProject(stack, 'MyBuildProject', { source: new CodePipelineSource() },
    source
});

Inline JavaScript Lambda Functions

The @aws-cdk/lambda library includes an InlineJavaScriptLambda construct which makes it very easy to implement simple node.js Lambda functions with code inline in the CDK.

This CDK program defines an S3 Bucket and a Lambda function, and sets all the needed permissions. When the function is invoked, a file named 'myfile.txt' will be uploaded to the bucket with the text "Hello, world". The physical bucket name is passed through via the BUCKET_NAME environment variable.

const bucket = new Bucket(this, 'MyBucket');

const lambda = new InlineJavaScriptLambda(this, 'MyLambda', {
    environment: {
        BUCKET_NAME: bucket.bucketName
    },
    handler: {
        fn: (event: any, context: any, callback: any) => {
            const s3 = new require('aws-sdk').S3();

            const req = {
                Bucket: process.env.BUCKET_NAME,
                Key: 'myfile.txt',
                Body: 'Hello, world'
            };

            return s3.upload(req, (err, data) => {
                if (err) return callback(err);
                console.log(data);
                return callback();
            });
        }
    }
});

// grant the Lambda execution role read/write permissions for the bucket
// this also adds a corresponding bucket resource policy
bucket.grantReadWrite(lambda.role);

Resource and role IAM policies and grants

All AWS constructs now expose APIs for naturally adding statements to their resource or role policies. Constructs may have addToRolePolicy(statement) or addToResourcePolicy(statement) methods, which can be used to mutate the policies associated with a resource.

The statement is a PolicyStatement object with a rich API for producing IAM statements. This is an excerpt from the implementation of topic.subscribeQueue:

queue.addToResourcePolicy(new PolicyStatement()
    .addResource(queue.queueArn)
    .addAction('sqs:SendMessage')
    .addServicePrincipal('sns.amazonaws.com')
    .setCondition('ArnEquals', { 'aws:SourceArn': this.topicArn }));

The S3 bucket construct has a set of "grant" methods (grantRead, grantReadWrite) which accept a principal resource (user, role or group) and an optional key prefix pattern and will render reciprocal IAM permissions, both in the principal's policy and the bucket policy:

const reader = new User(this, 'Reader');
const bucket = new Bucket(this, 'MyBucket');
bucket.grantRead(reader);

Synthesizes to:

Resources:
  ReaderF7BF189D:
    Type: AWS::IAM::User
  ReaderDefaultPolicy151F3818:
    Type: AWS::IAM::Policy
    Properties:
      PolicyDocument:
        Statement:
        - Action: [ "s3:GetObject*", "s3:GetBucket*", "s3:List*" ]
          Effect: Allow
          Resource:
          - { "Fn::GetAtt": [ "MyBucketF68F3FF0", "Arn" ] }
          - { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "MyBucketF68F3FF0", "Arn" ] }, "/", "*" ] ] }
        Version: '2012-10-17'
      PolicyName: ReaderDefaultPolicy151F3818
      Users: [ { "Ref": "ReaderF7BF189D" } ]
  MyBucketF68F3FF0:
    Type: AWS::S3::Bucket
  MyBucketPolicyE7FBAC7B:
    Type: AWS::S3::BucketPolicy
    Properties:
      Bucket: { "Ref": "MyBucketF68F3FF0" }
      PolicyDocument:
        Statement:
        - Action: [ "s3:GetObject*", "s3:GetBucket*", "s3:List*" ]
          Effect: Allow
          Principal:
            AWS: { "Fn::GetAtt": [ "ReaderF7BF189D", "Arn" ] }
          Resource:
          - { "Fn::GetAtt": [ "MyBucketF68F3FF0", "Arn" ] }]
          - { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "MyBucketF68F3FF0", "Arn" ] }, "/", "*" ] ] }
        Version: '2012-10-17'

Security group connections framework

The @aws-cdk/ec2 library includes a rich framework for modeling security group connections between resources such as a fleet, load balancers and databases.

For example, these automatically create appropriate ingress and egress rules in both security groups:

// allow fleet1 top connect to fleet2 on port 80
fleet1.connections.allowTo(fleet2, new TcpPort(80), 'Allow between fleets');

// allow fleet3 to accept connections from a load balancer on ports 60000-65535
fleet3.connections.allowFrom(loadBalancer, new TcpPortRange(60000, 65535), 'Allow from load balancer');

Improvements to attribute classes and tokens

  • Remove the "Attribute" postfix from all generated attribute types. So now, it is QueueArn instead of QueueArnAttribute. "Attribute" postfix from attribute types
  • Simplify the initialization of Token objects (all attribute types are Tokens). They can now be either initialized with a simple value or a lazy function. This means, that now you can write new QueueArn('foo'). This is useful when importing external resources into the stack.

Improvements to the CDK Toolkit

The toolkit now outputs YAML instead of JSON by default.

Added active progress reporting for stack updates.

The diff output has been dramatically improved and provides a structure-aware diff. For example:

[~] Updating TableCD117FA1 (type: AWS::DynamoDB::Table)
        .ProvisionedThroughput:
            .WriteCapacityUnits: 10
    Creating MyQueueE6CA6235 (type: AWS::SQS::Queue)

Library for unit and integration testing

The CDK is now shipped with a library called @aws-cdk/assert which aims to make it easy to write unit and integration tests for CDK libraries and apps. The library leverages the same powerful template diff mechanism used in the toolkit to print rich descriptions.

import { expect } from '@aws-cdk/assert';

const stack = new Stack();
new Queue(stack, 'MyQueue', { visibilityTimeout: 300 });

expect(stack).to(haveResource('AWS::SQS::Queue', { VisibilityTimeout: 300 }));
expect(stack).to(countResources('AWS::SQS::Queue', 1));
expect(stack).toMatch({
    Resources: {
        MyQueue: {
            Type: 'AWS::SQS::Queue',
            Properties: {
                VisibilityTimeout: 300
            }
        }
    }
});

An initial integration testing utility is now available to allow users to implement manually executed CDK integration tests and ensure they are kept up-to-date if the code changes. This is an initial approach until we have a great way to automatically execute them during CI/CD.

Updates to the IAM policy library

The APIs in the IAM policy library have been improved and now provide a richer and more strongly-typed experience.

A class hierarchy around PolicyPrincipal was created to reflect the various principals available: AccountPrincipal, ServicePrincipal, ArnPrincipal, AccountRootPrincipal.

The Arn type now has the ability to format and parse to/from its components:

Arn.fromComponents({
    service: 'dynamodb',
    resource: 'table',
    account: '123456789012',
    region: 'us-east-1',
    partition: 'aws-cn',
    resourceName: 'mytable/stream/label'
});

// and
const bucketArn = Arn.parse('arn:aws:s3:::my_corporate_bucket')
// bucketArn === { partition: 'aws', service: 's3', resource: 'my_corporate_bucket' }

The Permission class was renamed to PolicyStatement and enriched with more strongly typed APIs.

A new library for defining custom CloudFormation resources

A library to facilitate the definition of custom CloudFormation resources and exposing them as regular CDK constructs is now shipped with the CDK.

0.5.0 - 2018-03-29

AWS Resource Constructs (L1)

  • All CloudFormation resource constructs are now available from the @aws-cdk/resources package under their dedicated AWS service's namespace. we have been calling these resource constructs Layer 1 (or "L1 constructs").
  • All resource constructs now have the Resource suffix (TableResource instead of Table). This helps differentiate them from the rich AWS constructs we are also introducing in this release.
  • The CloudFormation resource property "Name" is now called "xxxName" (where "xxx" is the name of the resource, like "queue") instead of "resourceName".
  • Updated resources based on the latest CloudFormation resource specification.

Before:

import { Pipeline } from '@aws-cdk/codepipeline';

new Pipeline(this, {
    resourceName: 'MyPipelineName'
});

After:

import { codepipeline } from '@aws-cdk/resources';

new codepipeline.PipelineResource(this, {
    pipelineName: 'MyPipelineName'
});

Framework

  • Introducing CDK Applets which allow instantiating specific CDK stacks using a declarative YAML syntax.
  • As a first step to enable diagnostics features in the toolkit, record logical ID (and stack trace) in metadata for stack elements.
  • Introduce a new scheme for generating CloudFormation logical IDs which adds a hash of the construct path to the generated ID to avoid ID collisions. To opt-in for the new scheme, set hashedLogicalIDs to true when creating a Stack.
  • Allow specifying explicit logicalID for stack elements like Resource Parameter and Output.
  • async exec() changed to run() and validate was changed to be a synchronous method instead of async.
  • Merged @aws-cdk/core into aws-cdk, which now where the core classes of the CDK framework live.
  • The Runtime Values library, which was under @aws-cdk/rtv is now @aws-cdk/rtv.
  • Bugfix: Tags could not be used because they failed validation.
  • Bugfix: Allow "-" in stack names.

Toolkit

  • The toolkit is now called CDK Toolkit instead of "cx Toolkit". This means that the cx command-command line program is now called cdk.
  • Added support large CloudFormation templates using a "toolkit stack" which contains an S3 bucket. This approach may be extended to provide other environment-related facilities in the future and requires that users "bootstrap" the toolkit stack into their environments. The current behavior will not require this stack unless you are trying to deploy a large template.
  • It is now possible to synthesize all stacks into a directory.
  • Allow using globs in cdk deploy to select multiple stacks.
  • Default account ID lookup result is now cached.
  • Better error messages.
  • Improve deploy output.
  • Bugfix: Better error message when the app has no stacks.
  • Bugfix: Distinguish actual "stack missing" from "no credentials".
  • Bugfix: Delete stack in unrecoverable state.
  • Bugfix: Fix an issue where 'deploy' fails because subsequent invocations use the same argument array.
  • Bugfix: prevent crash if ~/.aws/config doesn't exist.

Documentation and Examples

  • Implemented a few advanced examples These examples show how to use IAM policies, environmental context, template inclusion, nested stacks, resource references and using various CloudFormation semantics in the CDK

0.4.0 - 2018-03-05

New Features

  • Environments - this version extends the fidelity of a CDK deployment target from only region to region + account, also referred to as an environment. This allows modeling complete apps that span multiple accounts/regions. To preserve the current behavior, if region/account is not specified, the CDK will default to the AWS SDK region/credential provider chain (~/.aws/config). We will add support for AWS SDK Profiles in a future release. See the Environments section of the CDK README for details).
  • Environmental Context (such as availability zones and SSM parameters) - there are use-cases where CDK stacks need to consult with account and region-specific information when they are synthesized (we call this information "environmental context"). For example, the set of supported availability zones is specific to account and region; the specific ID of certain public AMIs (Amazon Machine Image IDs) as published to the SSM parameter store is specific to each region. See the Environmental Context section in the CDK README for details .
  • Runtime Values - a new mechanism for advertising values such as resource attributes and constants from construction-time to runtime code via the SSM parameter store. See the Runtime Values section in the CDK README for details.
  • Construct Validation - it is now possible to implement a method validate(): string[] for any construct at any layer. Validation methods are all executed before a stack is synthesized and provide an opportunity for constructs to implement validation logic. See the Construct Validation section in the CDK README for details.
  • User-specific cx.json - the toolkit will now incorporate settings from ~/.cx.json. This allows users to supply user-specific settings. Note this file is applied before the project-specific cx.json file is applied.
  • IAM Library Improvements - allow creating IAM documents with a base document, a new class AssumeRolePolicyDocument, allow specifying multiple actions when creating a Permission ob object.
  • stack.findResource(logicalId) - allows retriving a resource object from a stack based on it's calculated logical ID.
  • Windows AMIs are read from SSM parameter store.

Bug Fixes

  • cx Toolkit returns a non-zero exit code when an error occurs.
  • Retain original names of CloudFormation properties instead of auto-capitalizing based on heuristics, which caused some unexpected behavior in certain scenarios.
  • CAPABILITY_NAMED_IAM was added to "cx deploy" by default.

0.3.0 - 2018-01-30

Highlights

  • Java support:
class HelloJavaStack extends Stack {
    public HelloJavaStack(final Construct parent, final StackProps props) {
        super(parent, props);

        VpcNetwork vpc = new VpcNetwork(this);

        new Fleet(this, new FleetProps()
                .withVpcSubnetwork(vpc.getPrivateSubnetwork())
                .withInstanceType(new InstanceType("t2.micro"))
                .withMachineImage(new WindowsMachineImage(0)));
    }
}
  • cx Toolkit now supports standard AWS credentials.

  • CloudFormation pseudo parameters and intrinsic functions are now implemented as normal classes (AwsRegion, AwsStackId, FnConcat) instead of static methods. We might introduce functional sugar at a later stage, but at the lower-level, we want to represent both intrinsic functions and pseudo parameters as classes so we can model their relationship more accurately. For example, all pseudo parameters extend PseudoParameter, all functions extends the Fn, all condition functions extend FnCondition, etc.

Before:

Fn.if_(Fn.equals(param.ref, 'True'), 'Encrypted', Pseudo.NO_VALUE)

After:

new FnIf(Fn.equals(param.ref, 'True'), 'Encrypted', new AwsNoValue())
  • CloudFormation template options (templateFormatVersion, description and transform) are now grouped under Stack.templateOptions instead of directly under Stack.

Before:

stack.description = 'This is my awesome template'

After:

stack.templateOptions.description = 'This is my awesome template'

Known Issues

  • Stack names are limited to alphanumeric characters, so it won't be possible to set stack names to match existing deployed stacks. As a workaround you can use cx --rename to specify the actual stack name to use for diff or deploy. Thanks rmuller@ for reporting.
  • When synthesizing templates, we transform all JSON keys to pascal case to conform with CloudFormation standards, but this also affects JSON blobs that are not CloudFormation such as IAM documents or environment variables.

Non-breaking Changes

  • Added support for CloudFormation Rules.
  • Cloud Executable Interface (CXI): changed semantics from "construct" to "synthesize" (backwards compatible).
  • Tokens: improve error reporting when unable to resolve tokens.

0.2.0 - 2017-12-07

Highlights

Construct Names

  • The initializer signature for constructs has changed and is now: new Construct(parent[, props]), where props is may include an optional name property ("id" is now called "name").
  • If name is not specified, the type name is used as the name. This will only be allowed when there is a single construct of a certain type under a parent.
  • If a parent has more than a single child of the same type, all children must have an explicit names to avoid ambiguity when generating CloudFormation logical IDs.
  • JSX support updated to use name instead of id when producing construct trees.

Before:

new BeautifulConstruct(this, 'MyBeautifulConstruct', { ...props })

After:

new BeautifulConstruct(this) // use defaults
new BeautifulConstruct(this, { ...props })
// or
new BeautifulConstruct(this, { name: 'MyBeautifulConstruct', ...props })

Resource Attribute Types

  • CloudFormation resource attribute properties now return a specialized type per attribute. For example, the sqs.queueArn property returns a QueueArnAttribute object instead of a Token.
  • The Attribute and ArnAttribute classes extend Token and used as base classes for attribute types.
  • Resource names are now added as a prefix to attribute properties (queueArn instead of arn). This is required for future support for duck-typing and polymorphic use of resources of multiple types via a single container.

Before:

const t = new aws.dynamodb.Table(this);
assert(t.arn instanceof Token);

After:

const t = new aws.dynamodb.Table(this);
assert(t.tableArn instanceOf TableArnAttribute);
assert(t.tableArn instanceOf ArnAttribute);
assert(t.tableArn instanceOf Token);

Construct Metadata

  • Constructs can now have metadata entries attached to them via addMetadata(type,data).
  • Each entry will also include the stack trace from which the entry was added, which will later be used to improve the diagnosability of deployment errors.
  • Stack metadata can be obtained using cx-Toolkit via cx metadata.
  • construct.addWarning(msg) attaches a "warning" metadata entry to a construct, which is displayed as a warning when synthesizing or deploying the stack.
  • cx-Toolkit will show warnings upon synthesis also supports --strict mode which will refuse to deploy stacks with warnings.

Example:

const c = new Construct(this);
c.addWarning('this is a warning');
c.addMetadata('type', 'data');
$ cx metadata
{
  "/Stack/Construct": [
    {
      "type": "type",
      "data": "data",
      "trace": [ ... ]
    },
    {
      "type": "warning",
      "data": "this is a warning",
      "trace": [ ... ]
    }
  ]
}
$ cx synth
Warning: this is a warning (at /Stack/Construct)
...

Resource Enrichments

  • Replaced topic.subscribeToXxx with topic.subscribe(target) where target is anything that adheres to the SubscriptionTarget interface (technically it's an abstract class because jsii doesn't support interfaces yet).
  • Removed function.addExecutionRole() - an execution role is automatically created when invoking function.addPermission(p).

Tokens

  • The evaluate method is now called resolve.

CX Toolkit Usability Improvements

  • If an app contains a single stack, no need to specify the stack name.
  • synth --interactive (or synth --interactive --verbose) now displays real-time updates of a template's contents. Really nice for fast iteration;
  • The toolkit now reads cx.json for default arguments. Very useful, for example, to remove the need to specify --app in every invocation.