Skip to content

Commit d46c474

Browse files
authored
2 parents 265d769 + ef05a4b commit d46c474

File tree

158 files changed

+46242
-2746
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

158 files changed

+46242
-2746
lines changed

.github/workflows/repo-metrics-monthly.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
echo "last_month=$first_day..$last_day" >> "$GITHUB_ENV"
3131
3232
- name: Report on issues
33-
uses: github/issue-metrics@v2
33+
uses: github/issue-metrics@v3
3434
env:
3535
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3636
SEARCH_QUERY: 'repo:aws/aws-cdk is:issue created:${{ env.last_month }} -reason:"not planned"'
@@ -44,7 +44,7 @@ jobs:
4444
assignees: evgenyka
4545

4646
- name: Report on PRs
47-
uses: github/issue-metrics@v2
47+
uses: github/issue-metrics@v3
4848
env:
4949
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
5050
SEARCH_QUERY: 'repo:aws/aws-cdk is:pr created:${{ env.last_month }} -is:draft'

.github/workflows/repo-metrics-weekly.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
echo "last_week=$PREVIOUS_MONDAY..$CURRENT_SUNDAY" >> "$GITHUB_ENV"
3131
3232
- name: Report on issues
33-
uses: github/issue-metrics@v2
33+
uses: github/issue-metrics@v3
3434
env:
3535
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3636
SEARCH_QUERY: 'repo:aws/aws-cdk is:issue created:${{ env.last_week }} -reason:"not planned"'
@@ -44,7 +44,7 @@ jobs:
4444
assignees: paulhcsun
4545

4646
- name: Report on PRs
47-
uses: github/issue-metrics@v2
47+
uses: github/issue-metrics@v3
4848
env:
4949
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
5050
SEARCH_QUERY: 'repo:aws/aws-cdk is:pr created:${{ env.last_week }} -is:draft'

.github/workflows/request-cli-integ-test.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
persist-credentials: false
2020
- name: Find changed cli files
2121
id: changed-cli-files
22-
uses: tj-actions/changed-files@20576b4b9ed46d41e2d45a2256e5e2316dde6834
22+
uses: tj-actions/changed-files@2d756ea4c53f7f6b397767d8723b3a10a9f35bf2
2323
with:
2424
base_sha: ${{ github.event.pull_request.base.sha }}
2525
files_yaml: |

CHANGELOG.v2.alpha.md

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
44

5+
## [2.135.0-alpha.0](https://github.com/aws/aws-cdk/compare/v2.134.0-alpha.0...v2.135.0-alpha.0) (2024-04-01)
6+
57
## [2.134.0-alpha.0](https://github.com/aws/aws-cdk/compare/v2.133.0-alpha.0...v2.134.0-alpha.0) (2024-03-26)
68

79

CHANGELOG.v2.md

+21
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,27 @@
22

33
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
44

5+
## [2.135.0](https://github.com/aws/aws-cdk/compare/v2.134.0...v2.135.0) (2024-04-01)
6+
7+
8+
### Features
9+
10+
* **lambda:** adding support for Ruby3.3 lambda runtime ([#29680](https://github.com/aws/aws-cdk/issues/29680)) ([e63c777](https://github.com/aws/aws-cdk/commit/e63c7770ea0a7ec12353973cdf64015f9a4121f1))
11+
* update L1 CloudFormation resource definitions ([#29677](https://github.com/aws/aws-cdk/issues/29677)) ([99e9589](https://github.com/aws/aws-cdk/commit/99e9589487e0455a0622380fa50248b811d9131d)), closes [/docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.requirements.html#aurora-serverless-v2](https://github.com/aws//docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.requirements.html/issues/aurora-serverless-v2) [/docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.requirements.html#aurora-serverless-v2](https://github.com/aws//docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.requirements.html/issues/aurora-serverless-v2)
12+
* **route53:** allow specifying an STS region when creating a cross-account zone delegation ([#29466](https://github.com/aws/aws-cdk/issues/29466)) ([fe4bc1d](https://github.com/aws/aws-cdk/commit/fe4bc1dccae89ace70f3dab81b7e7545173d5750))
13+
* **sns:** add signature version prop ([#29543](https://github.com/aws/aws-cdk/issues/29543)) ([dffedca](https://github.com/aws/aws-cdk/commit/dffedca154f7cb31a5cefc24c638ad069577c836)), closes [#29539](https://github.com/aws/aws-cdk/issues/29539)
14+
15+
16+
### Bug Fixes
17+
18+
* **cli:** cdk watch for Lambdas with Advanced Logging Controls do not stream logs to the terminal ([#29451](https://github.com/aws/aws-cdk/issues/29451)) ([4dbf5c8](https://github.com/aws/aws-cdk/commit/4dbf5c8414fa130c328807dc1d701d8a301d66fc)), closes [#29448](https://github.com/aws/aws-cdk/issues/29448) [/github.com/aws/aws-cdk/blob/main/packages/aws-cdk/lib/api/logs/find-cloudwatch-logs.ts#L114](https://github.com/aws//github.com/aws/aws-cdk/blob/main/packages/aws-cdk/lib/api/logs/find-cloudwatch-logs.ts/issues/L114)
19+
* **cli:** ecs hotswap deployment waits correctly for success or failure ([#28448](https://github.com/aws/aws-cdk/issues/28448)) ([5c30255](https://github.com/aws/aws-cdk/commit/5c30255b70b51ef760a72a64769614c0297e6c94))
20+
* **ec2:** global vpc endpoint support ([#29563](https://github.com/aws/aws-cdk/issues/29563)) ([df48fd7](https://github.com/aws/aws-cdk/commit/df48fd781a476ada79b6b49f006a60f33f73d409)), closes [#29560](https://github.com/aws/aws-cdk/issues/29560) [10.0.0.2#53](https://github.com/aws/10.0.0.2/issues/53) [10.0.0.2#53](https://github.com/aws/10.0.0.2/issues/53)
21+
* **eks:** missing support for "InstanceTypes" attribute assignment for AL2023 AMIs ([#29505](https://github.com/aws/aws-cdk/issues/29505)) ([e77ce26](https://github.com/aws/aws-cdk/commit/e77ce26091a3890f5b025e794374a95e2ce61fb1)), closes [#29335](https://github.com/aws/aws-cdk/issues/29335)
22+
* **events-targets:** hardcoded AWS partition in ECS task resource ARN ([#29633](https://github.com/aws/aws-cdk/issues/29633)) ([69cff2e](https://github.com/aws/aws-cdk/commit/69cff2eda84dacfe265d518fc88ccf55930f59c4)), closes [#29610](https://github.com/aws/aws-cdk/issues/29610)
23+
* **route53:** allow records with a weight of 0 ([#29595](https://github.com/aws/aws-cdk/issues/29595)) ([cc7e95b](https://github.com/aws/aws-cdk/commit/cc7e95ba91848345352981a141559170c375a0d2)), closes [#29556](https://github.com/aws/aws-cdk/issues/29556)
24+
* add validation for ALB access log bucket when KMS key is provided ([#29382](https://github.com/aws/aws-cdk/issues/29382)) ([2cc2449](https://github.com/aws/aws-cdk/commit/2cc24499bf62b6dd48ae9bd265c38a6847f75a3f)), closes [#22031](https://github.com/aws/aws-cdk/issues/22031)
25+
526
## [2.134.0](https://github.com/aws/aws-cdk/compare/v2.133.0...v2.134.0) (2024-03-26)
627

728

CONTRIBUTORS.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,20 @@ Shout out to our top contributors!
1313
- [otaviomacedo](https://github.com/otaviomacedo)
1414
- [mrgrain](https://github.com/mrgrain)
1515
- [madeline-k](https://github.com/madeline-k)
16-
- [NetaNir](https://github.com/NetaNir)
1716
- [comcalvi](https://github.com/comcalvi)
17+
- [NetaNir](https://github.com/NetaNir)
1818
- [robertd](https://github.com/robertd)
1919
- [pahud](https://github.com/pahud)
20-
- [MrArnoldPalmer](https://github.com/MrArnoldPalmer)
2120
- [TheRealAmazonKendra](https://github.com/TheRealAmazonKendra)
21+
- [MrArnoldPalmer](https://github.com/MrArnoldPalmer)
2222
- [lpizzinidev](https://github.com/lpizzinidev)
2323
- [peterwoodworth](https://github.com/peterwoodworth)
2424
- [go-to-k](https://github.com/go-to-k)
2525
- [colifran](https://github.com/colifran)
2626
- [nija-at](https://github.com/nija-at)
2727
- [hoegertn](https://github.com/hoegertn)
28+
- [msambol](https://github.com/msambol)
2829
- [watany-dev](https://github.com/watany-dev)
29-
- [jumic](https://github.com/jumic)
3030

3131

32-
_Last updated: Fri, 01 Mar 24 00:09:32 +0000_
32+
_Last updated: Mon, 01 Apr 24 00:09:41 +0000_

package.json

+5-5
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@
2020
"@types/prettier": "2.6.0",
2121
"@yarnpkg/lockfile": "^1.1.0",
2222
"aws-sdk-js-codemod": "^0.28.2",
23-
"cdk-generate-synthetic-examples": "^0.1.307",
23+
"cdk-generate-synthetic-examples": "^0.1.308",
2424
"conventional-changelog-cli": "^2.2.2",
2525
"fs-extra": "^9.1.0",
2626
"graceful-fs": "^4.2.11",
2727
"jest-junit": "^13.2.0",
28-
"jsii-diff": "1.95.0",
29-
"jsii-pacmak": "1.95.0",
30-
"jsii-reflect": "1.95.0",
31-
"jsii-rosetta": "~5.3.29",
28+
"jsii-diff": "1.96.0",
29+
"jsii-pacmak": "1.96.0",
30+
"jsii-reflect": "1.96.0",
31+
"jsii-rosetta": "~5.3.31",
3232
"lerna": "^7.4.2",
3333
"nx": "^16.10.0",
3434
"patch-package": "^6.5.1",

packages/@aws-cdk-testing/cli-integ/lib/aws.ts

+2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export class AwsClients {
1818
public readonly cloudFormation: AwsCaller<AWS.CloudFormation>;
1919
public readonly s3: AwsCaller<AWS.S3>;
2020
public readonly ecr: AwsCaller<AWS.ECR>;
21+
public readonly ecs: AwsCaller<AWS.ECS>;
2122
public readonly sns: AwsCaller<AWS.SNS>;
2223
public readonly iam: AwsCaller<AWS.IAM>;
2324
public readonly lambda: AwsCaller<AWS.Lambda>;
@@ -34,6 +35,7 @@ export class AwsClients {
3435
this.cloudFormation = makeAwsCaller(AWS.CloudFormation, this.config);
3536
this.s3 = makeAwsCaller(AWS.S3, this.config);
3637
this.ecr = makeAwsCaller(AWS.ECR, this.config);
38+
this.ecs = makeAwsCaller(AWS.ECS, this.config);
3739
this.sns = makeAwsCaller(AWS.SNS, this.config);
3840
this.iam = makeAwsCaller(AWS.IAM, this.config);
3941
this.lambda = makeAwsCaller(AWS.Lambda, this.config);

packages/@aws-cdk-testing/cli-integ/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
},
4040
"dependencies": {
4141
"@octokit/rest": "^18.12.0",
42-
"aws-sdk": "^2.1583.0",
42+
"aws-sdk": "^2.1586.0",
4343
"axios": "^1.6.8",
4444
"fs-extra": "^9.1.0",
4545
"glob": "^7.2.3",

packages/@aws-cdk-testing/cli-integ/resources/cdk-apps/app/app.js

+57
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ var constructs = require('constructs');
44
if (process.env.PACKAGE_LAYOUT_VERSION === '1') {
55
var cdk = require('@aws-cdk/core');
66
var ec2 = require('@aws-cdk/aws-ec2');
7+
var ecs = require('@aws-cdk/aws-ecs');
78
var s3 = require('@aws-cdk/aws-s3');
89
var ssm = require('@aws-cdk/aws-ssm');
910
var iam = require('@aws-cdk/aws-iam');
@@ -17,6 +18,7 @@ if (process.env.PACKAGE_LAYOUT_VERSION === '1') {
1718
DefaultStackSynthesizer,
1819
LegacyStackSynthesizer,
1920
aws_ec2: ec2,
21+
aws_ecs: ecs,
2022
aws_s3: s3,
2123
aws_ssm: ssm,
2224
aws_iam: iam,
@@ -357,6 +359,60 @@ class LambdaHotswapStack extends cdk.Stack {
357359
}
358360
}
359361

362+
class EcsHotswapStack extends cdk.Stack {
363+
constructor(parent, id, props) {
364+
super(parent, id, props);
365+
366+
// define a simple vpc and cluster
367+
const vpc = new ec2.Vpc(this, 'vpc', {
368+
natGateways: 0,
369+
subnetConfiguration: [
370+
{
371+
cidrMask: 24,
372+
name: 'Public',
373+
subnetType: ec2.SubnetType.PUBLIC,
374+
},
375+
],
376+
maxAzs: 1,
377+
});
378+
const cluster = new ecs.Cluster(this, 'cluster', {
379+
vpc,
380+
});
381+
382+
// allow stack to be used to test failed deployments
383+
const image =
384+
process.env.USE_INVALID_ECS_HOTSWAP_IMAGE == 'true'
385+
? 'nginx:invalidtag'
386+
: 'nginx:alpine';
387+
388+
// deploy basic service
389+
const taskDefinition = new ecs.FargateTaskDefinition(
390+
this,
391+
'task-definition'
392+
);
393+
taskDefinition.addContainer('nginx', {
394+
image: ecs.ContainerImage.fromRegistry(image),
395+
environment: {
396+
SOME_VARIABLE: process.env.DYNAMIC_ECS_PROPERTY_VALUE ?? 'environment',
397+
},
398+
healthCheck: {
399+
command: ['CMD-SHELL', 'exit 0'], // fake health check to speed up deployment
400+
interval: cdk.Duration.seconds(5),
401+
},
402+
});
403+
const service = new ecs.FargateService(this, 'service', {
404+
cluster,
405+
taskDefinition,
406+
assignPublicIp: true, // required without NAT to pull image
407+
circuitBreaker: { rollback: false },
408+
desiredCount: 1,
409+
});
410+
411+
new cdk.CfnOutput(this, 'ClusterName', { value: cluster.clusterName });
412+
new cdk.CfnOutput(this, 'ServiceName', { value: service.serviceName });
413+
}
414+
}
415+
360416
class DockerStack extends cdk.Stack {
361417
constructor(parent, id, props) {
362418
super(parent, id, props);
@@ -532,6 +588,7 @@ switch (stackSet) {
532588

533589
new LambdaStack(app, `${stackPrefix}-lambda`);
534590
new LambdaHotswapStack(app, `${stackPrefix}-lambda-hotswap`);
591+
new EcsHotswapStack(app, `${stackPrefix}-ecs-hotswap`);
535592
new DockerStack(app, `${stackPrefix}-docker`);
536593
new DockerStackWithCustomFile(app, `${stackPrefix}-docker-with-custom-file`);
537594
const failed = new FailedStack(app, `${stackPrefix}-failed`)

packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/cli.integtest.ts

+77
Original file line numberDiff line numberDiff line change
@@ -1571,6 +1571,83 @@ integTest('hotswap deployment supports Fn::ImportValue intrinsic', withDefaultFi
15711571
}
15721572
}));
15731573

1574+
integTest('hotswap deployment supports ecs service', withDefaultFixture(async (fixture) => {
1575+
// GIVEN
1576+
const stackArn = await fixture.cdkDeploy('ecs-hotswap', {
1577+
captureStderr: false,
1578+
});
1579+
1580+
// WHEN
1581+
const deployOutput = await fixture.cdkDeploy('ecs-hotswap', {
1582+
options: ['--hotswap'],
1583+
captureStderr: true,
1584+
onlyStderr: true,
1585+
modEnv: {
1586+
DYNAMIC_ECS_PROPERTY_VALUE: 'new value',
1587+
},
1588+
});
1589+
1590+
const response = await fixture.aws.cloudFormation('describeStacks', {
1591+
StackName: stackArn,
1592+
});
1593+
const serviceName = response.Stacks?.[0].Outputs?.find(output => output.OutputKey == 'ServiceName')?.OutputValue;
1594+
1595+
// THEN
1596+
1597+
// The deployment should not trigger a full deployment, thus the stack's status must remains
1598+
// "CREATE_COMPLETE"
1599+
expect(response.Stacks?.[0].StackStatus).toEqual('CREATE_COMPLETE');
1600+
expect(deployOutput).toContain(`ECS Service '${serviceName}' hotswapped!`);
1601+
}));
1602+
1603+
integTest('hotswap deployment for ecs service waits for deployment to complete', withDefaultFixture(async (fixture) => {
1604+
// GIVEN
1605+
const stackArn = await fixture.cdkDeploy('ecs-hotswap', {
1606+
captureStderr: false,
1607+
});
1608+
1609+
// WHEN
1610+
await fixture.cdkDeploy('ecs-hotswap', {
1611+
options: ['--hotswap'],
1612+
modEnv: {
1613+
DYNAMIC_ECS_PROPERTY_VALUE: 'new value',
1614+
},
1615+
});
1616+
1617+
const describeStacksResponse = await fixture.aws.cloudFormation('describeStacks', {
1618+
StackName: stackArn,
1619+
});
1620+
const clusterName = describeStacksResponse.Stacks?.[0].Outputs?.find(output => output.OutputKey == 'ClusterName')?.OutputValue!;
1621+
const serviceName = describeStacksResponse.Stacks?.[0].Outputs?.find(output => output.OutputKey == 'ServiceName')?.OutputValue!;
1622+
1623+
// THEN
1624+
1625+
const describeServicesResponse = await fixture.aws.ecs('describeServices', {
1626+
cluster: clusterName,
1627+
services: [serviceName],
1628+
});
1629+
expect(describeServicesResponse.services?.[0].deployments).toHaveLength(1); // only one deployment present
1630+
1631+
}));
1632+
1633+
integTest('hotswap deployment for ecs service detects failed deployment and errors', withDefaultFixture(async (fixture) => {
1634+
// GIVEN
1635+
await fixture.cdkDeploy('ecs-hotswap');
1636+
1637+
// WHEN
1638+
const deployOutput = await fixture.cdkDeploy('ecs-hotswap', {
1639+
options: ['--hotswap'],
1640+
modEnv: {
1641+
USE_INVALID_ECS_HOTSWAP_IMAGE: 'true',
1642+
},
1643+
allowErrExit: true,
1644+
});
1645+
1646+
// THEN
1647+
expect(deployOutput).toContain(`❌ ${fixture.stackNamePrefix}-ecs-hotswap failed: ResourceNotReady: Resource is not in the state deploymentCompleted`);
1648+
expect(deployOutput).not.toContain('hotswapped!');
1649+
}));
1650+
15741651
async function listChildren(parent: string, pred: (x: string) => Promise<boolean>) {
15751652
const ret = new Array<string>();
15761653
for (const child of await fs.readdir(parent, { encoding: 'utf-8' })) {

packages/@aws-cdk-testing/framework-integ/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,9 @@
4040
"dependencies": {
4141
"@aws-cdk/integ-tests-alpha": "0.0.0",
4242
"@aws-cdk/lambda-layer-kubectl-v24": "^2.0.242",
43+
"@aws-cdk/lambda-layer-kubectl-v29": "^2.0.0",
4344
"aws-cdk-lib": "0.0.0",
44-
"aws-sdk": "^2.1583.0",
45+
"aws-sdk": "^2.1586.0",
4546
"aws-sdk-mock": "5.6.0",
4647
"cdk8s": "2.68.46",
4748
"cdk8s-plus-27": "2.7.84",

packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-global-endpoint.js.snapshot/cdk.out

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-global-endpoint.js.snapshot/globalvpcendpointDefaultTestDeployAssertE52DED6D.assets.json

+19
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-global-endpoint.js.snapshot/globalvpcendpointDefaultTestDeployAssertE52DED6D.template.json

+36
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)