@cloudsnorkel/cdk-github-runners 0.11.2 → 0.11.4
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.
- package/.gitattributes +1 -0
- package/.jsii +21 -20
- package/API.md +5 -5
- package/assets/delete-failed-runner.lambda/index.js +24 -32
- package/assets/idle-runner-repear.lambda/index.js +29 -37
- package/assets/image-builders/aws-image-builder/delete-ami.lambda/index.js +14 -28
- package/assets/image-builders/aws-image-builder/filter-failed-builds.lambda/index.js +4 -14
- package/assets/image-builders/aws-image-builder/reaper.lambda/index.js +18 -30
- package/assets/image-builders/aws-image-builder/versioner.lambda/index.js +10 -16
- package/assets/providers/ami-root-device.lambda/index.js +12 -23
- package/assets/providers/build-image.lambda/index.js +16 -24
- package/assets/providers/update-lambda.lambda/index.js +5 -15
- package/assets/setup.lambda/index.html +1 -1
- package/assets/setup.lambda/index.js +4 -4
- package/assets/status.lambda/index.js +48 -55
- package/assets/token-retriever.lambda/index.js +24 -32
- package/assets/webhook-handler.lambda/index.js +32 -42
- package/lib/access.js +1 -1
- package/lib/delete-failed-runner-function.js +2 -2
- package/lib/idle-runner-repear-function.js +2 -2
- package/lib/idle-runner-repear.lambda.js +6 -6
- package/lib/image-builders/api.js +1 -1
- package/lib/image-builders/aws-image-builder/builder.js +1 -1
- package/lib/image-builders/aws-image-builder/delete-ami-function.js +2 -2
- package/lib/image-builders/aws-image-builder/delete-ami.lambda.js +11 -11
- package/lib/image-builders/aws-image-builder/deprecated/ami.js +1 -1
- package/lib/image-builders/aws-image-builder/deprecated/container.js +1 -1
- package/lib/image-builders/aws-image-builder/deprecated/linux-components.js +1 -1
- package/lib/image-builders/aws-image-builder/deprecated/windows-components.js +1 -1
- package/lib/image-builders/aws-image-builder/filter-failed-builds-function.js +2 -2
- package/lib/image-builders/aws-image-builder/filter-failed-builds.lambda.js +5 -5
- package/lib/image-builders/aws-image-builder/reaper-function.js +2 -2
- package/lib/image-builders/aws-image-builder/reaper.lambda.js +15 -13
- package/lib/image-builders/aws-image-builder/versioner-function.js +2 -2
- package/lib/image-builders/aws-image-builder/versioner.lambda.js +9 -9
- package/lib/image-builders/codebuild-deprecated.js +1 -1
- package/lib/image-builders/components.d.ts +2 -0
- package/lib/image-builders/components.js +5 -43
- package/lib/image-builders/static.js +1 -1
- package/lib/lambda-helpers.js +5 -5
- package/lib/providers/ami-root-device-function.js +2 -2
- package/lib/providers/ami-root-device.lambda.js +8 -7
- package/lib/providers/build-image-function.js +2 -2
- package/lib/providers/build-image.lambda.js +15 -13
- package/lib/providers/codebuild.d.ts +2 -2
- package/lib/providers/codebuild.js +5 -5
- package/lib/providers/common.js +3 -3
- package/lib/providers/ec2.js +2 -2
- package/lib/providers/ecs.d.ts +1 -1
- package/lib/providers/ecs.js +4 -4
- package/lib/providers/fargate.js +2 -2
- package/lib/providers/lambda.js +2 -2
- package/lib/providers/update-lambda-function.js +2 -2
- package/lib/providers/update-lambda.lambda.js +6 -6
- package/lib/runner.js +5 -2
- package/lib/secrets.js +1 -1
- package/lib/setup-function.js +2 -2
- package/lib/status-function.js +2 -2
- package/lib/status.lambda.js +20 -17
- package/lib/token-retriever-function.js +2 -2
- package/lib/webhook-handler-function.js +2 -2
- package/lib/webhook-handler.lambda.js +5 -5
- package/package.json +17 -9
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
6
|
var __export = (target, all) => {
|
|
9
7
|
for (var name in all)
|
|
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
15
|
}
|
|
18
16
|
return to;
|
|
19
17
|
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
19
|
|
|
30
20
|
// src/image-builders/aws-image-builder/delete-ami.lambda.ts
|
|
@@ -33,11 +23,11 @@ __export(delete_ami_lambda_exports, {
|
|
|
33
23
|
handler: () => handler
|
|
34
24
|
});
|
|
35
25
|
module.exports = __toCommonJS(delete_ami_lambda_exports);
|
|
36
|
-
var
|
|
26
|
+
var import_client_ec2 = require("@aws-sdk/client-ec2");
|
|
37
27
|
|
|
38
28
|
// src/lambda-helpers.ts
|
|
39
|
-
var
|
|
40
|
-
var sm = new
|
|
29
|
+
var import_client_secrets_manager = require("@aws-sdk/client-secrets-manager");
|
|
30
|
+
var sm = new import_client_secrets_manager.SecretsManagerClient();
|
|
41
31
|
async function customResourceRespond(event, responseStatus, reason, physicalResourceId, data) {
|
|
42
32
|
const responseBody = JSON.stringify({
|
|
43
33
|
Status: responseStatus,
|
|
@@ -73,10 +63,9 @@ async function customResourceRespond(event, responseStatus, reason, physicalReso
|
|
|
73
63
|
}
|
|
74
64
|
|
|
75
65
|
// src/image-builders/aws-image-builder/delete-ami.lambda.ts
|
|
76
|
-
var ec2 = new
|
|
66
|
+
var ec2 = new import_client_ec2.EC2Client();
|
|
77
67
|
async function deleteAmis(launchTemplateId, stackName, builderName, deleteAll) {
|
|
78
|
-
|
|
79
|
-
const images = await ec2.describeImages({
|
|
68
|
+
const images = await ec2.send(new import_client_ec2.DescribeImagesCommand({
|
|
80
69
|
Owners: ["self"],
|
|
81
70
|
Filters: [
|
|
82
71
|
{
|
|
@@ -88,24 +77,21 @@ async function deleteAmis(launchTemplateId, stackName, builderName, deleteAll) {
|
|
|
88
77
|
Values: [builderName]
|
|
89
78
|
}
|
|
90
79
|
]
|
|
91
|
-
})
|
|
80
|
+
}));
|
|
92
81
|
let imagesToDelete = images.Images ?? [];
|
|
93
82
|
console.log(`Found ${imagesToDelete.length} AMIs`);
|
|
94
83
|
console.log(JSON.stringify(imagesToDelete.map((i) => i.ImageId)));
|
|
95
84
|
if (!deleteAll) {
|
|
96
|
-
const launchTemplates = await ec2.
|
|
85
|
+
const launchTemplates = await ec2.send(new import_client_ec2.DescribeLaunchTemplateVersionsCommand({
|
|
97
86
|
LaunchTemplateId: launchTemplateId,
|
|
98
87
|
Versions: ["$Default"]
|
|
99
|
-
})
|
|
88
|
+
}));
|
|
100
89
|
if (!launchTemplates.LaunchTemplateVersions) {
|
|
101
90
|
console.error(`Unable to describe launch template ${launchTemplateId}`);
|
|
102
91
|
return;
|
|
103
92
|
}
|
|
104
93
|
const launchTemplate = launchTemplates.LaunchTemplateVersions[0];
|
|
105
|
-
imagesToDelete = imagesToDelete.filter((i) =>
|
|
106
|
-
var _a2;
|
|
107
|
-
return i.ImageId != ((_a2 = launchTemplate.LaunchTemplateData) == null ? void 0 : _a2.ImageId);
|
|
108
|
-
});
|
|
94
|
+
imagesToDelete = imagesToDelete.filter((i) => i.ImageId != launchTemplate.LaunchTemplateData?.ImageId);
|
|
109
95
|
imagesToDelete = imagesToDelete.filter((i) => i.CreationDate && Date.parse(i.CreationDate) < Date.now() - 1e3 * 60 * 60 * 48);
|
|
110
96
|
console.log(`${imagesToDelete.length} AMIs left after filtering by date and excluding AMI used by launch template`);
|
|
111
97
|
}
|
|
@@ -115,15 +101,15 @@ async function deleteAmis(launchTemplateId, stackName, builderName, deleteAll) {
|
|
|
115
101
|
continue;
|
|
116
102
|
}
|
|
117
103
|
console.log(`Deregistering ${image.ImageId}`);
|
|
118
|
-
await ec2.
|
|
104
|
+
await ec2.send(new import_client_ec2.DeregisterImageCommand({
|
|
119
105
|
ImageId: image.ImageId
|
|
120
|
-
})
|
|
106
|
+
}));
|
|
121
107
|
for (const blockMapping of image.BlockDeviceMappings ?? []) {
|
|
122
|
-
if (
|
|
108
|
+
if (blockMapping.Ebs?.SnapshotId) {
|
|
123
109
|
console.log(`Deleting ${blockMapping.Ebs.SnapshotId}`);
|
|
124
|
-
await ec2.
|
|
110
|
+
await ec2.send(new import_client_ec2.DeleteSnapshotCommand({
|
|
125
111
|
SnapshotId: blockMapping.Ebs.SnapshotId
|
|
126
|
-
})
|
|
112
|
+
}));
|
|
127
113
|
}
|
|
128
114
|
}
|
|
129
115
|
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
6
|
var __export = (target, all) => {
|
|
9
7
|
for (var name in all)
|
|
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
15
|
}
|
|
18
16
|
return to;
|
|
19
17
|
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
19
|
|
|
30
20
|
// src/image-builders/aws-image-builder/filter-failed-builds.lambda.ts
|
|
@@ -33,17 +23,17 @@ __export(filter_failed_builds_lambda_exports, {
|
|
|
33
23
|
handler: () => handler
|
|
34
24
|
});
|
|
35
25
|
module.exports = __toCommonJS(filter_failed_builds_lambda_exports);
|
|
36
|
-
var
|
|
37
|
-
var sns = new
|
|
26
|
+
var import_client_sns = require("@aws-sdk/client-sns");
|
|
27
|
+
var sns = new import_client_sns.SNSClient();
|
|
38
28
|
async function handler(event) {
|
|
39
29
|
console.log(JSON.stringify(event));
|
|
40
30
|
for (const record of event.Records) {
|
|
41
31
|
let message = JSON.parse(record.Sns.Message);
|
|
42
32
|
if (message.state.status === "FAILED") {
|
|
43
|
-
await sns.
|
|
33
|
+
await sns.send(new import_client_sns.PublishCommand({
|
|
44
34
|
TopicArn: process.env.TARGET_TOPIC_ARN,
|
|
45
35
|
Message: record.Sns.Message
|
|
46
|
-
})
|
|
36
|
+
}));
|
|
47
37
|
}
|
|
48
38
|
}
|
|
49
39
|
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
6
|
var __export = (target, all) => {
|
|
9
7
|
for (var name in all)
|
|
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
15
|
}
|
|
18
16
|
return to;
|
|
19
17
|
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
19
|
|
|
30
20
|
// src/image-builders/aws-image-builder/reaper.lambda.ts
|
|
@@ -33,10 +23,12 @@ __export(reaper_lambda_exports, {
|
|
|
33
23
|
handler: () => handler
|
|
34
24
|
});
|
|
35
25
|
module.exports = __toCommonJS(reaper_lambda_exports);
|
|
36
|
-
var
|
|
37
|
-
var
|
|
38
|
-
var
|
|
39
|
-
var
|
|
26
|
+
var import_client_ec2 = require("@aws-sdk/client-ec2");
|
|
27
|
+
var import_client_ecr = require("@aws-sdk/client-ecr");
|
|
28
|
+
var import_client_imagebuilder = require("@aws-sdk/client-imagebuilder");
|
|
29
|
+
var ec2 = new import_client_ec2.EC2Client();
|
|
30
|
+
var ecr = new import_client_ecr.ECRClient();
|
|
31
|
+
var ib = new import_client_imagebuilder.ImagebuilderClient();
|
|
40
32
|
async function iterateImageVersions(imageName) {
|
|
41
33
|
let result = [];
|
|
42
34
|
let params = {
|
|
@@ -49,7 +41,7 @@ async function iterateImageVersions(imageName) {
|
|
|
49
41
|
]
|
|
50
42
|
};
|
|
51
43
|
while (true) {
|
|
52
|
-
const response = await ib.
|
|
44
|
+
const response = await ib.send(new import_client_imagebuilder.ListImagesCommand(params));
|
|
53
45
|
if (response.imageVersionList) {
|
|
54
46
|
for (const imageVersion of response.imageVersionList) {
|
|
55
47
|
if (imageVersion.arn) {
|
|
@@ -65,16 +57,15 @@ async function iterateImageVersions(imageName) {
|
|
|
65
57
|
return result;
|
|
66
58
|
}
|
|
67
59
|
async function iterateImageBuildVersions(imageVersionArn) {
|
|
68
|
-
var _a;
|
|
69
60
|
let result = [];
|
|
70
61
|
let params = {
|
|
71
62
|
imageVersionArn
|
|
72
63
|
};
|
|
73
64
|
while (true) {
|
|
74
|
-
const response = await ib.
|
|
65
|
+
const response = await ib.send(new import_client_imagebuilder.ListImageBuildVersionsCommand(params));
|
|
75
66
|
if (response.imageSummaryList) {
|
|
76
67
|
for (const imageBuildVersion of response.imageSummaryList) {
|
|
77
|
-
if (
|
|
68
|
+
if (imageBuildVersion.state?.status !== "AVAILABLE") {
|
|
78
69
|
console.log(`${imageBuildVersion.arn} is still being created, so we can't delete it`);
|
|
79
70
|
continue;
|
|
80
71
|
}
|
|
@@ -89,7 +80,6 @@ async function iterateImageBuildVersions(imageVersionArn) {
|
|
|
89
80
|
return result;
|
|
90
81
|
}
|
|
91
82
|
async function amisGone(amis) {
|
|
92
|
-
var _a;
|
|
93
83
|
if (!amis) {
|
|
94
84
|
console.log("No AMIs found, so we can delete the image version build");
|
|
95
85
|
return true;
|
|
@@ -101,10 +91,10 @@ async function amisGone(amis) {
|
|
|
101
91
|
continue;
|
|
102
92
|
}
|
|
103
93
|
try {
|
|
104
|
-
const response = await ec2.
|
|
94
|
+
const response = await ec2.send(new import_client_ec2.DescribeImagesCommand({
|
|
105
95
|
ImageIds: [ami.image]
|
|
106
|
-
})
|
|
107
|
-
if (
|
|
96
|
+
}));
|
|
97
|
+
if (response.Images?.length ?? 0 > 0) {
|
|
108
98
|
console.log("AMI still available, so we can't delete it");
|
|
109
99
|
return false;
|
|
110
100
|
}
|
|
@@ -119,7 +109,6 @@ async function amisGone(amis) {
|
|
|
119
109
|
return true;
|
|
120
110
|
}
|
|
121
111
|
async function dockerImagesGone(dockerImages) {
|
|
122
|
-
var _a;
|
|
123
112
|
if (!dockerImages) {
|
|
124
113
|
console.log("No docker images, so we can delete the image version build");
|
|
125
114
|
return true;
|
|
@@ -133,12 +122,12 @@ async function dockerImagesGone(dockerImages) {
|
|
|
133
122
|
}
|
|
134
123
|
console.log(`Checking if ${repoName}:${version} exists`);
|
|
135
124
|
try {
|
|
136
|
-
const response = await ecr.
|
|
125
|
+
const response = await ecr.send(new import_client_ecr.DescribeImagesCommand({
|
|
137
126
|
repositoryName: repoName,
|
|
138
127
|
imageIds: [{ imageTag: version }]
|
|
139
|
-
})
|
|
128
|
+
}));
|
|
140
129
|
if (response.imageDetails && response.imageDetails.length > 0) {
|
|
141
|
-
if (
|
|
130
|
+
if (response.imageDetails[0].imageTags?.includes("latest")) {
|
|
142
131
|
console.log(`Docker image ${repoName}:${version} still available and tagged latest, so we can't delete it`);
|
|
143
132
|
return false;
|
|
144
133
|
}
|
|
@@ -155,18 +144,17 @@ async function dockerImagesGone(dockerImages) {
|
|
|
155
144
|
return true;
|
|
156
145
|
}
|
|
157
146
|
async function handler(event, _context) {
|
|
158
|
-
var _a, _b;
|
|
159
147
|
for (const imageVersion of await iterateImageVersions(event.RecipeName)) {
|
|
160
148
|
for (const imageBuildVersion of await iterateImageBuildVersions(imageVersion)) {
|
|
161
149
|
if (!imageBuildVersion.arn) {
|
|
162
150
|
continue;
|
|
163
151
|
}
|
|
164
152
|
console.log(`Checking ${imageBuildVersion.name}/${imageBuildVersion.version}`);
|
|
165
|
-
if (await amisGone(
|
|
153
|
+
if (await amisGone(imageBuildVersion.outputResources?.amis) && await dockerImagesGone(imageBuildVersion.outputResources?.containers)) {
|
|
166
154
|
console.log("Deleting image version build", imageBuildVersion.arn);
|
|
167
|
-
await ib.
|
|
155
|
+
await ib.send(new import_client_imagebuilder.DeleteImageCommand({
|
|
168
156
|
imageBuildVersionArn: imageBuildVersion.arn
|
|
169
|
-
})
|
|
157
|
+
}));
|
|
170
158
|
}
|
|
171
159
|
}
|
|
172
160
|
}
|
|
@@ -2513,12 +2513,12 @@ __export(versioner_lambda_exports, {
|
|
|
2513
2513
|
increaseVersion: () => increaseVersion
|
|
2514
2514
|
});
|
|
2515
2515
|
module.exports = __toCommonJS(versioner_lambda_exports);
|
|
2516
|
-
var
|
|
2516
|
+
var import_client_imagebuilder = require("@aws-sdk/client-imagebuilder");
|
|
2517
2517
|
var import_semver = __toESM(require_semver2());
|
|
2518
2518
|
|
|
2519
2519
|
// src/lambda-helpers.ts
|
|
2520
|
-
var
|
|
2521
|
-
var sm = new
|
|
2520
|
+
var import_client_secrets_manager = require("@aws-sdk/client-secrets-manager");
|
|
2521
|
+
var sm = new import_client_secrets_manager.SecretsManagerClient();
|
|
2522
2522
|
async function customResourceRespond(event, responseStatus, reason, physicalResourceId, data) {
|
|
2523
2523
|
const responseBody = JSON.stringify({
|
|
2524
2524
|
Status: responseStatus,
|
|
@@ -2554,7 +2554,7 @@ async function customResourceRespond(event, responseStatus, reason, physicalReso
|
|
|
2554
2554
|
}
|
|
2555
2555
|
|
|
2556
2556
|
// src/image-builders/aws-image-builder/versioner.lambda.ts
|
|
2557
|
-
var ib = new
|
|
2557
|
+
var ib = new import_client_imagebuilder.ImagebuilderClient();
|
|
2558
2558
|
function increaseVersion(allVersions) {
|
|
2559
2559
|
let version = (0, import_semver.maxSatisfying)(allVersions, ">=0.0.0");
|
|
2560
2560
|
if (version === null) {
|
|
@@ -2581,13 +2581,13 @@ async function handler(event, context) {
|
|
|
2581
2581
|
case "Component": {
|
|
2582
2582
|
let result = {};
|
|
2583
2583
|
do {
|
|
2584
|
-
result = await ib.
|
|
2584
|
+
result = await ib.send(new import_client_imagebuilder.ListComponentsCommand({
|
|
2585
2585
|
filters: [{
|
|
2586
2586
|
name: "name",
|
|
2587
2587
|
values: [objectName]
|
|
2588
2588
|
}],
|
|
2589
2589
|
nextToken: result.nextToken
|
|
2590
|
-
})
|
|
2590
|
+
}));
|
|
2591
2591
|
allVersions = allVersions.concat(result.componentVersionList.map((i) => i.version || "1.0.0"));
|
|
2592
2592
|
} while (result.nextToken);
|
|
2593
2593
|
break;
|
|
@@ -2595,34 +2595,28 @@ async function handler(event, context) {
|
|
|
2595
2595
|
case "ImageRecipe": {
|
|
2596
2596
|
let result = {};
|
|
2597
2597
|
do {
|
|
2598
|
-
result = await ib.
|
|
2598
|
+
result = await ib.send(new import_client_imagebuilder.ListImageRecipesCommand({
|
|
2599
2599
|
filters: [{
|
|
2600
2600
|
name: "name",
|
|
2601
2601
|
values: [objectName]
|
|
2602
2602
|
}],
|
|
2603
2603
|
nextToken: result.nextToken
|
|
2604
|
-
}).promise();
|
|
2605
|
-
allVersions = allVersions.concat(result.imageRecipeSummaryList.map((i) => {
|
|
2606
|
-
var _a;
|
|
2607
|
-
return ((_a = i.arn) == null ? void 0 : _a.split("/").pop()) || "1.0.0";
|
|
2608
2604
|
}));
|
|
2605
|
+
allVersions = allVersions.concat(result.imageRecipeSummaryList.map((i) => i.arn?.split("/").pop() || "1.0.0"));
|
|
2609
2606
|
} while (result.nextToken);
|
|
2610
2607
|
break;
|
|
2611
2608
|
}
|
|
2612
2609
|
case "ContainerRecipe": {
|
|
2613
2610
|
let result = {};
|
|
2614
2611
|
do {
|
|
2615
|
-
result = await ib.
|
|
2612
|
+
result = await ib.send(new import_client_imagebuilder.ListContainerRecipesCommand({
|
|
2616
2613
|
filters: [{
|
|
2617
2614
|
name: "name",
|
|
2618
2615
|
values: [objectName]
|
|
2619
2616
|
}],
|
|
2620
2617
|
nextToken: result.nextToken
|
|
2621
|
-
}).promise();
|
|
2622
|
-
allVersions = allVersions.concat(result.containerRecipeSummaryList.map((i) => {
|
|
2623
|
-
var _a;
|
|
2624
|
-
return ((_a = i.arn) == null ? void 0 : _a.split("/").pop()) || "1.0.0";
|
|
2625
2618
|
}));
|
|
2619
|
+
allVersions = allVersions.concat(result.containerRecipeSummaryList.map((i) => i.arn?.split("/").pop() || "1.0.0"));
|
|
2626
2620
|
} while (result.nextToken);
|
|
2627
2621
|
break;
|
|
2628
2622
|
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
6
|
var __export = (target, all) => {
|
|
9
7
|
for (var name in all)
|
|
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
15
|
}
|
|
18
16
|
return to;
|
|
19
17
|
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
19
|
|
|
30
20
|
// src/providers/ami-root-device.lambda.ts
|
|
@@ -33,11 +23,12 @@ __export(ami_root_device_lambda_exports, {
|
|
|
33
23
|
handler: () => handler
|
|
34
24
|
});
|
|
35
25
|
module.exports = __toCommonJS(ami_root_device_lambda_exports);
|
|
36
|
-
var
|
|
26
|
+
var import_client_ec2 = require("@aws-sdk/client-ec2");
|
|
27
|
+
var import_client_ssm = require("@aws-sdk/client-ssm");
|
|
37
28
|
|
|
38
29
|
// src/lambda-helpers.ts
|
|
39
|
-
var
|
|
40
|
-
var sm = new
|
|
30
|
+
var import_client_secrets_manager = require("@aws-sdk/client-secrets-manager");
|
|
31
|
+
var sm = new import_client_secrets_manager.SecretsManagerClient();
|
|
41
32
|
async function customResourceRespond(event, responseStatus, reason, physicalResourceId, data) {
|
|
42
33
|
const responseBody = JSON.stringify({
|
|
43
34
|
Status: responseStatus,
|
|
@@ -73,12 +64,11 @@ async function customResourceRespond(event, responseStatus, reason, physicalReso
|
|
|
73
64
|
}
|
|
74
65
|
|
|
75
66
|
// src/providers/ami-root-device.lambda.ts
|
|
76
|
-
var ssm = new
|
|
77
|
-
var ec2 = new
|
|
67
|
+
var ssm = new import_client_ssm.SSMClient();
|
|
68
|
+
var ec2 = new import_client_ec2.EC2Client();
|
|
78
69
|
async function handleAmi(event, ami) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
if (((_a = imageDescs.Images) == null ? void 0 : _a.length) !== 1) {
|
|
70
|
+
const imageDescs = await ec2.send(new import_client_ec2.DescribeImagesCommand({ ImageIds: [ami] }));
|
|
71
|
+
if (imageDescs.Images?.length !== 1) {
|
|
82
72
|
await customResourceRespond(event, "FAILED", `${ami} doesn't exist`, "ERROR", {});
|
|
83
73
|
return;
|
|
84
74
|
}
|
|
@@ -92,7 +82,6 @@ async function handleAmi(event, ami) {
|
|
|
92
82
|
return;
|
|
93
83
|
}
|
|
94
84
|
async function handler(event, context) {
|
|
95
|
-
var _a, _b, _c;
|
|
96
85
|
try {
|
|
97
86
|
console.log(JSON.stringify({ ...event, ResponseURL: "..." }));
|
|
98
87
|
const ami = event.ResourceProperties.Ami;
|
|
@@ -107,7 +96,7 @@ async function handler(event, context) {
|
|
|
107
96
|
if (ami.startsWith("resolve:ssm:")) {
|
|
108
97
|
const ssmParam = ami.substring("resolve:ssm:".length);
|
|
109
98
|
console.log(`Checking SSM ${ssmParam}`);
|
|
110
|
-
const ssmValue = (
|
|
99
|
+
const ssmValue = (await ssm.send(new import_client_ssm.GetParameterCommand({ Name: ssmParam }))).Parameter?.Value;
|
|
111
100
|
if (!ssmValue) {
|
|
112
101
|
await customResourceRespond(event, "FAILED", `${ami} has no value`, "ERROR", {});
|
|
113
102
|
break;
|
|
@@ -117,12 +106,12 @@ async function handler(event, context) {
|
|
|
117
106
|
}
|
|
118
107
|
if (ami.startsWith("lt-")) {
|
|
119
108
|
console.log(`Checking Launch Template ${ami}`);
|
|
120
|
-
const lts = await ec2.
|
|
121
|
-
if (
|
|
109
|
+
const lts = await ec2.send(new import_client_ec2.DescribeLaunchTemplateVersionsCommand({ LaunchTemplateId: ami, Versions: ["$Latest"] }));
|
|
110
|
+
if (lts.LaunchTemplateVersions?.length !== 1) {
|
|
122
111
|
await customResourceRespond(event, "FAILED", `${ami} doesn't exist`, "ERROR", {});
|
|
123
112
|
break;
|
|
124
113
|
}
|
|
125
|
-
if (!
|
|
114
|
+
if (!lts.LaunchTemplateVersions[0].LaunchTemplateData?.ImageId) {
|
|
126
115
|
await customResourceRespond(event, "FAILED", `${ami} doesn't have an AMI`, "ERROR", {});
|
|
127
116
|
break;
|
|
128
117
|
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
6
|
var __export = (target, all) => {
|
|
9
7
|
for (var name in all)
|
|
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
15
|
}
|
|
18
16
|
return to;
|
|
19
17
|
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
19
|
|
|
30
20
|
// src/providers/build-image.lambda.ts
|
|
@@ -33,11 +23,13 @@ __export(build_image_lambda_exports, {
|
|
|
33
23
|
handler: () => handler
|
|
34
24
|
});
|
|
35
25
|
module.exports = __toCommonJS(build_image_lambda_exports);
|
|
36
|
-
var
|
|
26
|
+
var import_client_codebuild = require("@aws-sdk/client-codebuild");
|
|
27
|
+
var import_client_ecr = require("@aws-sdk/client-ecr");
|
|
28
|
+
var import_client_imagebuilder = require("@aws-sdk/client-imagebuilder");
|
|
37
29
|
|
|
38
30
|
// src/lambda-helpers.ts
|
|
39
|
-
var
|
|
40
|
-
var sm = new
|
|
31
|
+
var import_client_secrets_manager = require("@aws-sdk/client-secrets-manager");
|
|
32
|
+
var sm = new import_client_secrets_manager.SecretsManagerClient();
|
|
41
33
|
async function customResourceRespond(event, responseStatus, reason, physicalResourceId, data) {
|
|
42
34
|
const responseBody = JSON.stringify({
|
|
43
35
|
Status: responseStatus,
|
|
@@ -73,9 +65,9 @@ async function customResourceRespond(event, responseStatus, reason, physicalReso
|
|
|
73
65
|
}
|
|
74
66
|
|
|
75
67
|
// src/providers/build-image.lambda.ts
|
|
76
|
-
var codebuild = new
|
|
77
|
-
var ecr = new
|
|
78
|
-
var ib = new
|
|
68
|
+
var codebuild = new import_client_codebuild.CodeBuildClient();
|
|
69
|
+
var ecr = new import_client_ecr.ECRClient();
|
|
70
|
+
var ib = new import_client_imagebuilder.ImagebuilderClient();
|
|
79
71
|
async function handler(event, context) {
|
|
80
72
|
try {
|
|
81
73
|
console.log(JSON.stringify({ ...event, ResponseURL: "..." }));
|
|
@@ -91,7 +83,7 @@ async function handler(event, context) {
|
|
|
91
83
|
break;
|
|
92
84
|
}
|
|
93
85
|
console.log(`Starting CodeBuild project ${projectName}`);
|
|
94
|
-
await codebuild.
|
|
86
|
+
await codebuild.send(new import_client_codebuild.StartBuildCommand({
|
|
95
87
|
projectName,
|
|
96
88
|
environmentVariablesOverride: [
|
|
97
89
|
{
|
|
@@ -115,29 +107,29 @@ async function handler(event, context) {
|
|
|
115
107
|
value: event.ResponseURL
|
|
116
108
|
}
|
|
117
109
|
]
|
|
118
|
-
})
|
|
110
|
+
}));
|
|
119
111
|
break;
|
|
120
112
|
case "Delete":
|
|
121
|
-
const ecrImages = await ecr.
|
|
113
|
+
const ecrImages = await ecr.send(new import_client_ecr.ListImagesCommand({ repositoryName: repoName, maxResults: 100 }));
|
|
122
114
|
if (ecrImages.imageIds && ecrImages.imageIds.length > 0) {
|
|
123
|
-
await ecr.
|
|
115
|
+
await ecr.send(new import_client_ecr.BatchDeleteImageCommand({
|
|
124
116
|
imageIds: ecrImages.imageIds.map((i) => {
|
|
125
117
|
return { imageDigest: i.imageDigest };
|
|
126
118
|
}),
|
|
127
119
|
repositoryName: repoName
|
|
128
|
-
})
|
|
120
|
+
}));
|
|
129
121
|
}
|
|
130
122
|
if (ibName) {
|
|
131
|
-
const ibImages = await ib.
|
|
123
|
+
const ibImages = await ib.send(new import_client_imagebuilder.ListImagesCommand({ filters: [{ name: "name", values: [ibName] }] }));
|
|
132
124
|
if (ibImages.imageVersionList) {
|
|
133
125
|
for (const v of ibImages.imageVersionList) {
|
|
134
126
|
if (v.arn) {
|
|
135
|
-
const ibImageVersions = await ib.
|
|
127
|
+
const ibImageVersions = await ib.send(new import_client_imagebuilder.ListImageBuildVersionsCommand({ imageVersionArn: v.arn }));
|
|
136
128
|
if (ibImageVersions.imageSummaryList) {
|
|
137
129
|
for (const vs of ibImageVersions.imageSummaryList) {
|
|
138
130
|
if (vs.arn) {
|
|
139
131
|
console.log(`Deleting ${vs.arn}`);
|
|
140
|
-
await ib.
|
|
132
|
+
await ib.send(new import_client_imagebuilder.DeleteImageCommand({ imageBuildVersionArn: vs.arn }));
|
|
141
133
|
}
|
|
142
134
|
}
|
|
143
135
|
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
6
|
var __export = (target, all) => {
|
|
9
7
|
for (var name in all)
|
|
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
15
|
}
|
|
18
16
|
return to;
|
|
19
17
|
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
19
|
|
|
30
20
|
// src/providers/update-lambda.lambda.ts
|
|
@@ -33,8 +23,8 @@ __export(update_lambda_lambda_exports, {
|
|
|
33
23
|
handler: () => handler
|
|
34
24
|
});
|
|
35
25
|
module.exports = __toCommonJS(update_lambda_lambda_exports);
|
|
36
|
-
var
|
|
37
|
-
var lambda = new
|
|
26
|
+
var import_client_lambda = require("@aws-sdk/client-lambda");
|
|
27
|
+
var lambda = new import_client_lambda.LambdaClient();
|
|
38
28
|
function sleep(ms) {
|
|
39
29
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
40
30
|
}
|
|
@@ -42,14 +32,14 @@ async function handler(event) {
|
|
|
42
32
|
console.log(JSON.stringify(event));
|
|
43
33
|
while (true) {
|
|
44
34
|
try {
|
|
45
|
-
await lambda.
|
|
35
|
+
await lambda.send(new import_client_lambda.UpdateFunctionCodeCommand({
|
|
46
36
|
FunctionName: event.lambdaName,
|
|
47
37
|
ImageUri: `${event.repositoryUri}:${event.repositoryTag}`,
|
|
48
38
|
Publish: true
|
|
49
|
-
})
|
|
39
|
+
}));
|
|
50
40
|
break;
|
|
51
41
|
} catch (e) {
|
|
52
|
-
if (e
|
|
42
|
+
if (e instanceof import_client_lambda.ResourceConflictException) {
|
|
53
43
|
await sleep(1e4);
|
|
54
44
|
} else {
|
|
55
45
|
throw e;
|