@liflig/cdk 2.18.5 → 2.18.6

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 (140) hide show
  1. package/assets/cloudtrail-slack-integration-lambda/main.py +267 -0
  2. package/assets/pipeline-slack-notification-lambda/index.py +300 -0
  3. package/assets/prepare-cdk-source-lambda/index.py +159 -0
  4. package/assets/slack-alarm-lambda/index.py +103 -0
  5. package/lib/alarms/database-alarms.d.ts +125 -0
  6. package/lib/alarms/database-alarms.js +171 -0
  7. package/lib/alarms/index.d.ts +3 -0
  8. package/lib/alarms/index.js +10 -0
  9. package/lib/alarms/service-alarms.d.ts +145 -0
  10. package/lib/alarms/service-alarms.js +148 -0
  11. package/lib/alarms/ses-alarms.d.ts +67 -0
  12. package/lib/alarms/ses-alarms.js +49 -0
  13. package/lib/alarms/slack-alarm.d.ts +25 -0
  14. package/lib/alarms/slack-alarm.js +47 -0
  15. package/lib/bastion-host.d.ts +41 -0
  16. package/lib/bastion-host.js +86 -0
  17. package/lib/bin/cdk-create-snapshots.d.ts +2 -0
  18. package/lib/bin/fetch-pipeline-variables.d.ts +2 -0
  19. package/lib/build-artifacts/index.d.ts +68 -0
  20. package/lib/build-artifacts/index.js +118 -0
  21. package/lib/cdk-deploy/cdk-deploy.d.ts +63 -0
  22. package/lib/cdk-deploy/cdk-deploy.js +175 -0
  23. package/lib/cdk-deploy/index.d.ts +1 -0
  24. package/lib/cdk-deploy/index.js +6 -0
  25. package/lib/cdk-deploy/start-deploy-handler.d.ts +8 -0
  26. package/lib/cdk-deploy/start-deploy-handler.js +72 -0
  27. package/lib/cdk-deploy/status-handler.d.ts +6 -0
  28. package/lib/cdk-deploy/status-handler.js +83 -0
  29. package/lib/cdk-pipelines/cloud-assembly-lookup-handler.d.ts +6 -0
  30. package/lib/cdk-pipelines/cloud-assembly-lookup-handler.js +63 -0
  31. package/lib/cdk-pipelines/index.d.ts +3 -0
  32. package/lib/cdk-pipelines/index.js +10 -0
  33. package/lib/cdk-pipelines/liflig-cdk-pipeline.d.ts +110 -0
  34. package/lib/cdk-pipelines/liflig-cdk-pipeline.js +232 -0
  35. package/lib/cdk-pipelines/slack-notification.d.ts +51 -0
  36. package/lib/cdk-pipelines/slack-notification.js +54 -0
  37. package/lib/cdk-pipelines/variables.d.ts +15 -0
  38. package/lib/cdk-pipelines/variables.js +80 -0
  39. package/lib/cloudtrail-slack-integration/cloudtrail-slack-integration.d.ts +47 -0
  40. package/lib/cloudtrail-slack-integration/cloudtrail-slack-integration.js +211 -0
  41. package/lib/cloudtrail-slack-integration/index.d.ts +1 -0
  42. package/lib/cloudtrail-slack-integration/index.js +6 -0
  43. package/lib/configure-parameters/configure-parameters.d.ts +61 -0
  44. package/lib/configure-parameters/configure-parameters.js +94 -0
  45. package/lib/configure-parameters/index.d.ts +1 -0
  46. package/lib/configure-parameters/index.js +6 -0
  47. package/lib/cross-region-ssm-parameter.d.ts +13 -0
  48. package/lib/cross-region-ssm-parameter.js +46 -0
  49. package/lib/ecs/cluster.d.ts +25 -0
  50. package/lib/ecs/cluster.js +70 -0
  51. package/lib/ecs/fargate-service.d.ts +63 -0
  52. package/lib/ecs/fargate-service.js +98 -0
  53. package/lib/ecs/index.d.ts +3 -0
  54. package/lib/ecs/index.js +10 -0
  55. package/lib/ecs/listener-rule.d.ts +25 -0
  56. package/lib/ecs/listener-rule.js +27 -0
  57. package/lib/ecs-update-image/artifact-status.d.ts +39 -0
  58. package/lib/ecs-update-image/artifact-status.js +41 -0
  59. package/lib/ecs-update-image/ecs-update-image.d.ts +41 -0
  60. package/lib/ecs-update-image/ecs-update-image.js +98 -0
  61. package/lib/ecs-update-image/index.d.ts +3 -0
  62. package/lib/ecs-update-image/index.js +10 -0
  63. package/lib/ecs-update-image/start-deploy-handler.d.ts +6 -0
  64. package/lib/ecs-update-image/start-deploy-handler.js +104 -0
  65. package/lib/ecs-update-image/status-handler.d.ts +11 -0
  66. package/lib/ecs-update-image/status-handler.js +74 -0
  67. package/lib/ecs-update-image/tag.d.ts +47 -0
  68. package/lib/ecs-update-image/tag.js +67 -0
  69. package/lib/feature-flags.d.ts +18 -0
  70. package/lib/feature-flags.js +48 -0
  71. package/lib/griid/artefact-bucket.d.ts +7 -0
  72. package/lib/griid/artefact-bucket.js +30 -0
  73. package/lib/griid/index.d.ts +4 -0
  74. package/lib/griid/index.js +18 -0
  75. package/lib/hosted-zone-with-param.d.ts +29 -0
  76. package/lib/hosted-zone-with-param.js +65 -0
  77. package/lib/index.d.ts +32 -0
  78. package/lib/kinesis/index.d.ts +1 -0
  79. package/lib/kinesis/index.js +6 -0
  80. package/lib/kinesis/kinesis-to-datadog-stream.d.ts +28 -0
  81. package/lib/kinesis/kinesis-to-datadog-stream.js +126 -0
  82. package/lib/load-balancer/index.d.ts +1 -0
  83. package/lib/load-balancer/index.js +6 -0
  84. package/lib/load-balancer/load-balancer.d.ts +16 -0
  85. package/lib/load-balancer/load-balancer.js +60 -0
  86. package/lib/pipelines/conventions.d.ts +14 -0
  87. package/lib/pipelines/conventions.js +24 -0
  88. package/lib/pipelines/deploy-env.d.ts +18 -0
  89. package/lib/pipelines/deploy-env.js +96 -0
  90. package/lib/pipelines/index.d.ts +2 -0
  91. package/lib/pipelines/index.js +8 -0
  92. package/lib/pipelines/liflig-cdk-deployer-deps.d.ts +13 -0
  93. package/lib/pipelines/liflig-cdk-deployer-deps.js +35 -0
  94. package/lib/pipelines/pipeline.d.ts +78 -0
  95. package/lib/pipelines/pipeline.js +224 -0
  96. package/lib/platform/index.d.ts +1 -0
  97. package/lib/platform/index.js +7 -0
  98. package/lib/platform/platform.d.ts +37 -0
  99. package/lib/platform/platform.js +57 -0
  100. package/lib/rds/database.d.ts +49 -0
  101. package/lib/rds/database.js +60 -0
  102. package/lib/rds/index.d.ts +1 -0
  103. package/lib/rds/index.js +6 -0
  104. package/lib/ses/configurationsetdeliveryoptions/index.d.ts +26 -0
  105. package/lib/ses/configurationsetdeliveryoptions/index.js +48 -0
  106. package/lib/ses/configurationsetsnsdestination/handler.d.ts +17 -0
  107. package/lib/ses/configurationsetsnsdestination/handler.js +75 -0
  108. package/lib/ses/configurationsetsnsdestination/index.d.ts +29 -0
  109. package/lib/ses/configurationsetsnsdestination/index.js +75 -0
  110. package/lib/ses/index.d.ts +4 -0
  111. package/lib/ses/index.js +12 -0
  112. package/lib/ses/sesdomain/handler.d.ts +10 -0
  113. package/lib/ses/sesdomain/handler.js +82 -0
  114. package/lib/ses/sesdomain/index.d.ts +57 -0
  115. package/lib/ses/sesdomain/index.js +94 -0
  116. package/lib/ses/sesverifyemail/handler.d.ts +9 -0
  117. package/lib/ses/sesverifyemail/handler.js +25 -0
  118. package/lib/ses/sesverifyemail/index.d.ts +13 -0
  119. package/lib/ses/sesverifyemail/index.js +51 -0
  120. package/lib/snapshots.d.ts +4 -0
  121. package/lib/snapshots.js +214 -0
  122. package/lib/ssm-parameter-backed-resource.d.ts +45 -0
  123. package/lib/ssm-parameter-backed-resource.js +67 -0
  124. package/lib/ssm-parameter-reader.d.ts +21 -0
  125. package/lib/ssm-parameter-reader.js +48 -0
  126. package/lib/tags.d.ts +8 -0
  127. package/lib/tags.js +36 -0
  128. package/lib/utils.d.ts +2 -0
  129. package/lib/utils.js +17 -0
  130. package/lib/webapp/index.d.ts +3 -0
  131. package/lib/webapp/index.js +10 -0
  132. package/lib/webapp/monitor.d.ts +187 -0
  133. package/lib/webapp/monitor.js +156 -0
  134. package/lib/webapp/security-headers.d.ts +38 -0
  135. package/lib/webapp/security-headers.js +129 -0
  136. package/lib/webapp/webapp.d.ts +116 -0
  137. package/lib/webapp/webapp.js +118 -0
  138. package/lib/webapp-deploy-via-role.d.ts +25 -0
  139. package/lib/webapp-deploy-via-role.js +32 -0
  140. package/package.json +3 -2
@@ -0,0 +1,63 @@
1
+ import * as cdk from "aws-cdk-lib";
2
+ import * as ec2 from "aws-cdk-lib/aws-ec2";
3
+ import * as ecs from "aws-cdk-lib/aws-ecs";
4
+ import * as elb from "aws-cdk-lib/aws-elasticloadbalancingv2";
5
+ import * as logs from "aws-cdk-lib/aws-logs";
6
+ import * as constructs from "constructs";
7
+ import { Parameter } from "../configure-parameters/configure-parameters";
8
+ export interface FargateServiceProps {
9
+ serviceName: string;
10
+ vpc: ec2.IVpc;
11
+ cluster: ecs.ICluster;
12
+ desiredCount: number;
13
+ ecsImage: ecs.ContainerImage;
14
+ /**
15
+ * @default 256
16
+ */
17
+ cpu?: number;
18
+ /**
19
+ * @default 512
20
+ */
21
+ memoryLimitMiB?: number;
22
+ /**
23
+ * @default 2 weeks
24
+ */
25
+ logsRetention?: logs.RetentionDays;
26
+ /**
27
+ * @default 15 seconds
28
+ */
29
+ deregistrationDelay?: cdk.Duration;
30
+ /**
31
+ * @default 8080
32
+ */
33
+ containerPort?: number;
34
+ /**
35
+ * @default 60 seconds
36
+ */
37
+ healthCheckGracePeriod?: cdk.Duration;
38
+ /**
39
+ * Use this as workaround when adding the service to a load balancer after
40
+ * it has been created. For avoiding 'Health check grace period is only valid for services configured to use load balancers'
41
+ * Link to GitHub issue: https://github.com/aws/aws-cdk/issues/19842
42
+ */
43
+ skipHealthCheckGracePeriod?: boolean;
44
+ parameters?: Parameter[];
45
+ overrideFargateServiceProps?: Partial<ecs.FargateServiceProps>;
46
+ overrideHealthCheck?: Partial<elb.HealthCheck>;
47
+ overrideTargetGroupProps?: Partial<elb.ApplicationTargetGroupProps>;
48
+ overrideContainerProps?: Partial<ecs.ContainerDefinitionOptions>;
49
+ secrets?: Record<string, ecs.Secret>;
50
+ environment?: Record<string, string>;
51
+ /**
52
+ * @default false
53
+ */
54
+ skipTargetGroup?: boolean;
55
+ }
56
+ export declare class FargateService extends constructs.Construct {
57
+ readonly fargateService: ecs.FargateService;
58
+ readonly securityGroup: ec2.SecurityGroup;
59
+ readonly taskDefinition: ecs.TaskDefinition;
60
+ readonly targetGroup: elb.ApplicationTargetGroup | undefined;
61
+ readonly logGroup: logs.LogGroup;
62
+ constructor(scope: constructs.Construct, id: string, props: FargateServiceProps);
63
+ }
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FargateService = void 0;
4
+ const cdk = require("aws-cdk-lib");
5
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
6
+ const ec2 = require("aws-cdk-lib/aws-ec2");
7
+ const ecs = require("aws-cdk-lib/aws-ecs");
8
+ const elb = require("aws-cdk-lib/aws-elasticloadbalancingv2");
9
+ const logs = require("aws-cdk-lib/aws-logs");
10
+ const constructs = require("constructs");
11
+ const configure_parameters_1 = require("../configure-parameters");
12
+ class FargateService extends constructs.Construct {
13
+ constructor(scope, id, props) {
14
+ var _a, _b, _c, _d, _e, _f, _g;
15
+ super(scope, id);
16
+ const parameters = new configure_parameters_1.ConfigureParameters(this, {
17
+ ssmPrefix: `/liflig-cdk/${cdk.Stack.of(this).stackName}/${this.node.addr}/parameters`,
18
+ parameters: (_a = props.parameters) !== null && _a !== void 0 ? _a : [],
19
+ });
20
+ this.logGroup = new logs.LogGroup(this, "LogGroup", {
21
+ retention: (_b = props.logsRetention) !== null && _b !== void 0 ? _b : logs.RetentionDays.TWO_WEEKS,
22
+ });
23
+ this.securityGroup = new ec2.SecurityGroup(this, "SecurityGroup", {
24
+ vpc: props.vpc,
25
+ });
26
+ this.taskDefinition = new ecs.FargateTaskDefinition(this, "TaskDefinition", {
27
+ cpu: (_c = props.cpu) !== null && _c !== void 0 ? _c : 256,
28
+ memoryLimitMiB: (_d = props.memoryLimitMiB) !== null && _d !== void 0 ? _d : 512,
29
+ });
30
+ parameters.grantRead(this.taskDefinition.taskRole);
31
+ const container = this.taskDefinition.addContainer("Container", {
32
+ logging: ecs.LogDriver.awsLogs({
33
+ logGroup: this.logGroup,
34
+ streamPrefix: "ecs",
35
+ datetimeFormat: "%Y-%m-%dT%H:%M:%S",
36
+ }),
37
+ image: props.ecsImage,
38
+ secrets: props.secrets,
39
+ environment: {
40
+ SSM_PREFIX: parameters.ssmPrefix,
41
+ // Not read by the application, only used to help with redeployments.
42
+ PARAMS_HASH: parameters.hashValue,
43
+ ...((_e = props.environment) !== null && _e !== void 0 ? _e : {}),
44
+ },
45
+ linuxParameters: new ecs.LinuxParameters(this, "LinuxParameters", {
46
+ initProcessEnabled: true,
47
+ }),
48
+ ...props.overrideContainerProps,
49
+ });
50
+ const port = (_f = props.containerPort) !== null && _f !== void 0 ? _f : 8080;
51
+ container.addPortMappings({
52
+ containerPort: port,
53
+ hostPort: port,
54
+ });
55
+ this.fargateService = new ecs.FargateService(this, "Service", {
56
+ serviceName: props.serviceName,
57
+ vpcSubnets: {
58
+ subnetType: ec2.SubnetType.PUBLIC,
59
+ },
60
+ taskDefinition: this.taskDefinition,
61
+ cluster: props.cluster,
62
+ minHealthyPercent: 100,
63
+ healthCheckGracePeriod: props.healthCheckGracePeriod,
64
+ desiredCount: props.desiredCount,
65
+ assignPublicIp: true,
66
+ securityGroups: [this.securityGroup],
67
+ platformVersion: ecs.FargatePlatformVersion.VERSION1_4,
68
+ enableExecuteCommand: true,
69
+ ...props.overrideFargateServiceProps,
70
+ });
71
+ if (props.skipHealthCheckGracePeriod) {
72
+ ;
73
+ this.fargateService.node.defaultChild.healthCheckGracePeriodSeconds = undefined;
74
+ }
75
+ for (const param of parameters.parameters) {
76
+ this.fargateService.node.addDependency(param);
77
+ }
78
+ if (!props.skipTargetGroup) {
79
+ this.targetGroup = new elb.ApplicationTargetGroup(this, "TargetGroup", {
80
+ protocol: elb.ApplicationProtocol.HTTP,
81
+ port: port,
82
+ vpc: props.vpc,
83
+ targetType: elb.TargetType.IP,
84
+ targets: [this.fargateService],
85
+ deregistrationDelay: (_g = props.deregistrationDelay) !== null && _g !== void 0 ? _g : cdk.Duration.seconds(15),
86
+ ...props.overrideTargetGroupProps,
87
+ });
88
+ this.targetGroup.configureHealthCheck({
89
+ interval: aws_cdk_lib_1.Duration.seconds(10),
90
+ path: "/health",
91
+ healthyThresholdCount: 2,
92
+ ...props.overrideHealthCheck,
93
+ });
94
+ }
95
+ }
96
+ }
97
+ exports.FargateService = FargateService;
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFyZ2F0ZS1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Vjcy9mYXJnYXRlLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQWtDO0FBQ2xDLDZDQUFzQztBQUN0QywyQ0FBMEM7QUFDMUMsMkNBQTBDO0FBRTFDLDhEQUE2RDtBQUM3RCw2Q0FBNEM7QUFDNUMseUNBQXdDO0FBQ3hDLGtFQUE2RDtBQW9EN0QsTUFBYSxjQUFlLFNBQVEsVUFBVSxDQUFDLFNBQVM7SUFPdEQsWUFDRSxLQUEyQixFQUMzQixFQUFVLEVBQ1YsS0FBMEI7O1FBRTFCLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFaEIsTUFBTSxVQUFVLEdBQUcsSUFBSSwwQ0FBbUIsQ0FBQyxJQUFJLEVBQUU7WUFDL0MsU0FBUyxFQUFFLGVBQWUsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQ1osYUFBYTtZQUNiLFVBQVUsRUFBRSxNQUFBLEtBQUssQ0FBQyxVQUFVLG1DQUFJLEVBQUU7U0FDbkMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUNsRCxTQUFTLEVBQUUsTUFBQSxLQUFLLENBQUMsYUFBYSxtQ0FBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVM7U0FDL0QsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRTtZQUNoRSxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7U0FDZixDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLHFCQUFxQixDQUNqRCxJQUFJLEVBQ0os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S0FBSyxDQUFDLEdBQUc7Z0JBQ2QsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDN0IsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztnQkFDOUIsbUJBQW1CLEVBQ2pCLE1BQUEsS0FBSyxDQUFDLG1CQUFtQixtQ0FBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZELEdBQUcsS0FBSyxDQUFDLHdCQUF3QjthQUNsQyxDQUFDLENBQUE7WUFFRixJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDO2dCQUNwQyxRQUFRLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUM5QixJQUFJLEVBQUUsU0FBUztnQkFDZixxQkFBcUIsRUFBRSxDQUFDO2dCQUN4QixHQUFHLEtBQUssQ0FBQyxtQkFBbUI7YUFDN0IsQ0FBQyxDQUFBO1FBQ0osQ0FBQztJQUNILENBQUM7Q0FDRjtBQWxIRCx3Q0FrSEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiXG5pbXBvcnQgKiBhcyBlY3MgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3NcIlxuaW1wb3J0IHsgQ2ZuU2VydmljZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNzXCJcbmltcG9ydCAqIGFzIGVsYiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjJcIlxuaW1wb3J0ICogYXMgbG9ncyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIlxuaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQgeyBDb25maWd1cmVQYXJhbWV0ZXJzIH0gZnJvbSBcIi4uL2NvbmZpZ3VyZS1wYXJhbWV0ZXJzXCJcbmltcG9ydCB7IFBhcmFtZXRlciB9IGZyb20gXCIuLi9jb25maWd1cmUtcGFyYW1ldGVycy9jb25maWd1cmUtcGFyYW1ldGVyc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFyZ2F0ZVNlcnZpY2VQcm9wcyB7XG4gIHNlcnZpY2VOYW1lOiBzdHJpbmdcbiAgdnBjOiBlYzIuSVZwY1xuICBjbHVzdGVyOiBlY3MuSUNsdXN0ZXJcbiAgZGVzaXJlZENvdW50OiBudW1iZXJcbiAgZWNzSW1hZ2U6IGVjcy5Db250YWluZXJJbWFnZVxuICAvKipcbiAgICogQGRlZmF1bHQgMjU2XG4gICAqL1xuICBjcHU/OiBudW1iZXJcbiAgLyoqXG4gICAqIEBkZWZhdWx0IDUxMlxuICAgKi9cbiAgbWVtb3J5TGltaXRNaUI/OiBudW1iZXJcbiAgLyoqXG4gICAqIEBkZWZhdWx0IDIgd2Vla3NcbiAgICovXG4gIGxvZ3NSZXRlbnRpb24/OiBsb2dzLlJldGVudGlvbkRheXNcbiAgLyoqXG4gICAqIEBkZWZhdWx0IDE1IHNlY29uZHNcbiAgICovXG4gIGRlcmVnaXN0cmF0aW9uRGVsYXk/OiBjZGsuRHVyYXRpb25cbiAgLyoqXG4gICAqIEBkZWZhdWx0IDgwODBcbiAgICovXG4gIGNvbnRhaW5lclBvcnQ/OiBudW1iZXJcbiAgLyoqXG4gICAqIEBkZWZhdWx0IDYwIHNlY29uZHNcbiAgICovXG4gIGhlYWx0aENoZWNrR3JhY2VQZXJpb2Q/OiBjZGsuRHVyYXRpb25cbiAgLyoqXG4gICAqIFVzZSB0aGlzIGFzIHdvcmthcm91bmQgd2hlbiBhZGRpbmcgdGhlIHNlcnZpY2UgdG8gYSBsb2FkIGJhbGFuY2VyIGFmdGVyXG4gICAqIGl0IGhhcyBiZWVuIGNyZWF0ZWQuIEZvciBhdm9pZGluZyAnSGVhbHRoIGNoZWNrIGdyYWNlIHBlcmlvZCBpcyBvbmx5IHZhbGlkIGZvciBzZXJ2aWNlcyBjb25maWd1cmVkIHRvIHVzZSBsb2FkIGJhbGFuY2VycydcbiAgICogTGluayB0byBHaXRIdWIgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMTk4NDJcbiAgICovXG4gIHNraXBIZWFsdGhDaGVja0dyYWNlUGVyaW9kPzogYm9vbGVhblxuICBwYXJhbWV0ZXJzPzogUGFyYW1ldGVyW11cbiAgb3ZlcnJpZGVGYXJnYXRlU2VydmljZVByb3BzPzogUGFydGlhbDxlY3MuRmFyZ2F0ZVNlcnZpY2VQcm9wcz5cbiAgb3ZlcnJpZGVIZWFsdGhDaGVjaz86IFBhcnRpYWw8ZWxiLkhlYWx0aENoZWNrPlxuICBvdmVycmlkZVRhcmdldEdyb3VwUHJvcHM/OiBQYXJ0aWFsPGVsYi5BcHBsaWNhdGlvblRhcmdldEdyb3VwUHJvcHM+XG4gIG92ZXJyaWRlQ29udGFpbmVyUHJvcHM/OiBQYXJ0aWFsPGVjcy5Db250YWluZXJEZWZpbml0aW9uT3B0aW9ucz5cbiAgc2VjcmV0cz86IFJlY29yZDxzdHJpbmcsIGVjcy5TZWNyZXQ+XG4gIGVudmlyb25tZW50PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAvKipcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNraXBUYXJnZXRHcm91cD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNsYXNzIEZhcmdhdGVTZXJ2aWNlIGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgZmFyZ2F0ZVNlcnZpY2U6IGVjcy5GYXJnYXRlU2VydmljZVxuICBwdWJsaWMgcmVhZG9ubHkgc2VjdXJpdHlHcm91cDogZWMyLlNlY3VyaXR5R3JvdXBcbiAgcHVibGljIHJlYWRvbmx5IHRhc2tEZWZpbml0aW9uOiBlY3MuVGFza0RlZmluaXRpb25cbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldEdyb3VwOiBlbGIuQXBwbGljYXRpb25UYXJnZXRHcm91cCB8IHVuZGVmaW5lZFxuICBwdWJsaWMgcmVhZG9ubHkgbG9nR3JvdXA6IGxvZ3MuTG9nR3JvdXBcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogRmFyZ2F0ZVNlcnZpY2VQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IG5ldyBDb25maWd1cmVQYXJhbWV0ZXJzKHRoaXMsIHtcbiAgICAgIHNzbVByZWZpeDogYC9saWZsaWctY2RrLyR7Y2RrLlN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZX0vJHtcbiAgICAgICAgdGhpcy5ub2RlLmFkZHJcbiAgICAgIH0vcGFyYW1ldGVyc2AsXG4gICAgICBwYXJhbWV0ZXJzOiBwcm9wcy5wYXJhbWV0ZXJzID8/IFtdLFxuICAgIH0pXG5cbiAgICB0aGlzLmxvZ0dyb3VwID0gbmV3IGxvZ3MuTG9nR3JvdXAodGhpcywgXCJMb2dHcm91cFwiLCB7XG4gICAgICByZXRlbnRpb246IHByb3BzLmxvZ3NSZXRlbnRpb24gPz8gbG9ncy5SZXRlbnRpb25EYXlzLlRXT19XRUVLUyxcbiAgICB9KVxuXG4gICAgdGhpcy5zZWN1cml0eUdyb3VwID0gbmV3IGVjMi5TZWN1cml0eUdyb3VwKHRoaXMsIFwiU2VjdXJpdHlHcm91cFwiLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICB9KVxuXG4gICAgdGhpcy50YXNrRGVmaW5pdGlvbiA9IG5ldyBlY3MuRmFyZ2F0ZVRhc2tEZWZpbml0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIFwiVGFza0RlZmluaXRpb25cIixcbiAgICAgIHtcbiAgICAgICAgY3B1OiBwcm9wcy5jcHUgPz8gMjU2LFxuICAgICAgICBtZW1vcnlMaW1pdE1pQjogcHJvcHMubWVtb3J5TGltaXRNaUIgPz8gNTEyLFxuICAgICAgfSxcbiAgICApXG5cbiAgICBwYXJhbWV0ZXJzLmdyYW50UmVhZCh0aGlzLnRhc2tEZWZpbml0aW9uLnRhc2tSb2xlKVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy50YXNrRGVmaW5pdGlvbi5hZGRDb250YWluZXIoXCJDb250YWluZXJcIiwge1xuICAgICAgbG9nZ2luZzogZWNzLkxvZ0RyaXZlci5hd3NMb2dzKHtcbiAgICAgICAgbG9nR3JvdXA6IHRoaXMubG9nR3JvdXAsXG4gICAgICAgIHN0cmVhbVByZWZpeDogXCJlY3NcIixcbiAgICAgICAgZGF0ZXRpbWVGb3JtYXQ6IFwiJVktJW0tJWRUJUg6JU06JVNcIixcbiAgICAgIH0pLFxuICAgICAgaW1hZ2U6IHByb3BzLmVjc0ltYWdlLFxuICAgICAgc2VjcmV0czogcHJvcHMuc2VjcmV0cyxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFNTTV9QUkVGSVg6IHBhcmFtZXRlcnMuc3NtUHJlZml4LFxuICAgICAgICAvLyBOb3QgcmVhZCBieSB0aGUgYXBwbGljYXRpb24sIG9ubHkgdXNlZCB0byBoZWxwIHdpdGggcmVkZXBsb3ltZW50cy5cbiAgICAgICAgUEFSQU1TX0hBU0g6IHBhcmFtZXRlcnMuaGFzaFZhbHVlLFxuICAgICAgICAuLi4ocHJvcHMuZW52aXJvbm1lbnQgPz8ge30pLFxuICAgICAgfSxcbiAgICAgIGxpbnV4UGFyYW1ldGVyczogbmV3IGVjcy5MaW51eFBhcmFtZXRlcnModGhpcywgXCJMaW51eFBhcmFtZXRlcnNcIiwge1xuICAgICAgICBpbml0UHJvY2Vzc0VuYWJsZWQ6IHRydWUsXG4gICAgICB9KSxcbiAgICAgIC4uLnByb3BzLm92ZXJyaWRlQ29udGFpbmVyUHJvcHMsXG4gICAgfSlcblxuICAgIGNvbnN0IHBvcnQgPSBwcm9wcy5jb250YWluZXJQb3J0ID8/IDgwODBcblxuICAgIGNvbnRhaW5lci5hZGRQb3J0TWFwcGluZ3Moe1xuICAgICAgY29udGFpbmVyUG9ydDogcG9ydCxcbiAgICAgIGhvc3RQb3J0OiBwb3J0LFxuICAgIH0pXG5cbiAgICB0aGlzLmZhcmdhdGVTZXJ2aWNlID0gbmV3IGVjcy5GYXJnYXRlU2VydmljZSh0aGlzLCBcIlNlcnZpY2VcIiwge1xuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgdnBjU3VibmV0czoge1xuICAgICAgICBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMsXG4gICAgICB9LFxuICAgICAgdGFza0RlZmluaXRpb246IHRoaXMudGFza0RlZmluaXRpb24sXG4gICAgICBjbHVzdGVyOiBwcm9wcy5jbHVzdGVyLFxuICAgICAgbWluSGVhbHRoeVBlcmNlbnQ6IDEwMCxcbiAgICAgIGhlYWx0aENoZWNrR3JhY2VQZXJpb2Q6IHByb3BzLmhlYWx0aENoZWNrR3JhY2VQZXJpb2QsXG4gICAgICBkZXNpcmVkQ291bnQ6IHByb3BzLmRlc2lyZWRDb3VudCxcbiAgICAgIGFzc2lnblB1YmxpY0lwOiB0cnVlLFxuICAgICAgc2VjdXJpdHlHcm91cHM6IFt0aGlzLnNlY3VyaXR5R3JvdXBdLFxuICAgICAgcGxhdGZvcm1WZXJzaW9uOiBlY3MuRmFyZ2F0ZVBsYXRmb3JtVmVyc2lvbi5WRVJTSU9OMV80LFxuICAgICAgZW5hYmxlRXhlY3V0ZUNvbW1hbmQ6IHRydWUsXG4gICAgICAuLi5wcm9wcy5vdmVycmlkZUZhcmdhdGVTZXJ2aWNlUHJvcHMsXG4gICAgfSlcblxuICAgIGlmIChwcm9wcy5za2lwSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZCkge1xuICAgICAgOyhcbiAgICAgICAgdGhpcy5mYXJnYXRlU2VydmljZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5TZXJ2aWNlXG4gICAgICApLmhlYWx0aENoZWNrR3JhY2VQZXJpb2RTZWNvbmRzID0gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwYXJhbSBvZiBwYXJhbWV0ZXJzLnBhcmFtZXRlcnMpIHtcbiAgICAgIHRoaXMuZmFyZ2F0ZVNlcnZpY2Uubm9kZS5hZGREZXBlbmRlbmN5KHBhcmFtKVxuICAgIH1cblxuICAgIGlmICghcHJvcHMuc2tpcFRhcmdldEdyb3VwKSB7XG4gICAgICB0aGlzLnRhcmdldEdyb3VwID0gbmV3IGVsYi5BcHBsaWNhdGlvblRhcmdldEdyb3VwKHRoaXMsIFwiVGFyZ2V0R3JvdXBcIiwge1xuICAgICAgICBwcm90b2NvbDogZWxiLkFwcGxpY2F0aW9uUHJvdG9jb2wuSFRUUCxcbiAgICAgICAgcG9ydDogcG9ydCxcbiAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgIHRhcmdldFR5cGU6IGVsYi5UYXJnZXRUeXBlLklQLFxuICAgICAgICB0YXJnZXRzOiBbdGhpcy5mYXJnYXRlU2VydmljZV0sXG4gICAgICAgIGRlcmVnaXN0cmF0aW9uRGVsYXk6XG4gICAgICAgICAgcHJvcHMuZGVyZWdpc3RyYXRpb25EZWxheSA/PyBjZGsuRHVyYXRpb24uc2Vjb25kcygxNSksXG4gICAgICAgIC4uLnByb3BzLm92ZXJyaWRlVGFyZ2V0R3JvdXBQcm9wcyxcbiAgICAgIH0pXG5cbiAgICAgIHRoaXMudGFyZ2V0R3JvdXAuY29uZmlndXJlSGVhbHRoQ2hlY2soe1xuICAgICAgICBpbnRlcnZhbDogRHVyYXRpb24uc2Vjb25kcygxMCksXG4gICAgICAgIHBhdGg6IFwiL2hlYWx0aFwiLFxuICAgICAgICBoZWFsdGh5VGhyZXNob2xkQ291bnQ6IDIsXG4gICAgICAgIC4uLnByb3BzLm92ZXJyaWRlSGVhbHRoQ2hlY2ssXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,3 @@
1
+ export { Cluster, ClusterProps } from "./cluster";
2
+ export { FargateService, FargateServiceProps } from "./fargate-service";
3
+ export { ListenerRule, ListenerRuleProps } from "./listener-rule";
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ListenerRule = exports.FargateService = exports.Cluster = void 0;
4
+ var cluster_1 = require("./cluster");
5
+ Object.defineProperty(exports, "Cluster", { enumerable: true, get: function () { return cluster_1.Cluster; } });
6
+ var fargate_service_1 = require("./fargate-service");
7
+ Object.defineProperty(exports, "FargateService", { enumerable: true, get: function () { return fargate_service_1.FargateService; } });
8
+ var listener_rule_1 = require("./listener-rule");
9
+ Object.defineProperty(exports, "ListenerRule", { enumerable: true, get: function () { return listener_rule_1.ListenerRule; } });
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZWNzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUFpRDtBQUF4QyxrR0FBQSxPQUFPLE9BQUE7QUFDaEIscURBQXVFO0FBQTlELGlIQUFBLGNBQWMsT0FBQTtBQUN2QixpREFBaUU7QUFBeEQsNkdBQUEsWUFBWSxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgQ2x1c3RlciwgQ2x1c3RlclByb3BzIH0gZnJvbSBcIi4vY2x1c3RlclwiXG5leHBvcnQgeyBGYXJnYXRlU2VydmljZSwgRmFyZ2F0ZVNlcnZpY2VQcm9wcyB9IGZyb20gXCIuL2ZhcmdhdGUtc2VydmljZVwiXG5leHBvcnQgeyBMaXN0ZW5lclJ1bGUsIExpc3RlbmVyUnVsZVByb3BzIH0gZnJvbSBcIi4vbGlzdGVuZXItcnVsZVwiXG4iXX0=
@@ -0,0 +1,25 @@
1
+ import * as constructs from "constructs";
2
+ import * as elb from "aws-cdk-lib/aws-elasticloadbalancingv2";
3
+ import * as route53 from "aws-cdk-lib/aws-route53";
4
+ export interface ListenerRuleProps {
5
+ httpsListener: elb.IApplicationListener;
6
+ loadBalancer: elb.IApplicationLoadBalancer;
7
+ domainName: string;
8
+ listenerPriority: number;
9
+ targetGroup: elb.IApplicationTargetGroup;
10
+ /**
11
+ * If 'hostedZone' is an A record for 'domainName' is created with
12
+ * the 'loadBalancer' as target
13
+ */
14
+ hostedZone?: route53.IHostedZone;
15
+ }
16
+ export declare class ListenerRule extends constructs.Construct {
17
+ /**
18
+ * The rule created in the ALB Listener.
19
+ *
20
+ * Use {@link elb.ApplicationListenerRule.addCondition} to add [other conditions](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#rule-condition-types)
21
+ * than Host-header.
22
+ */
23
+ readonly applicationListenerRule: elb.ApplicationListenerRule;
24
+ constructor(scope: constructs.Construct, id: string, props: ListenerRuleProps);
25
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ListenerRule = void 0;
4
+ const constructs = require("constructs");
5
+ const elb = require("aws-cdk-lib/aws-elasticloadbalancingv2");
6
+ const route53 = require("aws-cdk-lib/aws-route53");
7
+ const route53Targets = require("aws-cdk-lib/aws-route53-targets");
8
+ class ListenerRule extends constructs.Construct {
9
+ constructor(scope, id, props) {
10
+ super(scope, id);
11
+ this.applicationListenerRule = new elb.ApplicationListenerRule(this, "ListenerRule", {
12
+ listener: props.httpsListener,
13
+ priority: props.listenerPriority,
14
+ conditions: [elb.ListenerCondition.hostHeaders([props.domainName])],
15
+ targetGroups: [props.targetGroup],
16
+ });
17
+ if (props.hostedZone != null) {
18
+ new route53.ARecord(this, "ARecord", {
19
+ zone: props.hostedZone,
20
+ recordName: `${props.domainName}.`,
21
+ target: route53.RecordTarget.fromAlias(new route53Targets.LoadBalancerTarget(props.loadBalancer)),
22
+ });
23
+ }
24
+ }
25
+ }
26
+ exports.ListenerRule = ListenerRule;
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdGVuZXItcnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lY3MvbGlzdGVuZXItcnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBd0M7QUFDeEMsOERBQTZEO0FBQzdELG1EQUFrRDtBQUNsRCxrRUFBaUU7QUFlakUsTUFBYSxZQUFhLFNBQVEsVUFBVSxDQUFDLFNBQVM7SUFTcEQsWUFDRSxLQUEyQixFQUMzQixFQUFVLEVBQ1YsS0FBd0I7UUFFeEIsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxHQUFHLENBQUMsdUJBQXVCLENBQzVELElBQUksRUFDSixjQUFjLEVBQ2Q7WUFDRSxRQUFRLEVBQUUsS0FBSyxDQUFDLGFBQWE7WUFDN0IsUUFBUSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7WUFDaEMsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ25FLFlBQVksRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7U0FDbEMsQ0FDRixDQUFBO1FBRUQsSUFBSSxLQUFLLENBQUMsVUFBVSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzdCLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO2dCQUNuQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFVBQVU7Z0JBQ3RCLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQyxVQUFVLEdBQUc7Z0JBQ2xDLE1BQU0sRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FDcEMsSUFBSSxjQUFjLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUMxRDthQUNGLENBQUMsQ0FBQTtRQUNKLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFyQ0Qsb0NBcUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQgKiBhcyBlbGIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyXCJcbmltcG9ydCAqIGFzIHJvdXRlNTMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzXCJcbmltcG9ydCAqIGFzIHJvdXRlNTNUYXJnZXRzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1My10YXJnZXRzXCJcblxuZXhwb3J0IGludGVyZmFjZSBMaXN0ZW5lclJ1bGVQcm9wcyB7XG4gIGh0dHBzTGlzdGVuZXI6IGVsYi5JQXBwbGljYXRpb25MaXN0ZW5lclxuICBsb2FkQmFsYW5jZXI6IGVsYi5JQXBwbGljYXRpb25Mb2FkQmFsYW5jZXJcbiAgZG9tYWluTmFtZTogc3RyaW5nXG4gIGxpc3RlbmVyUHJpb3JpdHk6IG51bWJlclxuICB0YXJnZXRHcm91cDogZWxiLklBcHBsaWNhdGlvblRhcmdldEdyb3VwXG4gIC8qKlxuICAgKiBJZiAnaG9zdGVkWm9uZScgaXMgYW4gQSByZWNvcmQgZm9yICdkb21haW5OYW1lJyBpcyBjcmVhdGVkIHdpdGhcbiAgICogdGhlICdsb2FkQmFsYW5jZXInIGFzIHRhcmdldFxuICAgKi9cbiAgaG9zdGVkWm9uZT86IHJvdXRlNTMuSUhvc3RlZFpvbmVcbn1cblxuZXhwb3J0IGNsYXNzIExpc3RlbmVyUnVsZSBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBydWxlIGNyZWF0ZWQgaW4gdGhlIEFMQiBMaXN0ZW5lci5cbiAgICpcbiAgICogVXNlIHtAbGluayBlbGIuQXBwbGljYXRpb25MaXN0ZW5lclJ1bGUuYWRkQ29uZGl0aW9ufSB0byBhZGQgW290aGVyIGNvbmRpdGlvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvYXBwbGljYXRpb24vbG9hZC1iYWxhbmNlci1saXN0ZW5lcnMuaHRtbCNydWxlLWNvbmRpdGlvbi10eXBlcylcbiAgICogdGhhbiBIb3N0LWhlYWRlci5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcHBsaWNhdGlvbkxpc3RlbmVyUnVsZTogZWxiLkFwcGxpY2F0aW9uTGlzdGVuZXJSdWxlXG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IExpc3RlbmVyUnVsZVByb3BzLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICB0aGlzLmFwcGxpY2F0aW9uTGlzdGVuZXJSdWxlID0gbmV3IGVsYi5BcHBsaWNhdGlvbkxpc3RlbmVyUnVsZShcbiAgICAgIHRoaXMsXG4gICAgICBcIkxpc3RlbmVyUnVsZVwiLFxuICAgICAge1xuICAgICAgICBsaXN0ZW5lcjogcHJvcHMuaHR0cHNMaXN0ZW5lcixcbiAgICAgICAgcHJpb3JpdHk6IHByb3BzLmxpc3RlbmVyUHJpb3JpdHksXG4gICAgICAgIGNvbmRpdGlvbnM6IFtlbGIuTGlzdGVuZXJDb25kaXRpb24uaG9zdEhlYWRlcnMoW3Byb3BzLmRvbWFpbk5hbWVdKV0sXG4gICAgICAgIHRhcmdldEdyb3VwczogW3Byb3BzLnRhcmdldEdyb3VwXSxcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgaWYgKHByb3BzLmhvc3RlZFpvbmUgIT0gbnVsbCkge1xuICAgICAgbmV3IHJvdXRlNTMuQVJlY29yZCh0aGlzLCBcIkFSZWNvcmRcIiwge1xuICAgICAgICB6b25lOiBwcm9wcy5ob3N0ZWRab25lLFxuICAgICAgICByZWNvcmROYW1lOiBgJHtwcm9wcy5kb21haW5OYW1lfS5gLFxuICAgICAgICB0YXJnZXQ6IHJvdXRlNTMuUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhcbiAgICAgICAgICBuZXcgcm91dGU1M1RhcmdldHMuTG9hZEJhbGFuY2VyVGFyZ2V0KHByb3BzLmxvYWRCYWxhbmNlciksXG4gICAgICAgICksXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,39 @@
1
+ interface Props {
2
+ artifactPushedAndTagUpdated: boolean;
3
+ }
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
+ export declare class EcsUpdateImageArtifactStatus {
36
+ readonly artifactPushedAndTagUpdated: boolean;
37
+ constructor(props: Props);
38
+ }
39
+ export {};
@@ -0,0 +1,41 @@
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=
@@ -0,0 +1,41 @@
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 {};
@@ -0,0 +1,98 @@
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 cdk = require("aws-cdk-lib");
8
+ const start_deploy_handler_1 = require("./start-deploy-handler");
9
+ const status_handler_1 = require("./status-handler");
10
+ /**
11
+ * Dynamically update image of an ECS Service outside CDK.
12
+ *
13
+ * This construct sets up a Lambda Function that can be invoked
14
+ * from the CD pipeline to update the ECS Service to a new image.
15
+ *
16
+ * To keep resources in sync, a Secret is used to keep track of
17
+ * the current image, which is dynamically resolved in the CloudFormation
18
+ * templates to avoid infrastructure changes to cause an older/different
19
+ * image to be used.
20
+ */
21
+ class EcsUpdateImage extends constructs.Construct {
22
+ constructor(scope, id, props) {
23
+ super(scope, id);
24
+ const account = cdk.Stack.of(this).account;
25
+ const region = cdk.Stack.of(this).region;
26
+ const roleToBeAssumed = new iam.Role(this, "Role", {
27
+ roleName: props.roleName,
28
+ assumedBy: new iam.ArnPrincipal(props.callerRoleArn),
29
+ });
30
+ const startDeployFn = new lambda.Function(this, "StartDeployFunction", {
31
+ functionName: props.startDeployFunctionName,
32
+ code: new lambda.InlineCode(`exports.handler = ${start_deploy_handler_1.startDeployHandler.toString()};`),
33
+ runtime: lambda.Runtime.NODEJS_16_X,
34
+ handler: "index.handler",
35
+ timeout: cdk.Duration.seconds(60),
36
+ environment: {
37
+ CLUSTER_NAME: props.cluster.clusterName,
38
+ SERVICE_NAME: props.service == null ? "" : props.service.serviceName,
39
+ REPOSITORY_URL: props.ecrRepository.repositoryUri,
40
+ ECR_TAG_SECRET_ARN: props.tagContainer.secretArn,
41
+ },
42
+ reservedConcurrentExecutions: 1,
43
+ });
44
+ startDeployFn.grantInvoke(roleToBeAssumed);
45
+ props.tagContainer.grantUpdate(startDeployFn);
46
+ if (props.service != null) {
47
+ startDeployFn.addToRolePolicy(new iam.PolicyStatement({
48
+ actions: [
49
+ "ecs:DeregisterTaskDefinition",
50
+ "ecs:DescribeServices",
51
+ "ecs:DescribeTaskDefinition",
52
+ "ecs:DescribeTasks",
53
+ "ecs:ListTasks",
54
+ "ecs:ListTaskDefinitions",
55
+ "ecs:RegisterTaskDefinition",
56
+ ],
57
+ resources: ["*"],
58
+ }));
59
+ startDeployFn.addToRolePolicy(new iam.PolicyStatement({
60
+ actions: ["ecs:UpdateService"],
61
+ resources: [
62
+ `arn:aws:ecs:${region}:${account}:service/${props.cluster.clusterName}/${props.service.serviceName}`,
63
+ ],
64
+ }));
65
+ }
66
+ if (props.taskRole != null) {
67
+ props.taskRole.grantPassRole(startDeployFn.role);
68
+ }
69
+ if (props.executionRole != null) {
70
+ props.executionRole.grantPassRole(startDeployFn.role);
71
+ }
72
+ const statusFn = new lambda.Function(this, "StatusFunction", {
73
+ functionName: props.statusFunctionName,
74
+ code: new lambda.InlineCode(`exports.handler = ${status_handler_1.statusHandler.toString()};`),
75
+ runtime: lambda.Runtime.NODEJS_16_X,
76
+ handler: "index.handler",
77
+ timeout: cdk.Duration.seconds(60),
78
+ environment: {
79
+ CLUSTER_NAME: props.cluster.clusterName,
80
+ SERVICE_NAME: props.service == null ? "" : props.service.serviceName,
81
+ },
82
+ });
83
+ statusFn.grantInvoke(roleToBeAssumed);
84
+ statusFn.addToRolePolicy(new iam.PolicyStatement({
85
+ actions: [
86
+ "ecs:DeregisterTaskDefinition",
87
+ "ecs:DescribeServices",
88
+ "ecs:DescribeTaskDefinition",
89
+ "ecs:DescribeTasks",
90
+ "ecs:ListTasks",
91
+ "ecs:ListTaskDefinitions",
92
+ ],
93
+ resources: ["*"],
94
+ }));
95
+ }
96
+ }
97
+ exports.EcsUpdateImage = EcsUpdateImage;
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNzLXVwZGF0ZS1pbWFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lY3MtdXBkYXRlLWltYWdlL2Vjcy11cGRhdGUtaW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQXdDO0FBR3hDLDJDQUEwQztBQUMxQyxpREFBZ0Q7QUFDaEQsbUNBQWtDO0FBQ2xDLGlFQUEyRDtBQUMzRCxxREFBZ0Q7QUF5QmhEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFhLGNBQWUsU0FBUSxVQUFVLENBQUMsU0FBUztJQUN0RCxZQUFZLEtBQTJCLEVBQUUsRUFBVSxFQUFFLEtBQVk7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUE7UUFDMUMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFBO1FBRXhDLE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ2pELFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixTQUFTLEVBQUUsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7U0FDckQsQ0FBQyxDQUFBO1FBRUYsTUFBTSxhQUFhLEdBQUcsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRTtZQUNyRSxZQUFZLEVBQUUsS0FBSyxDQUFDLHVCQUF1QjtZQUMzQyxJQUFJLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUN6QixxQkFBcUIseUNBQWtCLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FDdEQ7WUFDRCxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxX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QkFBc0I7Z0JBQ3RCLDRCQUE0QjtnQkFDNUIsbUJBQW1CO2dCQUNuQixlQUFlO2dCQUNmLHlCQUF5QjthQUMxQjtZQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNqQixDQUFDLENBQ0gsQ0FBQTtJQUNILENBQUM7Q0FDRjtBQWhHRCx3Q0FnR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjb25zdHJ1Y3RzIGZyb20gXCJjb25zdHJ1Y3RzXCJcbmltcG9ydCAqIGFzIGVjciBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjclwiXG5pbXBvcnQgKiBhcyBlY3MgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3NcIlxuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCJcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiXG5pbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCB7IHN0YXJ0RGVwbG95SGFuZGxlciB9IGZyb20gXCIuL3N0YXJ0LWRlcGxveS1oYW5kbGVyXCJcbmltcG9ydCB7IHN0YXR1c0hhbmRsZXIgfSBmcm9tIFwiLi9zdGF0dXMtaGFuZGxlclwiXG5pbXBvcnQgeyBFY3NVcGRhdGVJbWFnZVRhZyB9IGZyb20gXCIuL3RhZ1wiXG5cbmludGVyZmFjZSBQcm9wcyB7XG4gIGNsdXN0ZXI6IGVjcy5JQ2x1c3RlclxuICBzZXJ2aWNlPzogZWNzLklTZXJ2aWNlXG4gIHRhc2tSb2xlPzogaWFtLklSb2xlXG4gIGV4ZWN1dGlvblJvbGU/OiBpYW0uSVJvbGVcbiAgLyoqXG4gICAqIFRoZSByb2xlIHRoYXQgd2lsbCBiZSBncmFudGVkIHBlcm1pc3Npb24gdG8gYXNzdW1lIHRoZSBkZXBsb3lcbiAgICogcm9sZS4gVGhpcyByb2xlIG11c3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFzc3VtZSB0aGUgZGVwbG95IHJvbGUuXG4gICAqL1xuICBjYWxsZXJSb2xlQXJuOiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoZSBuYW1lIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgZGVwbG95IHJvbGUuIFRoaXMgaXMgdGhlIHJvbGVcbiAgICogdGhhdCB0aGUgY2FsbGVyIHdpbGwgYXNzdW1lIGluIG9yZGVyIHRvIGhhdmUgcGVybWlzc2lvbiB0byBpbnZva2VcbiAgICogdGhlIExhbWJkYSBGdW5jdGlvbnMuXG4gICAqL1xuICByb2xlTmFtZTogc3RyaW5nXG4gIHN0YXJ0RGVwbG95RnVuY3Rpb25OYW1lOiBzdHJpbmdcbiAgc3RhdHVzRnVuY3Rpb25OYW1lOiBzdHJpbmdcbiAgdGFnQ29udGFpbmVyOiBFY3NVcGRhdGVJbWFnZVRhZ1xuICBlY3JSZXBvc2l0b3J5OiBlY3IuSVJlcG9zaXRvcnlcbn1cblxuLyoqXG4gKiBEeW5hbWljYWxseSB1cGRhdGUgaW1hZ2Ugb2YgYW4gRUNTIFNlcnZpY2Ugb3V0c2lkZSBDREsuXG4gKlxuICogVGhpcyBjb25zdHJ1Y3Qgc2V0cyB1cCBhIExhbWJkYSBGdW5jdGlvbiB0aGF0IGNhbiBiZSBpbnZva2VkXG4gKiBmcm9tIHRoZSBDRCBwaXBlbGluZSB0byB1cGRhdGUgdGhlIEVDUyBTZXJ2aWNlIHRvIGEgbmV3IGltYWdlLlxuICpcbiAqIFRvIGtlZXAgcmVzb3VyY2VzIGluIHN5bmMsIGEgU2VjcmV0IGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZlxuICogdGhlIGN1cnJlbnQgaW1hZ2UsIHdoaWNoIGlzIGR5bmFtaWNhbGx5IHJlc29sdmVkIGluIHRoZSBDbG91ZEZvcm1hdGlvblxuICogdGVtcGxhdGVzIHRvIGF2b2lkIGluZnJhc3RydWN0dXJlIGNoYW5nZXMgdG8gY2F1c2UgYW4gb2xkZXIvZGlmZmVyZW50XG4gKiBpbWFnZSB0byBiZSB1c2VkLlxuICovXG5leHBvcnQgY2xhc3MgRWNzVXBkYXRlSW1hZ2UgZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgY29uc3QgYWNjb3VudCA9IGNkay5TdGFjay5vZih0aGlzKS5hY2NvdW50XG4gICAgY29uc3QgcmVnaW9uID0gY2RrLlN0YWNrLm9mKHRoaXMpLnJlZ2lvblxuXG4gICAgY29uc3Qgcm9sZVRvQmVBc3N1bWVkID0gbmV3IGlhbS5Sb2xlKHRoaXMsIFwiUm9sZVwiLCB7XG4gICAgICByb2xlTmFtZTogcHJvcHMucm9sZU5hbWUsXG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uQXJuUHJpbmNpcGFsKHByb3BzLmNhbGxlclJvbGVBcm4pLFxuICAgIH0pXG5cbiAgICBjb25zdCBzdGFydERlcGxveUZuID0gbmV3IGxhbWJkYS5GdW5jdGlvbih0aGlzLCBcIlN0YXJ0RGVwbG95RnVuY3Rpb25cIiwge1xuICAgICAgZnVuY3Rpb25OYW1lOiBwcm9wcy5zdGFydERlcGxveUZ1bmN0aW9uTmFtZSxcbiAgICAgIGNvZGU6IG5ldyBsYW1iZGEuSW5saW5lQ29kZShcbiAgICAgICAgYGV4cG9ydHMuaGFuZGxlciA9ICR7c3RhcnREZXBsb3lIYW5kbGVyLnRvU3RyaW5nKCl9O2AsXG4gICAgICApLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE2X1gsXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIENMVVNURVJfTkFNRTogcHJvcHMuY2x1c3Rlci5jbHVzdGVyTmFtZSxcbiAgICAgICAgU0VSVklDRV9OQU1FOiBwcm9wcy5zZXJ2aWNlID09IG51bGwgPyBcIlwiIDogcHJvcHMuc2VydmljZS5zZXJ2aWNlTmFtZSxcbiAgICAgICAgUkVQT1NJVE9SWV9VUkw6IHByb3BzLmVjclJlcG9zaXRvcnkucmVwb3NpdG9yeVVyaSxcbiAgICAgICAgRUNSX1RBR19TRUNSRVRfQVJOOiBwcm9wcy50YWdDb250YWluZXIuc2VjcmV0QXJuLFxuICAgICAgfSxcbiAgICAgIHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM6IDEsXG4gICAgfSlcblxuICAgIHN0YXJ0RGVwbG95Rm4uZ3JhbnRJbnZva2Uocm9sZVRvQmVBc3N1bWVkKVxuICAgIHByb3BzLnRhZ0NvbnRhaW5lci5ncmFudFVwZGF0ZShzdGFydERlcGxveUZuKVxuXG4gICAgaWYgKHByb3BzLnNlcnZpY2UgIT0gbnVsbCkge1xuICAgICAgc3RhcnREZXBsb3lGbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICBcImVjczpEZXJlZ2lzdGVyVGFza0RlZmluaXRpb25cIixcbiAgICAgICAgICAgIFwiZWNzOkRlc2NyaWJlU2VydmljZXNcIixcbiAgICAgICAgICAgIFwiZWNzOkRlc2NyaWJlVGFza0RlZmluaXRpb25cIixcbiAgICAgICAgICAgIFwiZWNzOkRlc2NyaWJlVGFza3NcIixcbiAgICAgICAgICAgIFwiZWNzOkxpc3RUYXNrc1wiLFxuICAgICAgICAgICAgXCJlY3M6TGlzdFRhc2tEZWZpbml0aW9uc1wiLFxuICAgICAgICAgICAgXCJlY3M6UmVnaXN0ZXJUYXNrRGVmaW5pdGlvblwiLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgICB9KSxcbiAgICAgIClcblxuICAgICAgc3RhcnREZXBsb3lGbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbXCJlY3M6VXBkYXRlU2VydmljZVwiXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgIGBhcm46YXdzOmVjczoke3JlZ2lvbn06JHthY2NvdW50fTpzZXJ2aWNlLyR7cHJvcHMuY2x1c3Rlci5jbHVzdGVyTmFtZX0vJHtwcm9wcy5zZXJ2aWNlLnNlcnZpY2VOYW1lfWAsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnRhc2tSb2xlICE9IG51bGwpIHtcbiAgICAgIHByb3BzLnRhc2tSb2xlLmdyYW50UGFzc1JvbGUoc3RhcnREZXBsb3lGbi5yb2xlISlcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZXhlY3V0aW9uUm9sZSAhPSBudWxsKSB7XG4gICAgICBwcm9wcy5leGVjdXRpb25Sb2xlLmdyYW50UGFzc1JvbGUoc3RhcnREZXBsb3lGbi5yb2xlISlcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXNGbiA9IG5ldyBsYW1iZGEuRnVuY3Rpb24odGhpcywgXCJTdGF0dXNGdW5jdGlvblwiLCB7XG4gICAgICBmdW5jdGlvbk5hbWU6IHByb3BzLnN0YXR1c0Z1bmN0aW9uTmFtZSxcbiAgICAgIGNvZGU6IG5ldyBsYW1iZGEuSW5saW5lQ29kZShcbiAgICAgICAgYGV4cG9ydHMuaGFuZGxlciA9ICR7c3RhdHVzSGFuZGxlci50b1N0cmluZygpfTtgLFxuICAgICAgKSxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNl9YLFxuICAgICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBDTFVTVEVSX05BTUU6IHByb3BzLmNsdXN0ZXIuY2x1c3Rlck5hbWUsXG4gICAgICAgIFNFUlZJQ0VfTkFNRTogcHJvcHMuc2VydmljZSA9PSBudWxsID8gXCJcIiA6IHByb3BzLnNlcnZpY2Uuc2VydmljZU5hbWUsXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICBzdGF0dXNGbi5ncmFudEludm9rZShyb2xlVG9CZUFzc3VtZWQpXG5cbiAgICBzdGF0dXNGbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcImVjczpEZXJlZ2lzdGVyVGFza0RlZmluaXRpb25cIixcbiAgICAgICAgICBcImVjczpEZXNjcmliZVNlcnZpY2VzXCIsXG4gICAgICAgICAgXCJlY3M6RGVzY3JpYmVUYXNrRGVmaW5pdGlvblwiLFxuICAgICAgICAgIFwiZWNzOkRlc2NyaWJlVGFza3NcIixcbiAgICAgICAgICBcImVjczpMaXN0VGFza3NcIixcbiAgICAgICAgICBcImVjczpMaXN0VGFza0RlZmluaXRpb25zXCIsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgIH0pLFxuICAgIClcbiAgfVxufVxuIl19
@@ -0,0 +1,3 @@
1
+ export { EcsUpdateImageArtifactStatus } from "./artifact-status";
2
+ export { EcsUpdateImage } from "./ecs-update-image";
3
+ export { EcsUpdateImageTag } from "./tag";
@@ -0,0 +1,10 @@
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=
@@ -0,0 +1,6 @@
1
+ import type { Handler } from "aws-lambda";
2
+ interface ExpectedInput {
3
+ tag: string;
4
+ }
5
+ export declare const startDeployHandler: Handler<Partial<ExpectedInput>>;
6
+ export {};