@liflig/cdk 2.21.3 → 2.21.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/lib/index.d.ts +1 -4
  2. package/lib/index.js +2 -6
  3. package/package.json +12 -12
  4. package/lib/cdk-deploy/cdk-deploy.d.ts +0 -63
  5. package/lib/cdk-deploy/cdk-deploy.js +0 -174
  6. package/lib/cdk-deploy/index.d.ts +0 -1
  7. package/lib/cdk-deploy/index.js +0 -6
  8. package/lib/cdk-deploy/start-deploy-handler.d.ts +0 -8
  9. package/lib/cdk-deploy/start-deploy-handler.js +0 -65
  10. package/lib/cdk-deploy/status-handler.d.ts +0 -6
  11. package/lib/cdk-deploy/status-handler.js +0 -80
  12. package/lib/ecs-update-image/artifact-status.d.ts +0 -39
  13. package/lib/ecs-update-image/artifact-status.js +0 -41
  14. package/lib/ecs-update-image/ecs-update-image.d.ts +0 -41
  15. package/lib/ecs-update-image/ecs-update-image.js +0 -97
  16. package/lib/ecs-update-image/index.d.ts +0 -3
  17. package/lib/ecs-update-image/index.js +0 -10
  18. package/lib/ecs-update-image/start-deploy-handler.d.ts +0 -6
  19. package/lib/ecs-update-image/start-deploy-handler.js +0 -95
  20. package/lib/ecs-update-image/status-handler.d.ts +0 -11
  21. package/lib/ecs-update-image/status-handler.js +0 -67
  22. package/lib/ecs-update-image/tag.d.ts +0 -47
  23. package/lib/ecs-update-image/tag.js +0 -67
  24. package/lib/pipelines/conventions.d.ts +0 -14
  25. package/lib/pipelines/conventions.js +0 -24
  26. package/lib/pipelines/deploy-env.d.ts +0 -18
  27. package/lib/pipelines/deploy-env.js +0 -96
  28. package/lib/pipelines/index.d.ts +0 -2
  29. package/lib/pipelines/index.js +0 -8
  30. package/lib/pipelines/liflig-cdk-deployer-deps.d.ts +0 -13
  31. package/lib/pipelines/liflig-cdk-deployer-deps.js +0 -35
  32. package/lib/pipelines/pipeline.d.ts +0 -78
  33. package/lib/pipelines/pipeline.js +0 -229
@@ -1,41 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EcsUpdateImageArtifactStatus = void 0;
4
- /**
5
- * The responsibility of this class is to be a Value Object to cause
6
- * more consistent usage and the importance of an artifact being published.
7
- *
8
- * Due to the way we build and deploy ECS services, the ECR image will
9
- * not be available during the first initial account/service deployment.
10
- *
11
- * This causes the following sequence:
12
- *
13
- * 1. The ECR repository must be provisioned.
14
- *
15
- * 2. The tag container must be provisioned in every target account.
16
- * Before we can provision the ECS service this must be updated
17
- * to reference an existing artifact.
18
- *
19
- * 3. The build system must produce and upload an artifact.
20
- *
21
- * 4. The tag container must be updated in every target account
22
- * to contain the newly built image. This is easiest done by also
23
- * provisioning the ECS update image construct as part of step 2,
24
- * without including service and task definition details (which
25
- * does not exist yet before we can resolve the ECR image).
26
- * When the ECS update image construct is provisioned the deployment
27
- * pipeline can start a deployment, which under this state will
28
- * only store the updated tag but cause no ECS service update.
29
- *
30
- * 5. The ECS service can be provisioned, which will use the image
31
- * reference in the tag container as the first deployment.
32
- *
33
- * 6. The next time a deploy is started, the ECS service will be updated.
34
- */
35
- class EcsUpdateImageArtifactStatus {
36
- constructor(props) {
37
- this.artifactPushedAndTagUpdated = props.artifactPushedAndTagUpdated;
38
- }
39
- }
40
- exports.EcsUpdateImageArtifactStatus = EcsUpdateImageArtifactStatus;
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWZhY3Qtc3RhdHVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Vjcy11cGRhdGUtaW1hZ2UvYXJ0aWZhY3Qtc3RhdHVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxNQUFhLDRCQUE0QjtJQUd2QyxZQUFZLEtBQVk7UUFDdEIsSUFBSSxDQUFDLDJCQUEyQixHQUFHLEtBQUssQ0FBQywyQkFBMkIsQ0FBQTtJQUN0RSxDQUFDO0NBQ0Y7QUFORCxvRUFNQyIsInNvdXJjZXNDb250ZW50IjpbImludGVyZmFjZSBQcm9wcyB7XG4gIGFydGlmYWN0UHVzaGVkQW5kVGFnVXBkYXRlZDogYm9vbGVhblxufVxuXG4vKipcbiAqIFRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGlzIGNsYXNzIGlzIHRvIGJlIGEgVmFsdWUgT2JqZWN0IHRvIGNhdXNlXG4gKiBtb3JlIGNvbnNpc3RlbnQgdXNhZ2UgYW5kIHRoZSBpbXBvcnRhbmNlIG9mIGFuIGFydGlmYWN0IGJlaW5nIHB1Ymxpc2hlZC5cbiAqXG4gKiBEdWUgdG8gdGhlIHdheSB3ZSBidWlsZCBhbmQgZGVwbG95IEVDUyBzZXJ2aWNlcywgdGhlIEVDUiBpbWFnZSB3aWxsXG4gKiBub3QgYmUgYXZhaWxhYmxlIGR1cmluZyB0aGUgZmlyc3QgaW5pdGlhbCBhY2NvdW50L3NlcnZpY2UgZGVwbG95bWVudC5cbiAqXG4gKiBUaGlzIGNhdXNlcyB0aGUgZm9sbG93aW5nIHNlcXVlbmNlOlxuICpcbiAqIDEuIFRoZSBFQ1IgcmVwb3NpdG9yeSBtdXN0IGJlIHByb3Zpc2lvbmVkLlxuICpcbiAqIDIuIFRoZSB0YWcgY29udGFpbmVyIG11c3QgYmUgcHJvdmlzaW9uZWQgaW4gZXZlcnkgdGFyZ2V0IGFjY291bnQuXG4gKiAgICBCZWZvcmUgd2UgY2FuIHByb3Zpc2lvbiB0aGUgRUNTIHNlcnZpY2UgdGhpcyBtdXN0IGJlIHVwZGF0ZWRcbiAqICAgIHRvIHJlZmVyZW5jZSBhbiBleGlzdGluZyBhcnRpZmFjdC5cbiAqXG4gKiAzLiBUaGUgYnVpbGQgc3lzdGVtIG11c3QgcHJvZHVjZSBhbmQgdXBsb2FkIGFuIGFydGlmYWN0LlxuICpcbiAqIDQuIFRoZSB0YWcgY29udGFpbmVyIG11c3QgYmUgdXBkYXRlZCBpbiBldmVyeSB0YXJnZXQgYWNjb3VudFxuICogICAgdG8gY29udGFpbiB0aGUgbmV3bHkgYnVpbHQgaW1hZ2UuIFRoaXMgaXMgZWFzaWVzdCBkb25lIGJ5IGFsc29cbiAqICAgIHByb3Zpc2lvbmluZyB0aGUgRUNTIHVwZGF0ZSBpbWFnZSBjb25zdHJ1Y3QgYXMgcGFydCBvZiBzdGVwIDIsXG4gKiAgICB3aXRob3V0IGluY2x1ZGluZyBzZXJ2aWNlIGFuZCB0YXNrIGRlZmluaXRpb24gZGV0YWlscyAod2hpY2hcbiAqICAgIGRvZXMgbm90IGV4aXN0IHlldCBiZWZvcmUgd2UgY2FuIHJlc29sdmUgdGhlIEVDUiBpbWFnZSkuXG4gKiAgICBXaGVuIHRoZSBFQ1MgdXBkYXRlIGltYWdlIGNvbnN0cnVjdCBpcyBwcm92aXNpb25lZCB0aGUgZGVwbG95bWVudFxuICogICAgcGlwZWxpbmUgY2FuIHN0YXJ0IGEgZGVwbG95bWVudCwgd2hpY2ggdW5kZXIgdGhpcyBzdGF0ZSB3aWxsXG4gKiAgICBvbmx5IHN0b3JlIHRoZSB1cGRhdGVkIHRhZyBidXQgY2F1c2Ugbm8gRUNTIHNlcnZpY2UgdXBkYXRlLlxuICpcbiAqIDUuIFRoZSBFQ1Mgc2VydmljZSBjYW4gYmUgcHJvdmlzaW9uZWQsIHdoaWNoIHdpbGwgdXNlIHRoZSBpbWFnZVxuICogICAgcmVmZXJlbmNlIGluIHRoZSB0YWcgY29udGFpbmVyIGFzIHRoZSBmaXJzdCBkZXBsb3ltZW50LlxuICpcbiAqIDYuIFRoZSBuZXh0IHRpbWUgYSBkZXBsb3kgaXMgc3RhcnRlZCwgdGhlIEVDUyBzZXJ2aWNlIHdpbGwgYmUgdXBkYXRlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEVjc1VwZGF0ZUltYWdlQXJ0aWZhY3RTdGF0dXMge1xuICByZWFkb25seSBhcnRpZmFjdFB1c2hlZEFuZFRhZ1VwZGF0ZWQ6IGJvb2xlYW5cblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUHJvcHMpIHtcbiAgICB0aGlzLmFydGlmYWN0UHVzaGVkQW5kVGFnVXBkYXRlZCA9IHByb3BzLmFydGlmYWN0UHVzaGVkQW5kVGFnVXBkYXRlZFxuICB9XG59XG4iXX0=
@@ -1,41 +0,0 @@
1
- import * as constructs from "constructs";
2
- import * as ecr from "aws-cdk-lib/aws-ecr";
3
- import * as ecs from "aws-cdk-lib/aws-ecs";
4
- import * as iam from "aws-cdk-lib/aws-iam";
5
- import { EcsUpdateImageTag } from "./tag";
6
- interface Props {
7
- cluster: ecs.ICluster;
8
- service?: ecs.IService;
9
- taskRole?: iam.IRole;
10
- executionRole?: iam.IRole;
11
- /**
12
- * The role that will be granted permission to assume the deploy
13
- * role. This role must have permission to assume the deploy role.
14
- */
15
- callerRoleArn: string;
16
- /**
17
- * The name that will be used for the deploy role. This is the role
18
- * that the caller will assume in order to have permission to invoke
19
- * the Lambda Functions.
20
- */
21
- roleName: string;
22
- startDeployFunctionName: string;
23
- statusFunctionName: string;
24
- tagContainer: EcsUpdateImageTag;
25
- ecrRepository: ecr.IRepository;
26
- }
27
- /**
28
- * Dynamically update image of an ECS Service outside CDK.
29
- *
30
- * This construct sets up a Lambda Function that can be invoked
31
- * from the CD pipeline to update the ECS Service to a new image.
32
- *
33
- * To keep resources in sync, a Secret is used to keep track of
34
- * the current image, which is dynamically resolved in the CloudFormation
35
- * templates to avoid infrastructure changes to cause an older/different
36
- * image to be used.
37
- */
38
- export declare class EcsUpdateImage extends constructs.Construct {
39
- constructor(scope: constructs.Construct, id: string, props: Props);
40
- }
41
- export {};
@@ -1,97 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EcsUpdateImage = void 0;
4
- const constructs = require("constructs");
5
- const iam = require("aws-cdk-lib/aws-iam");
6
- const lambda = require("aws-cdk-lib/aws-lambda");
7
- const aws_lambda_nodejs_1 = require("aws-cdk-lib/aws-lambda-nodejs");
8
- const cdk = require("aws-cdk-lib");
9
- /**
10
- * Dynamically update image of an ECS Service outside CDK.
11
- *
12
- * This construct sets up a Lambda Function that can be invoked
13
- * from the CD pipeline to update the ECS Service to a new image.
14
- *
15
- * To keep resources in sync, a Secret is used to keep track of
16
- * the current image, which is dynamically resolved in the CloudFormation
17
- * templates to avoid infrastructure changes to cause an older/different
18
- * image to be used.
19
- */
20
- class EcsUpdateImage extends constructs.Construct {
21
- constructor(scope, id, props) {
22
- super(scope, id);
23
- const account = cdk.Stack.of(this).account;
24
- const region = cdk.Stack.of(this).region;
25
- const roleToBeAssumed = new iam.Role(this, "Role", {
26
- roleName: props.roleName,
27
- assumedBy: new iam.ArnPrincipal(props.callerRoleArn),
28
- });
29
- const startDeployFn = new aws_lambda_nodejs_1.NodejsFunction(this, "StartDeployFunction", {
30
- functionName: props.startDeployFunctionName,
31
- entry: require.resolve("./start-deploy-handler"),
32
- runtime: lambda.Runtime.NODEJS_18_X,
33
- timeout: cdk.Duration.seconds(60),
34
- awsSdkConnectionReuse: false,
35
- environment: {
36
- CLUSTER_NAME: props.cluster.clusterName,
37
- SERVICE_NAME: props.service == null ? "" : props.service.serviceName,
38
- REPOSITORY_URL: props.ecrRepository.repositoryUri,
39
- ECR_TAG_SECRET_ARN: props.tagContainer.secretArn,
40
- },
41
- reservedConcurrentExecutions: 1,
42
- });
43
- startDeployFn.grantInvoke(roleToBeAssumed);
44
- props.tagContainer.grantUpdate(startDeployFn);
45
- if (props.service != null) {
46
- startDeployFn.addToRolePolicy(new iam.PolicyStatement({
47
- actions: [
48
- "ecs:DeregisterTaskDefinition",
49
- "ecs:DescribeServices",
50
- "ecs:DescribeTaskDefinition",
51
- "ecs:DescribeTasks",
52
- "ecs:ListTasks",
53
- "ecs:ListTaskDefinitions",
54
- "ecs:RegisterTaskDefinition",
55
- ],
56
- resources: ["*"],
57
- }));
58
- startDeployFn.addToRolePolicy(new iam.PolicyStatement({
59
- actions: ["ecs:UpdateService"],
60
- resources: [
61
- `arn:aws:ecs:${region}:${account}:service/${props.cluster.clusterName}/${props.service.serviceName}`,
62
- ],
63
- }));
64
- }
65
- if (props.taskRole != null) {
66
- props.taskRole.grantPassRole(startDeployFn.role);
67
- }
68
- if (props.executionRole != null) {
69
- props.executionRole.grantPassRole(startDeployFn.role);
70
- }
71
- const statusFn = new aws_lambda_nodejs_1.NodejsFunction(this, "StatusFunction", {
72
- functionName: props.statusFunctionName,
73
- entry: require.resolve("./status-handler"),
74
- runtime: lambda.Runtime.NODEJS_18_X,
75
- timeout: cdk.Duration.seconds(60),
76
- awsSdkConnectionReuse: false,
77
- environment: {
78
- CLUSTER_NAME: props.cluster.clusterName,
79
- SERVICE_NAME: props.service == null ? "" : props.service.serviceName,
80
- },
81
- });
82
- statusFn.grantInvoke(roleToBeAssumed);
83
- statusFn.addToRolePolicy(new iam.PolicyStatement({
84
- actions: [
85
- "ecs:DeregisterTaskDefinition",
86
- "ecs:DescribeServices",
87
- "ecs:DescribeTaskDefinition",
88
- "ecs:DescribeTasks",
89
- "ecs:ListTasks",
90
- "ecs:ListTaskDefinitions",
91
- ],
92
- resources: ["*"],
93
- }));
94
- }
95
- }
96
- exports.EcsUpdateImage = EcsUpdateImage;
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNzLXVwZGF0ZS1pbWFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lY3MtdXBkYXRlLWltYWdlL2Vjcy11cGRhdGUtaW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQXdDO0FBR3hDLDJDQUEwQztBQUMxQyxpREFBZ0Q7QUFDaEQscUVBQThEO0FBQzlELG1DQUFrQztBQXlCbEM7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEsY0FBZSxTQUFRLFVBQVUsQ0FBQyxTQUFTO0lBQ3RELFlBQVksS0FBMkIsRUFBRSxFQUFVLEVBQUUsS0FBWTtRQUMvRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRWhCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQTtRQUMxQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUE7UUFFeEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDakQsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztTQUNyRCxDQUFDLENBQUE7UUFFRixNQUFNLGFBQWEsR0FBRyxJQUFJLGtDQUFjLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFO1lBQ3BFLFlBQVksRUFBRSxLQUFLLENBQUMsdUJBQXVCO1lBQzNDLEtBQUssRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO1lBQ2hELE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVc7WUFDbkMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUs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QUM7U0FDakIsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0NBQ0Y7QUE1RkQsd0NBNEZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQgKiBhcyBlY3IgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3JcIlxuaW1wb3J0ICogYXMgZWNzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNzXCJcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiXG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIlxuaW1wb3J0IHsgTm9kZWpzRnVuY3Rpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanNcIlxuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiXG5pbXBvcnQgeyBFY3NVcGRhdGVJbWFnZVRhZyB9IGZyb20gXCIuL3RhZ1wiXG5cbmludGVyZmFjZSBQcm9wcyB7XG4gIGNsdXN0ZXI6IGVjcy5JQ2x1c3RlclxuICBzZXJ2aWNlPzogZWNzLklTZXJ2aWNlXG4gIHRhc2tSb2xlPzogaWFtLklSb2xlXG4gIGV4ZWN1dGlvblJvbGU/OiBpYW0uSVJvbGVcbiAgLyoqXG4gICAqIFRoZSByb2xlIHRoYXQgd2lsbCBiZSBncmFudGVkIHBlcm1pc3Npb24gdG8gYXNzdW1lIHRoZSBkZXBsb3lcbiAgICogcm9sZS4gVGhpcyByb2xlIG11c3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFzc3VtZSB0aGUgZGVwbG95IHJvbGUuXG4gICAqL1xuICBjYWxsZXJSb2xlQXJuOiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoZSBuYW1lIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgZGVwbG95IHJvbGUuIFRoaXMgaXMgdGhlIHJvbGVcbiAgICogdGhhdCB0aGUgY2FsbGVyIHdpbGwgYXNzdW1lIGluIG9yZGVyIHRvIGhhdmUgcGVybWlzc2lvbiB0byBpbnZva2VcbiAgICogdGhlIExhbWJkYSBGdW5jdGlvbnMuXG4gICAqL1xuICByb2xlTmFtZTogc3RyaW5nXG4gIHN0YXJ0RGVwbG95RnVuY3Rpb25OYW1lOiBzdHJpbmdcbiAgc3RhdHVzRnVuY3Rpb25OYW1lOiBzdHJpbmdcbiAgdGFnQ29udGFpbmVyOiBFY3NVcGRhdGVJbWFnZVRhZ1xuICBlY3JSZXBvc2l0b3J5OiBlY3IuSVJlcG9zaXRvcnlcbn1cblxuLyoqXG4gKiBEeW5hbWljYWxseSB1cGRhdGUgaW1hZ2Ugb2YgYW4gRUNTIFNlcnZpY2Ugb3V0c2lkZSBDREsuXG4gKlxuICogVGhpcyBjb25zdHJ1Y3Qgc2V0cyB1cCBhIExhbWJkYSBGdW5jdGlvbiB0aGF0IGNhbiBiZSBpbnZva2VkXG4gKiBmcm9tIHRoZSBDRCBwaXBlbGluZSB0byB1cGRhdGUgdGhlIEVDUyBTZXJ2aWNlIHRvIGEgbmV3IGltYWdlLlxuICpcbiAqIFRvIGtlZXAgcmVzb3VyY2VzIGluIHN5bmMsIGEgU2VjcmV0IGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZlxuICogdGhlIGN1cnJlbnQgaW1hZ2UsIHdoaWNoIGlzIGR5bmFtaWNhbGx5IHJlc29sdmVkIGluIHRoZSBDbG91ZEZvcm1hdGlvblxuICogdGVtcGxhdGVzIHRvIGF2b2lkIGluZnJhc3RydWN0dXJlIGNoYW5nZXMgdG8gY2F1c2UgYW4gb2xkZXIvZGlmZmVyZW50XG4gKiBpbWFnZSB0byBiZSB1c2VkLlxuICovXG5leHBvcnQgY2xhc3MgRWNzVXBkYXRlSW1hZ2UgZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgY29uc3QgYWNjb3VudCA9IGNkay5TdGFjay5vZih0aGlzKS5hY2NvdW50XG4gICAgY29uc3QgcmVnaW9uID0gY2RrLlN0YWNrLm9mKHRoaXMpLnJlZ2lvblxuXG4gICAgY29uc3Qgcm9sZVRvQmVBc3N1bWVkID0gbmV3IGlhbS5Sb2xlKHRoaXMsIFwiUm9sZVwiLCB7XG4gICAgICByb2xlTmFtZTogcHJvcHMucm9sZU5hbWUsXG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uQXJuUHJpbmNpcGFsKHByb3BzLmNhbGxlclJvbGVBcm4pLFxuICAgIH0pXG5cbiAgICBjb25zdCBzdGFydERlcGxveUZuID0gbmV3IE5vZGVqc0Z1bmN0aW9uKHRoaXMsIFwiU3RhcnREZXBsb3lGdW5jdGlvblwiLCB7XG4gICAgICBmdW5jdGlvbk5hbWU6IHByb3BzLnN0YXJ0RGVwbG95RnVuY3Rpb25OYW1lLFxuICAgICAgZW50cnk6IHJlcXVpcmUucmVzb2x2ZShcIi4vc3RhcnQtZGVwbG95LWhhbmRsZXJcIiksXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMThfWCxcbiAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgIGF3c1Nka0Nvbm5lY3Rpb25SZXVzZTogZmFsc2UsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBDTFVTVEVSX05BTUU6IHByb3BzLmNsdXN0ZXIuY2x1c3Rlck5hbWUsXG4gICAgICAgIFNFUlZJQ0VfTkFNRTogcHJvcHMuc2VydmljZSA9PSBudWxsID8gXCJcIiA6IHByb3BzLnNlcnZpY2Uuc2VydmljZU5hbWUsXG4gICAgICAgIFJFUE9TSVRPUllfVVJMOiBwcm9wcy5lY3JSZXBvc2l0b3J5LnJlcG9zaXRvcnlVcmksXG4gICAgICAgIEVDUl9UQUdfU0VDUkVUX0FSTjogcHJvcHMudGFnQ29udGFpbmVyLnNlY3JldEFybixcbiAgICAgIH0sXG4gICAgICByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zOiAxLFxuICAgIH0pXG5cbiAgICBzdGFydERlcGxveUZuLmdyYW50SW52b2tlKHJvbGVUb0JlQXNzdW1lZClcbiAgICBwcm9wcy50YWdDb250YWluZXIuZ3JhbnRVcGRhdGUoc3RhcnREZXBsb3lGbilcblxuICAgIGlmIChwcm9wcy5zZXJ2aWNlICE9IG51bGwpIHtcbiAgICAgIHN0YXJ0RGVwbG95Rm4uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgXCJlY3M6RGVyZWdpc3RlclRhc2tEZWZpbml0aW9uXCIsXG4gICAgICAgICAgICBcImVjczpEZXNjcmliZVNlcnZpY2VzXCIsXG4gICAgICAgICAgICBcImVjczpEZXNjcmliZVRhc2tEZWZpbml0aW9uXCIsXG4gICAgICAgICAgICBcImVjczpEZXNjcmliZVRhc2tzXCIsXG4gICAgICAgICAgICBcImVjczpMaXN0VGFza3NcIixcbiAgICAgICAgICAgIFwiZWNzOkxpc3RUYXNrRGVmaW5pdGlvbnNcIixcbiAgICAgICAgICAgIFwiZWNzOlJlZ2lzdGVyVGFza0RlZmluaXRpb25cIixcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgICAgfSksXG4gICAgICApXG5cbiAgICAgIHN0YXJ0RGVwbG95Rm4uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogW1wiZWNzOlVwZGF0ZVNlcnZpY2VcIl0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICBgYXJuOmF3czplY3M6JHtyZWdpb259OiR7YWNjb3VudH06c2VydmljZS8ke3Byb3BzLmNsdXN0ZXIuY2x1c3Rlck5hbWV9LyR7cHJvcHMuc2VydmljZS5zZXJ2aWNlTmFtZX1gLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgIH1cblxuICAgIGlmIChwcm9wcy50YXNrUm9sZSAhPSBudWxsKSB7XG4gICAgICBwcm9wcy50YXNrUm9sZS5ncmFudFBhc3NSb2xlKHN0YXJ0RGVwbG95Rm4ucm9sZSEpXG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmV4ZWN1dGlvblJvbGUgIT0gbnVsbCkge1xuICAgICAgcHJvcHMuZXhlY3V0aW9uUm9sZS5ncmFudFBhc3NSb2xlKHN0YXJ0RGVwbG95Rm4ucm9sZSEpXG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzRm4gPSBuZXcgTm9kZWpzRnVuY3Rpb24odGhpcywgXCJTdGF0dXNGdW5jdGlvblwiLCB7XG4gICAgICBmdW5jdGlvbk5hbWU6IHByb3BzLnN0YXR1c0Z1bmN0aW9uTmFtZSxcbiAgICAgIGVudHJ5OiByZXF1aXJlLnJlc29sdmUoXCIuL3N0YXR1cy1oYW5kbGVyXCIpLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE4X1gsXG4gICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICBhd3NTZGtDb25uZWN0aW9uUmV1c2U6IGZhbHNlLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgQ0xVU1RFUl9OQU1FOiBwcm9wcy5jbHVzdGVyLmNsdXN0ZXJOYW1lLFxuICAgICAgICBTRVJWSUNFX05BTUU6IHByb3BzLnNlcnZpY2UgPT0gbnVsbCA/IFwiXCIgOiBwcm9wcy5zZXJ2aWNlLnNlcnZpY2VOYW1lLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgc3RhdHVzRm4uZ3JhbnRJbnZva2Uocm9sZVRvQmVBc3N1bWVkKVxuXG4gICAgc3RhdHVzRm4uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJlY3M6RGVyZWdpc3RlclRhc2tEZWZpbml0aW9uXCIsXG4gICAgICAgICAgXCJlY3M6RGVzY3JpYmVTZXJ2aWNlc1wiLFxuICAgICAgICAgIFwiZWNzOkRlc2NyaWJlVGFza0RlZmluaXRpb25cIixcbiAgICAgICAgICBcImVjczpEZXNjcmliZVRhc2tzXCIsXG4gICAgICAgICAgXCJlY3M6TGlzdFRhc2tzXCIsXG4gICAgICAgICAgXCJlY3M6TGlzdFRhc2tEZWZpbml0aW9uc1wiLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICB9KSxcbiAgICApXG4gIH1cbn1cbiJdfQ==
@@ -1,3 +0,0 @@
1
- export { EcsUpdateImageArtifactStatus } from "./artifact-status";
2
- export { EcsUpdateImage } from "./ecs-update-image";
3
- export { EcsUpdateImageTag } from "./tag";
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EcsUpdateImageTag = exports.EcsUpdateImage = exports.EcsUpdateImageArtifactStatus = void 0;
4
- var artifact_status_1 = require("./artifact-status");
5
- Object.defineProperty(exports, "EcsUpdateImageArtifactStatus", { enumerable: true, get: function () { return artifact_status_1.EcsUpdateImageArtifactStatus; } });
6
- var ecs_update_image_1 = require("./ecs-update-image");
7
- Object.defineProperty(exports, "EcsUpdateImage", { enumerable: true, get: function () { return ecs_update_image_1.EcsUpdateImage; } });
8
- var tag_1 = require("./tag");
9
- Object.defineProperty(exports, "EcsUpdateImageTag", { enumerable: true, get: function () { return tag_1.EcsUpdateImageTag; } });
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZWNzLXVwZGF0ZS1pbWFnZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBZ0U7QUFBdkQsK0hBQUEsNEJBQTRCLE9BQUE7QUFDckMsdURBQW1EO0FBQTFDLGtIQUFBLGNBQWMsT0FBQTtBQUN2Qiw2QkFBeUM7QUFBaEMsd0dBQUEsaUJBQWlCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBFY3NVcGRhdGVJbWFnZUFydGlmYWN0U3RhdHVzIH0gZnJvbSBcIi4vYXJ0aWZhY3Qtc3RhdHVzXCJcbmV4cG9ydCB7IEVjc1VwZGF0ZUltYWdlIH0gZnJvbSBcIi4vZWNzLXVwZGF0ZS1pbWFnZVwiXG5leHBvcnQgeyBFY3NVcGRhdGVJbWFnZVRhZyB9IGZyb20gXCIuL3RhZ1wiXG4iXX0=
@@ -1,6 +0,0 @@
1
- import type { Handler } from "aws-lambda";
2
- interface ExpectedInput {
3
- tag: string;
4
- }
5
- export declare const handler: Handler<Partial<ExpectedInput>>;
6
- export {};
@@ -1,95 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handler = void 0;
4
- const client_ecs_1 = require("@aws-sdk/client-ecs");
5
- const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager");
6
- // This function is inline-compiled for the lambda.
7
- // It must be self-contained.
8
- const handler = async (event) => {
9
- const ecsClient = new client_ecs_1.ECSClient();
10
- const smClient = new client_secrets_manager_1.SecretsManagerClient();
11
- function requireEnv(name) {
12
- const value = process.env[name];
13
- if (value === undefined) {
14
- throw new Error(`Missing ${name}`);
15
- }
16
- return value;
17
- }
18
- async function getService(clusterName, serviceName) {
19
- var _a;
20
- const services = await ecsClient.send(new client_ecs_1.DescribeServicesCommand({
21
- cluster: clusterName,
22
- services: [serviceName],
23
- }));
24
- if (((_a = services.services) === null || _a === void 0 ? void 0 : _a.length) !== 1) {
25
- throw new Error(`Service not found: ${clusterName}/${serviceName}`);
26
- }
27
- return services.services[0];
28
- }
29
- async function getTaskDefinition(taskDefinition) {
30
- return (await ecsClient.send(new client_ecs_1.DescribeTaskDefinitionCommand({ taskDefinition }))).taskDefinition;
31
- }
32
- async function updateServiceToImage(clusterName, serviceName, image) {
33
- console.log(`Cluster name: ${clusterName}`);
34
- console.log(`Service name: ${serviceName}`);
35
- const service = await getService(clusterName, serviceName);
36
- const prevTaskDefinition = await getTaskDefinition(service.taskDefinition);
37
- // Don't bother updating the service if the image is already the latest.
38
- const prevImage = prevTaskDefinition.containerDefinitions[0].image;
39
- if (prevImage === image) {
40
- return;
41
- }
42
- console.log(`Updating image for service '${serviceName}' from '${prevImage}' to '${image}'`);
43
- const exclude = [
44
- "registeredAt",
45
- "registeredBy",
46
- "compatibilities",
47
- "requiresAttributes",
48
- "revision",
49
- "status",
50
- "taskDefinitionArn",
51
- ];
52
- const updatedSpec = {
53
- ...Object.fromEntries(Object.entries(prevTaskDefinition).filter(([key]) => !exclude.includes(key))),
54
- containerDefinitions: [
55
- {
56
- ...prevTaskDefinition.containerDefinitions[0],
57
- image,
58
- },
59
- ],
60
- };
61
- const updatedTaskDefinition = (await ecsClient.send(new client_ecs_1.RegisterTaskDefinitionCommand(updatedSpec))).taskDefinition;
62
- await ecsClient.send(new client_ecs_1.UpdateServiceCommand({
63
- cluster: clusterName,
64
- service: serviceName,
65
- taskDefinition: updatedTaskDefinition.taskDefinitionArn,
66
- }));
67
- console.log("Service is updated");
68
- }
69
- const clusterName = requireEnv("CLUSTER_NAME");
70
- const serviceName = requireEnv("SERVICE_NAME");
71
- const repositoryUrl = requireEnv("REPOSITORY_URL");
72
- const ecrTagSecretArn = requireEnv("ECR_TAG_SECRET_ARN");
73
- // Validate the input.
74
- if (typeof event.tag !== "string") {
75
- throw new Error("Input invalid: " + JSON.stringify(event, undefined, " "));
76
- }
77
- // Register tag as current target.
78
- // This is needed so that CloudFormation deployments, e.g.
79
- // updates to the Task Definition, will use the same image.
80
- await smClient.send(new client_secrets_manager_1.UpdateSecretCommand({
81
- SecretId: ecrTagSecretArn,
82
- SecretString: JSON.stringify({
83
- tag: event.tag,
84
- }),
85
- }));
86
- // Update the service if we know the service name. This is unknown
87
- // during initial deployment of the stack.
88
- if (serviceName !== "") {
89
- const image = `${repositoryUrl}:${event.tag}`;
90
- await updateServiceToImage(clusterName, serviceName, image);
91
- }
92
- return {};
93
- };
94
- exports.handler = handler;
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQtZGVwbG95LWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZWNzLXVwZGF0ZS1pbWFnZS9zdGFydC1kZXBsb3ktaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxvREFTNEI7QUFFNUIsNEVBR3dDO0FBTXhDLG1EQUFtRDtBQUNuRCw2QkFBNkI7QUFDdEIsTUFBTSxPQUFPLEdBQW9DLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtJQUN0RSxNQUFNLFNBQVMsR0FBRyxJQUFJLHNCQUFTLEVBQUUsQ0FBQTtJQUNqQyxNQUFNLFFBQVEsR0FBRyxJQUFJLDZDQUFvQixFQUFFLENBQUE7SUFFM0MsU0FBUyxVQUFVLENBQUMsSUFBWTtRQUM5QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQy9CLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQ3BDLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRCxLQUFLLFVBQVUsVUFBVSxDQUN2QixXQUFtQixFQUNuQixXQUFtQjs7UUFFbkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUNuQyxJQUFJLG9DQUF1QixDQUFDO1lBQzFCLE9BQU8sRUFBRSxXQUFXO1lBQ3BCLFFBQVEsRUFBRSxDQUFDLFdBQVcsQ0FBQztTQUN4QixDQUFDLENBQ0gsQ0FBQTtRQUVELElBQUksQ0FBQSxNQUFBLFFBQVEsQ0FBQyxRQUFRLDBDQUFFLE1BQU0sTUFBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixXQUFXLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQTtRQUNyRSxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLENB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Q0FDakIsSUFBSSw0Q0FBbUIsQ0FBQztRQUN0QixRQUFRLEVBQUUsZUFBZTtRQUN6QixZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUMzQixHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7U0FDZixDQUFDO0tBQ0gsQ0FBQyxDQUNILENBQUE7SUFFRCxrRUFBa0U7SUFDbEUsMENBQTBDO0lBQzFDLElBQUksV0FBVyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLEdBQUcsYUFBYSxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUM3QyxNQUFNLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDN0QsQ0FBQztJQUVELE9BQU8sRUFBRSxDQUFBO0FBQ1gsQ0FBQyxDQUFBO0FBaklZLFFBQUEsT0FBTyxXQWlJbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEhhbmRsZXIgfSBmcm9tIFwiYXdzLWxhbWJkYVwiXG5cbmltcG9ydCB7XG4gIEVDU0NsaWVudCxcbiAgRGVzY3JpYmVUYXNrRGVmaW5pdGlvbkNvbW1hbmQsXG4gIFJlZ2lzdGVyVGFza0RlZmluaXRpb25Db21tYW5kLFxuICBVcGRhdGVTZXJ2aWNlQ29tbWFuZCxcbiAgRGVzY3JpYmVTZXJ2aWNlc0NvbW1hbmQsXG4gIFRhc2tEZWZpbml0aW9uLFxuICBTZXJ2aWNlLFxuICBSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZElucHV0LFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LWVjc1wiXG5cbmltcG9ydCB7XG4gIFNlY3JldHNNYW5hZ2VyQ2xpZW50LFxuICBVcGRhdGVTZWNyZXRDb21tYW5kLFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlclwiXG5cbmludGVyZmFjZSBFeHBlY3RlZElucHV0IHtcbiAgdGFnOiBzdHJpbmdcbn1cblxuLy8gVGhpcyBmdW5jdGlvbiBpcyBpbmxpbmUtY29tcGlsZWQgZm9yIHRoZSBsYW1iZGEuXG4vLyBJdCBtdXN0IGJlIHNlbGYtY29udGFpbmVkLlxuZXhwb3J0IGNvbnN0IGhhbmRsZXI6IEhhbmRsZXI8UGFydGlhbDxFeHBlY3RlZElucHV0Pj4gPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgY29uc3QgZWNzQ2xpZW50ID0gbmV3IEVDU0NsaWVudCgpXG4gIGNvbnN0IHNtQ2xpZW50ID0gbmV3IFNlY3JldHNNYW5hZ2VyQ2xpZW50KClcblxuICBmdW5jdGlvbiByZXF1aXJlRW52KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsdWUgPSBwcm9jZXNzLmVudltuYW1lXVxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgJHtuYW1lfWApXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZ2V0U2VydmljZShcbiAgICBjbHVzdGVyTmFtZTogc3RyaW5nLFxuICAgIHNlcnZpY2VOYW1lOiBzdHJpbmcsXG4gICk6IFByb21pc2U8U2VydmljZT4ge1xuICAgIGNvbnN0IHNlcnZpY2VzID0gYXdhaXQgZWNzQ2xpZW50LnNlbmQoXG4gICAgICBuZXcgRGVzY3JpYmVTZXJ2aWNlc0NvbW1hbmQoe1xuICAgICAgICBjbHVzdGVyOiBjbHVzdGVyTmFtZSxcbiAgICAgICAgc2VydmljZXM6IFtzZXJ2aWNlTmFtZV0sXG4gICAgICB9KSxcbiAgICApXG5cbiAgICBpZiAoc2VydmljZXMuc2VydmljZXM/Lmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZXJ2aWNlIG5vdCBmb3VuZDogJHtjbHVzdGVyTmFtZX0vJHtzZXJ2aWNlTmFtZX1gKVxuICAgIH1cblxuICAgIHJldHVybiBzZXJ2aWNlcy5zZXJ2aWNlc1swXVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZ2V0VGFza0RlZmluaXRpb24oXG4gICAgdGFza0RlZmluaXRpb246IHN0cmluZyxcbiAgKTogUHJvbWlzZTxUYXNrRGVmaW5pdGlvbj4ge1xuICAgIHJldHVybiAoXG4gICAgICBhd2FpdCBlY3NDbGllbnQuc2VuZChcbiAgICAgICAgbmV3IERlc2NyaWJlVGFza0RlZmluaXRpb25Db21tYW5kKHsgdGFza0RlZmluaXRpb24gfSksXG4gICAgICApXG4gICAgKS50YXNrRGVmaW5pdGlvbiFcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVNlcnZpY2VUb0ltYWdlKFxuICAgIGNsdXN0ZXJOYW1lOiBzdHJpbmcsXG4gICAgc2VydmljZU5hbWU6IHN0cmluZyxcbiAgICBpbWFnZTogc3RyaW5nLFxuICApIHtcbiAgICBjb25zb2xlLmxvZyhgQ2x1c3RlciBuYW1lOiAke2NsdXN0ZXJOYW1lfWApXG4gICAgY29uc29sZS5sb2coYFNlcnZpY2UgbmFtZTogJHtzZXJ2aWNlTmFtZX1gKVxuXG4gICAgY29uc3Qgc2VydmljZSA9IGF3YWl0IGdldFNlcnZpY2UoY2x1c3Rlck5hbWUsIHNlcnZpY2VOYW1lKVxuICAgIGNvbnN0IHByZXZUYXNrRGVmaW5pdGlvbiA9IGF3YWl0IGdldFRhc2tEZWZpbml0aW9uKHNlcnZpY2UudGFza0RlZmluaXRpb24hKVxuXG4gICAgLy8gRG9uJ3QgYm90aGVyIHVwZGF0aW5nIHRoZSBzZXJ2aWNlIGlmIHRoZSBpbWFnZSBpcyBhbHJlYWR5IHRoZSBsYXRlc3QuXG4gICAgY29uc3QgcHJldkltYWdlID0gcHJldlRhc2tEZWZpbml0aW9uLmNvbnRhaW5lckRlZmluaXRpb25zIVswXS5pbWFnZSFcbiAgICBpZiAocHJldkltYWdlID09PSBpbWFnZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coXG4gICAgICBgVXBkYXRpbmcgaW1hZ2UgZm9yIHNlcnZpY2UgJyR7c2VydmljZU5hbWV9JyBmcm9tICcke3ByZXZJbWFnZX0nIHRvICcke2ltYWdlfSdgLFxuICAgIClcblxuICAgIGNvbnN0IGV4Y2x1ZGUgPSBbXG4gICAgICBcInJlZ2lzdGVyZWRBdFwiLFxuICAgICAgXCJyZWdpc3RlcmVkQnlcIixcbiAgICAgIFwiY29tcGF0aWJpbGl0aWVzXCIsXG4gICAgICBcInJlcXVpcmVzQXR0cmlidXRlc1wiLFxuICAgICAgXCJyZXZpc2lvblwiLFxuICAgICAgXCJzdGF0dXNcIixcbiAgICAgIFwidGFza0RlZmluaXRpb25Bcm5cIixcbiAgICBdXG5cbiAgICBjb25zdCB1cGRhdGVkU3BlYzogUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbkNvbW1hbmRJbnB1dCA9IHtcbiAgICAgIC4uLk9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgT2JqZWN0LmVudHJpZXMocHJldlRhc2tEZWZpbml0aW9uKS5maWx0ZXIoXG4gICAgICAgICAgKFtrZXldKSA9PiAhZXhjbHVkZS5pbmNsdWRlcyhrZXkpLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICAgIGNvbnRhaW5lckRlZmluaXRpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5wcmV2VGFza0RlZmluaXRpb24uY29udGFpbmVyRGVmaW5pdGlvbnMhWzBdLFxuICAgICAgICAgIGltYWdlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9IGFzIFJlZ2lzdGVyVGFza0RlZmluaXRpb25Db21tYW5kSW5wdXRcblxuICAgIGNvbnN0IHVwZGF0ZWRUYXNrRGVmaW5pdGlvbiA9IChcbiAgICAgIGF3YWl0IGVjc0NsaWVudC5zZW5kKG5ldyBSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZCh1cGRhdGVkU3BlYykpXG4gICAgKS50YXNrRGVmaW5pdGlvbiFcblxuICAgIGF3YWl0IGVjc0NsaWVudC5zZW5kKFxuICAgICAgbmV3IFVwZGF0ZVNlcnZpY2VDb21tYW5kKHtcbiAgICAgICAgY2x1c3RlcjogY2x1c3Rlck5hbWUsXG4gICAgICAgIHNlcnZpY2U6IHNlcnZpY2VOYW1lLFxuICAgICAgICB0YXNrRGVmaW5pdGlvbjogdXBkYXRlZFRhc2tEZWZpbml0aW9uLnRhc2tEZWZpbml0aW9uQXJuLFxuICAgICAgfSksXG4gICAgKVxuICAgIGNvbnNvbGUubG9nKFwiU2VydmljZSBpcyB1cGRhdGVkXCIpXG4gIH1cblxuICBjb25zdCBjbHVzdGVyTmFtZSA9IHJlcXVpcmVFbnYoXCJDTFVTVEVSX05BTUVcIilcbiAgY29uc3Qgc2VydmljZU5hbWUgPSByZXF1aXJlRW52KFwiU0VSVklDRV9OQU1FXCIpXG4gIGNvbnN0IHJlcG9zaXRvcnlVcmwgPSByZXF1aXJlRW52KFwiUkVQT1NJVE9SWV9VUkxcIilcbiAgY29uc3QgZWNyVGFnU2VjcmV0QXJuID0gcmVxdWlyZUVudihcIkVDUl9UQUdfU0VDUkVUX0FSTlwiKVxuXG4gIC8vIFZhbGlkYXRlIHRoZSBpbnB1dC5cbiAgaWYgKHR5cGVvZiBldmVudC50YWcgIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnB1dCBpbnZhbGlkOiBcIiArIEpTT04uc3RyaW5naWZ5KGV2ZW50LCB1bmRlZmluZWQsIFwiICBcIikpXG4gIH1cblxuICAvLyBSZWdpc3RlciB0YWcgYXMgY3VycmVudCB0YXJnZXQuXG4gIC8vIFRoaXMgaXMgbmVlZGVkIHNvIHRoYXQgQ2xvdWRGb3JtYXRpb24gZGVwbG95bWVudHMsIGUuZy5cbiAgLy8gdXBkYXRlcyB0byB0aGUgVGFzayBEZWZpbml0aW9uLCB3aWxsIHVzZSB0aGUgc2FtZSBpbWFnZS5cbiAgYXdhaXQgc21DbGllbnQuc2VuZChcbiAgICBuZXcgVXBkYXRlU2VjcmV0Q29tbWFuZCh7XG4gICAgICBTZWNyZXRJZDogZWNyVGFnU2VjcmV0QXJuLFxuICAgICAgU2VjcmV0U3RyaW5nOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHRhZzogZXZlbnQudGFnLFxuICAgICAgfSksXG4gICAgfSksXG4gIClcblxuICAvLyBVcGRhdGUgdGhlIHNlcnZpY2UgaWYgd2Uga25vdyB0aGUgc2VydmljZSBuYW1lLiBUaGlzIGlzIHVua25vd25cbiAgLy8gZHVyaW5nIGluaXRpYWwgZGVwbG95bWVudCBvZiB0aGUgc3RhY2suXG4gIGlmIChzZXJ2aWNlTmFtZSAhPT0gXCJcIikge1xuICAgIGNvbnN0IGltYWdlID0gYCR7cmVwb3NpdG9yeVVybH06JHtldmVudC50YWd9YFxuICAgIGF3YWl0IHVwZGF0ZVNlcnZpY2VUb0ltYWdlKGNsdXN0ZXJOYW1lLCBzZXJ2aWNlTmFtZSwgaW1hZ2UpXG4gIH1cblxuICByZXR1cm4ge31cbn1cbiJdfQ==
@@ -1,11 +0,0 @@
1
- import type { Handler } from "aws-lambda";
2
- interface Response {
3
- /**
4
- * The tag is unknown when the stack is not yet fully set up
5
- * during initial account/service deployment.
6
- */
7
- currentTag: string | null;
8
- stabilized: boolean;
9
- }
10
- export declare const handler: Handler<unknown, Response>;
11
- export {};
@@ -1,67 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handler = void 0;
4
- const client_ecs_1 = require("@aws-sdk/client-ecs");
5
- const handler = async () => {
6
- var _a;
7
- const ecsClient = new client_ecs_1.ECSClient();
8
- function requireEnv(name) {
9
- const value = process.env[name];
10
- if (value === undefined) {
11
- throw new Error(`Missing ${name}`);
12
- }
13
- return value;
14
- }
15
- async function getService(clusterName, serviceName) {
16
- var _a;
17
- const services = await ecsClient.send(new client_ecs_1.DescribeServicesCommand({
18
- cluster: clusterName,
19
- services: [serviceName],
20
- }));
21
- if (((_a = services.services) === null || _a === void 0 ? void 0 : _a.length) !== 1) {
22
- throw new Error(`Service not found: ${clusterName}/${serviceName}`);
23
- }
24
- return services.services[0];
25
- }
26
- async function getTaskDefinition(taskDefinition) {
27
- const resp = await ecsClient.send(new client_ecs_1.DescribeTaskDefinitionCommand({ taskDefinition }));
28
- return resp.taskDefinition;
29
- }
30
- /**
31
- * Check if the service is considered to be stabilized.
32
- *
33
- * Uses the logic described at
34
- * https://docs.aws.amazon.com/cli/latest/reference/ecs/wait/services-stable.html
35
- */
36
- function isStabilized(service) {
37
- var _a;
38
- return (((_a = service.deployments) === null || _a === void 0 ? void 0 : _a.length) == 1 &&
39
- service.runningCount == service.desiredCount);
40
- }
41
- function extractTag(image) {
42
- if (!image.includes(":")) {
43
- return null;
44
- }
45
- return image.replace(/.*:/, "");
46
- }
47
- const clusterName = requireEnv("CLUSTER_NAME");
48
- const serviceName = requireEnv("SERVICE_NAME");
49
- // The service name is unknown during initial deployment of the stack.
50
- // In this case we return stabilized status as true.
51
- if (serviceName === "") {
52
- return {
53
- currentTag: null,
54
- stabilized: true,
55
- };
56
- }
57
- const service = await getService(clusterName, serviceName);
58
- const mainDeployment = (_a = service.deployments) === null || _a === void 0 ? void 0 : _a.find((it) => it.status === "PRIMARY");
59
- const taskDefinition = await getTaskDefinition(mainDeployment.taskDefinition);
60
- // Only one container is supported for the task definition.
61
- return {
62
- currentTag: extractTag(taskDefinition.containerDefinitions[0].image),
63
- stabilized: isStabilized(service),
64
- };
65
- };
66
- exports.handler = handler;
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZWNzLXVwZGF0ZS1pbWFnZS9zdGF0dXMtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxvREFNNEI7QUFXckIsTUFBTSxPQUFPLEdBQStCLEtBQUssSUFBSSxFQUFFOztJQUM1RCxNQUFNLFNBQVMsR0FBRyxJQUFJLHNCQUFTLEVBQUUsQ0FBQTtJQUVqQyxTQUFTLFVBQVUsQ0FBQyxJQUFZO1FBQzlCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDL0IsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUE7UUFDcEMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELEtBQUssVUFBVSxVQUFVLENBQ3ZCLFdBQW1CLEVBQ25CLFdBQW1COztRQUVuQixNQUFNLFFBQVEsR0FBRyxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQ25DLElBQUksb0NBQXVCLENBQUM7WUFDMUIsT0FBTyxFQUFFLFdBQVc7WUFDcEIsUUFBUSxFQUFFLENBQUMsV0FBVyxDQUFDO1NBQ3hCLENBQUMsQ0FDSCxDQUFBO1FBRUQsSUFBSSxDQUFBLE1BQUEsUUFBUSxDQUFDLFFBQVEsMENBQUUsTUFBTSxNQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLFdBQVcsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFBO1FBQ3JFLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDN0IsQ0FBQztJQUVELEtBQUssVUFBVSxpQkFBaUIsQ0FDOUIsY0FBc0I7UUFFdEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUMvQixJQUFJLDBDQUE2QixDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FDdEQsQ0FBQTtRQUNELE9BQU8sSUFBSSxDQUFDLGNBQWUsQ0FBQTtJQUM3QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxTQUFTLFlBQVksQ0FBQyxPQUFnQjs7UUFDcEMsT0FBTyxDQUNMLENBQUEsTUFBQSxPQUFPLENBQUMsV0FBVywwQ0FBRSxNQUFNLEtBQUksQ0FBQztZQUNoQyxPQUFPLENBQUMsWUFBWSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQzdDLENBQUE7SUFDSCxDQUFDO0lBRUQsU0FBUyxVQUFVLENBQUMsS0FBYTtRQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDakMsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUM5QyxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUE7SUFFOUMsc0VBQXNFO0lBQ3RFLG9EQUFvRDtJQUNwRCxJQUFJLFdBQVcsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUN2QixPQUFPO1lBQ0wsVUFBVSxFQUFFLElBQUk7WUFDaEIsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFDMUQsTUFBTSxjQUFjLEdBQUcsTUFBQSxPQUFPLENBQUMsV0FBVywwQ0FBRSxJQUFJLENBQzlDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FDaEMsQ0FBQTtJQUVELE1BQU0sY0FBYyxHQUFHLE1BQU0saUJBQWlCLENBQzVDLGNBQWUsQ0FBQyxjQUFlLENBQ2hDLENBQUE7SUFFRCwyREFBMkQ7SUFFM0QsT0FBTztRQUNMLFVBQVUsRUFBRSxVQUFVLENBQUMsY0FBYyxDQUFDLG9CQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQU0sQ0FBQztRQUN0RSxVQUFVLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQztLQUNsQyxDQUFBO0FBQ0gsQ0FBQyxDQUFBO0FBckZZLFFBQUEsT0FBTyxXQXFGbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEhhbmRsZXIgfSBmcm9tIFwiYXdzLWxhbWJkYVwiXG5pbXBvcnQge1xuICBFQ1NDbGllbnQsXG4gIERlc2NyaWJlU2VydmljZXNDb21tYW5kLFxuICBEZXNjcmliZVRhc2tEZWZpbml0aW9uQ29tbWFuZCxcbiAgU2VydmljZSxcbiAgVGFza0RlZmluaXRpb24sXG59IGZyb20gXCJAYXdzLXNkay9jbGllbnQtZWNzXCJcblxuaW50ZXJmYWNlIFJlc3BvbnNlIHtcbiAgLyoqXG4gICAqIFRoZSB0YWcgaXMgdW5rbm93biB3aGVuIHRoZSBzdGFjayBpcyBub3QgeWV0IGZ1bGx5IHNldCB1cFxuICAgKiBkdXJpbmcgaW5pdGlhbCBhY2NvdW50L3NlcnZpY2UgZGVwbG95bWVudC5cbiAgICovXG4gIGN1cnJlbnRUYWc6IHN0cmluZyB8IG51bGxcbiAgc3RhYmlsaXplZDogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgaGFuZGxlcjogSGFuZGxlcjx1bmtub3duLCBSZXNwb25zZT4gPSBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGVjc0NsaWVudCA9IG5ldyBFQ1NDbGllbnQoKVxuXG4gIGZ1bmN0aW9uIHJlcXVpcmVFbnYobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZSA9IHByb2Nlc3MuZW52W25hbWVdXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyAke25hbWV9YClcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBnZXRTZXJ2aWNlKFxuICAgIGNsdXN0ZXJOYW1lOiBzdHJpbmcsXG4gICAgc2VydmljZU5hbWU6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxTZXJ2aWNlPiB7XG4gICAgY29uc3Qgc2VydmljZXMgPSBhd2FpdCBlY3NDbGllbnQuc2VuZChcbiAgICAgIG5ldyBEZXNjcmliZVNlcnZpY2VzQ29tbWFuZCh7XG4gICAgICAgIGNsdXN0ZXI6IGNsdXN0ZXJOYW1lLFxuICAgICAgICBzZXJ2aWNlczogW3NlcnZpY2VOYW1lXSxcbiAgICAgIH0pLFxuICAgIClcblxuICAgIGlmIChzZXJ2aWNlcy5zZXJ2aWNlcz8ubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlcnZpY2Ugbm90IGZvdW5kOiAke2NsdXN0ZXJOYW1lfS8ke3NlcnZpY2VOYW1lfWApXG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcnZpY2VzLnNlcnZpY2VzWzBdXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBnZXRUYXNrRGVmaW5pdGlvbihcbiAgICB0YXNrRGVmaW5pdGlvbjogc3RyaW5nLFxuICApOiBQcm9taXNlPFRhc2tEZWZpbml0aW9uPiB7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGVjc0NsaWVudC5zZW5kKFxuICAgICAgbmV3IERlc2NyaWJlVGFza0RlZmluaXRpb25Db21tYW5kKHsgdGFza0RlZmluaXRpb24gfSksXG4gICAgKVxuICAgIHJldHVybiByZXNwLnRhc2tEZWZpbml0aW9uIVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBzZXJ2aWNlIGlzIGNvbnNpZGVyZWQgdG8gYmUgc3RhYmlsaXplZC5cbiAgICpcbiAgICogVXNlcyB0aGUgbG9naWMgZGVzY3JpYmVkIGF0XG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGkvbGF0ZXN0L3JlZmVyZW5jZS9lY3Mvd2FpdC9zZXJ2aWNlcy1zdGFibGUuaHRtbFxuICAgKi9cbiAgZnVuY3Rpb24gaXNTdGFiaWxpemVkKHNlcnZpY2U6IFNlcnZpY2UpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgc2VydmljZS5kZXBsb3ltZW50cz8ubGVuZ3RoID09IDEgJiZcbiAgICAgIHNlcnZpY2UucnVubmluZ0NvdW50ID09IHNlcnZpY2UuZGVzaXJlZENvdW50XG4gICAgKVxuICB9XG5cbiAgZnVuY3Rpb24gZXh0cmFjdFRhZyhpbWFnZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCFpbWFnZS5pbmNsdWRlcyhcIjpcIikpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHJldHVybiBpbWFnZS5yZXBsYWNlKC8uKjovLCBcIlwiKVxuICB9XG5cbiAgY29uc3QgY2x1c3Rlck5hbWUgPSByZXF1aXJlRW52KFwiQ0xVU1RFUl9OQU1FXCIpXG4gIGNvbnN0IHNlcnZpY2VOYW1lID0gcmVxdWlyZUVudihcIlNFUlZJQ0VfTkFNRVwiKVxuXG4gIC8vIFRoZSBzZXJ2aWNlIG5hbWUgaXMgdW5rbm93biBkdXJpbmcgaW5pdGlhbCBkZXBsb3ltZW50IG9mIHRoZSBzdGFjay5cbiAgLy8gSW4gdGhpcyBjYXNlIHdlIHJldHVybiBzdGFiaWxpemVkIHN0YXR1cyBhcyB0cnVlLlxuICBpZiAoc2VydmljZU5hbWUgPT09IFwiXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFRhZzogbnVsbCxcbiAgICAgIHN0YWJpbGl6ZWQ6IHRydWUsXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2VydmljZSA9IGF3YWl0IGdldFNlcnZpY2UoY2x1c3Rlck5hbWUsIHNlcnZpY2VOYW1lKVxuICBjb25zdCBtYWluRGVwbG95bWVudCA9IHNlcnZpY2UuZGVwbG95bWVudHM/LmZpbmQoXG4gICAgKGl0KSA9PiBpdC5zdGF0dXMgPT09IFwiUFJJTUFSWVwiLFxuICApXG5cbiAgY29uc3QgdGFza0RlZmluaXRpb24gPSBhd2FpdCBnZXRUYXNrRGVmaW5pdGlvbihcbiAgICBtYWluRGVwbG95bWVudCEudGFza0RlZmluaXRpb24hLFxuICApXG5cbiAgLy8gT25seSBvbmUgY29udGFpbmVyIGlzIHN1cHBvcnRlZCBmb3IgdGhlIHRhc2sgZGVmaW5pdGlvbi5cblxuICByZXR1cm4ge1xuICAgIGN1cnJlbnRUYWc6IGV4dHJhY3RUYWcodGFza0RlZmluaXRpb24uY29udGFpbmVyRGVmaW5pdGlvbnMhWzBdLmltYWdlISksXG4gICAgc3RhYmlsaXplZDogaXNTdGFiaWxpemVkKHNlcnZpY2UpLFxuICB9XG59XG4iXX0=
@@ -1,47 +0,0 @@
1
- import * as constructs from "constructs";
2
- import * as iam from "aws-cdk-lib/aws-iam";
3
- import { EcsUpdateImageArtifactStatus } from "./artifact-status";
4
- interface Props {
5
- artifactStatus: EcsUpdateImageArtifactStatus;
6
- secretName: string;
7
- }
8
- /**
9
- * Container used for holding the current ECR tag for a ECS service.
10
- *
11
- * Since we are deploying our ECS services from both CloudFormation
12
- * (by having the TaskDefinition defined), as well as directly from
13
- * our CD pipeline by UpdateService call to ECS, we need to ensure
14
- * the referenced ECR image is kept in sync.
15
- *
16
- * To do this we use a container to hold the current ECR tag. This
17
- * is then looked up during deployment from CloudFormation, and
18
- * when deploying from CD pipeline it is updated before UpdateService
19
- * call.
20
- *
21
- * A secret is used as it can be dynamically resolved as part of the
22
- * CloudFormation template.
23
- *
24
- * We do not keep any default value for the container, as that might
25
- * lead us to later deploy a very old version of the build. It is
26
- * better if the deployment fails in this scenario. If this happens
27
- * the stack update will fail with:
28
- *
29
- * Could not find a value associated with JSONKey in SecretString
30
- */
31
- export declare class EcsUpdateImageTag extends constructs.Construct {
32
- private readonly secret;
33
- private readonly artifactStatus;
34
- readonly secretArn: string;
35
- constructor(scope: constructs.Construct, id: string, props: Props);
36
- grantUpdate(grantee: iam.IGrantable): iam.Grant;
37
- /**
38
- * A CloudFormation dynamic reference that will be resolved
39
- * during deployment.
40
- *
41
- * If we have not yet flagged the artifact as deployed,
42
- * we do not allow resolving the value. See the documentation
43
- * of {@link EcsUpdateImageArtifactStatus}.
44
- */
45
- getEcrTag(): string | null;
46
- }
47
- export {};
@@ -1,67 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EcsUpdateImageTag = void 0;
4
- const constructs = require("constructs");
5
- const iam = require("aws-cdk-lib/aws-iam");
6
- const secretsmanager = require("aws-cdk-lib/aws-secretsmanager");
7
- /**
8
- * Container used for holding the current ECR tag for a ECS service.
9
- *
10
- * Since we are deploying our ECS services from both CloudFormation
11
- * (by having the TaskDefinition defined), as well as directly from
12
- * our CD pipeline by UpdateService call to ECS, we need to ensure
13
- * the referenced ECR image is kept in sync.
14
- *
15
- * To do this we use a container to hold the current ECR tag. This
16
- * is then looked up during deployment from CloudFormation, and
17
- * when deploying from CD pipeline it is updated before UpdateService
18
- * call.
19
- *
20
- * A secret is used as it can be dynamically resolved as part of the
21
- * CloudFormation template.
22
- *
23
- * We do not keep any default value for the container, as that might
24
- * lead us to later deploy a very old version of the build. It is
25
- * better if the deployment fails in this scenario. If this happens
26
- * the stack update will fail with:
27
- *
28
- * Could not find a value associated with JSONKey in SecretString
29
- */
30
- class EcsUpdateImageTag extends constructs.Construct {
31
- constructor(scope, id, props) {
32
- super(scope, id);
33
- this.artifactStatus = props.artifactStatus;
34
- this.secret = new secretsmanager.Secret(this, "Secret", {
35
- secretName: props.secretName,
36
- generateSecretString: {
37
- // Do not modify this, as it would cause the secret to regenerate.
38
- secretStringTemplate: "{}",
39
- generateStringKey: "unusedField",
40
- },
41
- });
42
- this.secretArn = this.secret.secretArn;
43
- }
44
- grantUpdate(grantee) {
45
- return iam.Grant.addToPrincipal({
46
- grantee,
47
- actions: ["secretsmanager:UpdateSecret"],
48
- resourceArns: [this.secretArn],
49
- });
50
- }
51
- /**
52
- * A CloudFormation dynamic reference that will be resolved
53
- * during deployment.
54
- *
55
- * If we have not yet flagged the artifact as deployed,
56
- * we do not allow resolving the value. See the documentation
57
- * of {@link EcsUpdateImageArtifactStatus}.
58
- */
59
- getEcrTag() {
60
- if (!this.artifactStatus.artifactPushedAndTagUpdated) {
61
- return null;
62
- }
63
- return this.secret.secretValueFromJson("tag").toString();
64
- }
65
- }
66
- exports.EcsUpdateImageTag = EcsUpdateImageTag;
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Vjcy11cGRhdGUtaW1hZ2UvdGFnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUF3QztBQUN4QywyQ0FBMEM7QUFDMUMsaUVBQWdFO0FBUWhFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSxVQUFVLENBQUMsU0FBUztJQUt6RCxZQUFZLEtBQTJCLEVBQUUsRUFBVSxFQUFFLEtBQVk7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUE7UUFFMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUN0RCxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDNUIsb0JBQW9CLEVBQUU7Z0JBQ3BCLGtFQUFrRTtnQkFDbEUsb0JBQW9CLEVBQUUsSUFBSTtnQkFDMUIsaUJBQWlCLEVBQUUsYUFBYTthQUNqQztTQUNGLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUE7SUFDeEMsQ0FBQztJQUVNLFdBQVcsQ0FBQyxPQUF1QjtRQUN4QyxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQzlCLE9BQU87WUFDUCxPQUFPLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztZQUN4QyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQy9CLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksU0FBUztRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLDJCQUEyQixFQUFFLENBQUM7WUFDckQsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQzFELENBQUM7Q0FDRjtBQTVDRCw4Q0E0Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjb25zdHJ1Y3RzIGZyb20gXCJjb25zdHJ1Y3RzXCJcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiXG5pbXBvcnQgKiBhcyBzZWNyZXRzbWFuYWdlciBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyXCJcbmltcG9ydCB7IEVjc1VwZGF0ZUltYWdlQXJ0aWZhY3RTdGF0dXMgfSBmcm9tIFwiLi9hcnRpZmFjdC1zdGF0dXNcIlxuXG5pbnRlcmZhY2UgUHJvcHMge1xuICBhcnRpZmFjdFN0YXR1czogRWNzVXBkYXRlSW1hZ2VBcnRpZmFjdFN0YXR1c1xuICBzZWNyZXROYW1lOiBzdHJpbmdcbn1cblxuLyoqXG4gKiBDb250YWluZXIgdXNlZCBmb3IgaG9sZGluZyB0aGUgY3VycmVudCBFQ1IgdGFnIGZvciBhIEVDUyBzZXJ2aWNlLlxuICpcbiAqIFNpbmNlIHdlIGFyZSBkZXBsb3lpbmcgb3VyIEVDUyBzZXJ2aWNlcyBmcm9tIGJvdGggQ2xvdWRGb3JtYXRpb25cbiAqIChieSBoYXZpbmcgdGhlIFRhc2tEZWZpbml0aW9uIGRlZmluZWQpLCBhcyB3ZWxsIGFzIGRpcmVjdGx5IGZyb21cbiAqIG91ciBDRCBwaXBlbGluZSBieSBVcGRhdGVTZXJ2aWNlIGNhbGwgdG8gRUNTLCB3ZSBuZWVkIHRvIGVuc3VyZVxuICogdGhlIHJlZmVyZW5jZWQgRUNSIGltYWdlIGlzIGtlcHQgaW4gc3luYy5cbiAqXG4gKiBUbyBkbyB0aGlzIHdlIHVzZSBhIGNvbnRhaW5lciB0byBob2xkIHRoZSBjdXJyZW50IEVDUiB0YWcuIFRoaXNcbiAqIGlzIHRoZW4gbG9va2VkIHVwIGR1cmluZyBkZXBsb3ltZW50IGZyb20gQ2xvdWRGb3JtYXRpb24sIGFuZFxuICogd2hlbiBkZXBsb3lpbmcgZnJvbSBDRCBwaXBlbGluZSBpdCBpcyB1cGRhdGVkIGJlZm9yZSBVcGRhdGVTZXJ2aWNlXG4gKiBjYWxsLlxuICpcbiAqIEEgc2VjcmV0IGlzIHVzZWQgYXMgaXQgY2FuIGJlIGR5bmFtaWNhbGx5IHJlc29sdmVkIGFzIHBhcnQgb2YgdGhlXG4gKiBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZS5cbiAqXG4gKiBXZSBkbyBub3Qga2VlcCBhbnkgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbnRhaW5lciwgYXMgdGhhdCBtaWdodFxuICogbGVhZCB1cyB0byBsYXRlciBkZXBsb3kgYSB2ZXJ5IG9sZCB2ZXJzaW9uIG9mIHRoZSBidWlsZC4gSXQgaXNcbiAqIGJldHRlciBpZiB0aGUgZGVwbG95bWVudCBmYWlscyBpbiB0aGlzIHNjZW5hcmlvLiBJZiB0aGlzIGhhcHBlbnNcbiAqIHRoZSBzdGFjayB1cGRhdGUgd2lsbCBmYWlsIHdpdGg6XG4gKlxuICogICBDb3VsZCBub3QgZmluZCBhIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBKU09OS2V5IGluIFNlY3JldFN0cmluZ1xuICovXG5leHBvcnQgY2xhc3MgRWNzVXBkYXRlSW1hZ2VUYWcgZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VjcmV0OiBzZWNyZXRzbWFuYWdlci5TZWNyZXRcbiAgcHJpdmF0ZSByZWFkb25seSBhcnRpZmFjdFN0YXR1czogRWNzVXBkYXRlSW1hZ2VBcnRpZmFjdFN0YXR1c1xuICByZWFkb25seSBzZWNyZXRBcm46IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgdGhpcy5hcnRpZmFjdFN0YXR1cyA9IHByb3BzLmFydGlmYWN0U3RhdHVzXG5cbiAgICB0aGlzLnNlY3JldCA9IG5ldyBzZWNyZXRzbWFuYWdlci5TZWNyZXQodGhpcywgXCJTZWNyZXRcIiwge1xuICAgICAgc2VjcmV0TmFtZTogcHJvcHMuc2VjcmV0TmFtZSxcbiAgICAgIGdlbmVyYXRlU2VjcmV0U3RyaW5nOiB7XG4gICAgICAgIC8vIERvIG5vdCBtb2RpZnkgdGhpcywgYXMgaXQgd291bGQgY2F1c2UgdGhlIHNlY3JldCB0byByZWdlbmVyYXRlLlxuICAgICAgICBzZWNyZXRTdHJpbmdUZW1wbGF0ZTogXCJ7fVwiLFxuICAgICAgICBnZW5lcmF0ZVN0cmluZ0tleTogXCJ1bnVzZWRGaWVsZFwiLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgdGhpcy5zZWNyZXRBcm4gPSB0aGlzLnNlY3JldC5zZWNyZXRBcm5cbiAgfVxuXG4gIHB1YmxpYyBncmFudFVwZGF0ZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9uczogW1wic2VjcmV0c21hbmFnZXI6VXBkYXRlU2VjcmV0XCJdLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbdGhpcy5zZWNyZXRBcm5dLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQSBDbG91ZEZvcm1hdGlvbiBkeW5hbWljIHJlZmVyZW5jZSB0aGF0IHdpbGwgYmUgcmVzb2x2ZWRcbiAgICogZHVyaW5nIGRlcGxveW1lbnQuXG4gICAqXG4gICAqIElmIHdlIGhhdmUgbm90IHlldCBmbGFnZ2VkIHRoZSBhcnRpZmFjdCBhcyBkZXBsb3llZCxcbiAgICogd2UgZG8gbm90IGFsbG93IHJlc29sdmluZyB0aGUgdmFsdWUuIFNlZSB0aGUgZG9jdW1lbnRhdGlvblxuICAgKiBvZiB7QGxpbmsgRWNzVXBkYXRlSW1hZ2VBcnRpZmFjdFN0YXR1c30uXG4gICAqL1xuICBwdWJsaWMgZ2V0RWNyVGFnKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghdGhpcy5hcnRpZmFjdFN0YXR1cy5hcnRpZmFjdFB1c2hlZEFuZFRhZ1VwZGF0ZWQpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlY3JldC5zZWNyZXRWYWx1ZUZyb21Kc29uKFwidGFnXCIpLnRvU3RyaW5nKClcbiAgfVxufVxuIl19
@@ -1,14 +0,0 @@
1
- /**
2
- * The role used when running "cdk deploy".
3
- */
4
- export declare const cdkDeployRoleName = "liflig-cdk-deployer-cdk";
5
- /**
6
- * Path on S3 for pipeline configuration.
7
- */
8
- export declare function pipelineS3Prefix(pipelineName: string): string;
9
- /**
10
- * Key in S3 bucket used to trigger pipeline.
11
- *
12
- * This is an empty file within the pipeline path.
13
- */
14
- export declare function pipelineS3TriggerKey(pipelineName: string): string;
@@ -1,24 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.pipelineS3TriggerKey = exports.pipelineS3Prefix = exports.cdkDeployRoleName = void 0;
4
- /**
5
- * The role used when running "cdk deploy".
6
- */
7
- exports.cdkDeployRoleName = "liflig-cdk-deployer-cdk";
8
- /**
9
- * Path on S3 for pipeline configuration.
10
- */
11
- function pipelineS3Prefix(pipelineName) {
12
- return `pipelines/${pipelineName}/`;
13
- }
14
- exports.pipelineS3Prefix = pipelineS3Prefix;
15
- /**
16
- * Key in S3 bucket used to trigger pipeline.
17
- *
18
- * This is an empty file within the pipeline path.
19
- */
20
- function pipelineS3TriggerKey(pipelineName) {
21
- return `pipelines/${pipelineName}/trigger`;
22
- }
23
- exports.pipelineS3TriggerKey = pipelineS3TriggerKey;
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVudGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGlwZWxpbmVzL2NvbnZlbnRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOztHQUVHO0FBQ1UsUUFBQSxpQkFBaUIsR0FBRyx5QkFBeUIsQ0FBQTtBQUUxRDs7R0FFRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLFlBQW9CO0lBQ25ELE9BQU8sYUFBYSxZQUFZLEdBQUcsQ0FBQTtBQUNyQyxDQUFDO0FBRkQsNENBRUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQUMsWUFBb0I7SUFDdkQsT0FBTyxhQUFhLFlBQVksVUFBVSxDQUFBO0FBQzVDLENBQUM7QUFGRCxvREFFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIHJvbGUgdXNlZCB3aGVuIHJ1bm5pbmcgXCJjZGsgZGVwbG95XCIuXG4gKi9cbmV4cG9ydCBjb25zdCBjZGtEZXBsb3lSb2xlTmFtZSA9IFwibGlmbGlnLWNkay1kZXBsb3llci1jZGtcIlxuXG4vKipcbiAqIFBhdGggb24gUzMgZm9yIHBpcGVsaW5lIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaXBlbGluZVMzUHJlZml4KHBpcGVsaW5lTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBwaXBlbGluZXMvJHtwaXBlbGluZU5hbWV9L2Bcbn1cblxuLyoqXG4gKiBLZXkgaW4gUzMgYnVja2V0IHVzZWQgdG8gdHJpZ2dlciBwaXBlbGluZS5cbiAqXG4gKiBUaGlzIGlzIGFuIGVtcHR5IGZpbGUgd2l0aGluIHRoZSBwaXBlbGluZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGlwZWxpbmVTM1RyaWdnZXJLZXkocGlwZWxpbmVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYHBpcGVsaW5lcy8ke3BpcGVsaW5lTmFtZX0vdHJpZ2dlcmBcbn1cbiJdfQ==
@@ -1,18 +0,0 @@
1
- import * as constructs from "constructs";
2
- import * as ec2 from "aws-cdk-lib/aws-ec2";
3
- import * as s3 from "aws-cdk-lib/aws-s3";
4
- import * as sfn from "aws-cdk-lib/aws-stepfunctions";
5
- interface DeployEnvProps {
6
- accountId: string;
7
- afterSuccessfulDeploy?: sfn.Chain;
8
- artefactBucket: s3.IBucket;
9
- envName: string;
10
- vpc: ec2.IVpc;
11
- }
12
- export declare class DeployEnv extends constructs.Construct {
13
- chain: sfn.Chain;
14
- constructor(scope: constructs.Construct, id: string, props: DeployEnvProps);
15
- private getOrCreateCluster;
16
- private getOrCreateTaskSecurityGroup;
17
- }
18
- export {};