@guardian/cdk 62.0.1 → 62.1.1
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/lib/bin/aws-credential-provider.d.ts +2 -2
- package/lib/bin/aws-credential-provider.d.ts.map +1 -1
- package/lib/bin/aws-credential-provider.js +2 -8
- package/lib/bin/aws-credential-provider.js.map +1 -1
- package/lib/bin/commands/account-readiness/ssm.d.ts.map +1 -1
- package/lib/bin/commands/account-readiness/ssm.js +7 -6
- package/lib/bin/commands/account-readiness/ssm.js.map +1 -1
- package/lib/types/cli.d.ts +4 -4
- package/lib/types/cli.d.ts.map +1 -1
- package/lib/types/cli.js.map +1 -1
- package/lib/utils/cli/vpc.d.ts +4 -4
- package/lib/utils/cli/vpc.d.ts.map +1 -1
- package/lib/utils/cli/vpc.js +6 -8
- package/lib/utils/cli/vpc.js.map +1 -1
- package/package.json +8 -3
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare const awsCredentialProviderChain: (profile: string | undefined) =>
|
|
1
|
+
import type { AwsCredentialIdentityProvider } from "@aws-sdk/types";
|
|
2
|
+
export declare const awsCredentialProviderChain: (profile: string | undefined) => AwsCredentialIdentityProvider;
|
|
3
3
|
//# sourceMappingURL=aws-credential-provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aws-credential-provider.d.ts","sourceRoot":"","sources":["../../src/bin/aws-credential-provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"aws-credential-provider.d.ts","sourceRoot":"","sources":["../../src/bin/aws-credential-provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAEpE,eAAO,MAAM,0BAA0B,YAAa,MAAM,GAAG,SAAS,kCAErE,CAAC"}
|
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.awsCredentialProviderChain = void 0;
|
|
7
|
-
const
|
|
4
|
+
const credential_providers_1 = require("@aws-sdk/credential-providers");
|
|
8
5
|
const awsCredentialProviderChain = (profile) => {
|
|
9
|
-
|
|
10
|
-
return profile
|
|
11
|
-
? new aws_sdk_1.default.CredentialProviderChain([envCredentials, () => new aws_sdk_1.default.SharedIniFileCredentials({ profile })])
|
|
12
|
-
: new aws_sdk_1.default.CredentialProviderChain([envCredentials]);
|
|
6
|
+
return profile ? (0, credential_providers_1.createCredentialChain)((0, credential_providers_1.fromEnv)(), (0, credential_providers_1.fromIni)({ profile })) : (0, credential_providers_1.createCredentialChain)((0, credential_providers_1.fromEnv)());
|
|
13
7
|
};
|
|
14
8
|
exports.awsCredentialProviderChain = awsCredentialProviderChain;
|
|
15
9
|
//# sourceMappingURL=aws-credential-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aws-credential-provider.js","sourceRoot":"","sources":["../../src/bin/aws-credential-provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"aws-credential-provider.js","sourceRoot":"","sources":["../../src/bin/aws-credential-provider.ts"],"names":[],"mappings":";;;AAAA,wEAAwF;AAGjF,MAAM,0BAA0B,GAAG,CAAC,OAA2B,EAAiC,EAAE;IACvG,OAAO,OAAO,CAAC,CAAC,CAAC,IAAA,4CAAqB,EAAC,IAAA,8BAAO,GAAE,EAAE,IAAA,8BAAO,EAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,4CAAqB,EAAC,IAAA,8BAAO,GAAE,CAAC,CAAC;AAC7G,CAAC,CAAC;AAFW,QAAA,0BAA0B,8BAErC","sourcesContent":["import { createCredentialChain, fromEnv, fromIni } from \"@aws-sdk/credential-providers\";\nimport type { AwsCredentialIdentityProvider } from \"@aws-sdk/types\";\n\nexport const awsCredentialProviderChain = (profile: string | undefined): AwsCredentialIdentityProvider => {\n return profile ? createCredentialChain(fromEnv(), fromIni({ profile })) : createCredentialChain(fromEnv());\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssm.d.ts","sourceRoot":"","sources":["../../../../src/bin/commands/account-readiness/ssm.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ssm.d.ts","sourceRoot":"","sources":["../../../../src/bin/commands/account-readiness/ssm.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC;AAEhC,UAAU,2BAA2B;IACnC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,eAAe,EAAE,gBAAgB,EAAE,CAAC;IACpC,oBAAoB,EAAE,gBAAgB,EAAE,CAAC;CAC1C;AAgDD,eAAO,MAAM,MAAM,UAAiB,SAAS,KAAG,QAAQ,MAAM,CAgC7D,CAAC;AAEF,eAAO,MAAM,MAAM,WAAY,2BAA2B,KAAG,OAE5D,CAAC"}
|
|
@@ -4,22 +4,23 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.isPass = exports.report = void 0;
|
|
7
|
-
const
|
|
7
|
+
const client_ec2_1 = require("@aws-sdk/client-ec2");
|
|
8
|
+
const client_ssm_1 = require("@aws-sdk/client-ssm");
|
|
8
9
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
10
|
const constants_1 = require("../../../constants");
|
|
10
11
|
const vpc_1 = require("../../../utils/cli/vpc");
|
|
11
12
|
const ssmParamReadiness = async ({ credentialProvider, region }) => {
|
|
12
|
-
const ssmClient = new
|
|
13
|
-
credentialProvider,
|
|
13
|
+
const ssmClient = new client_ssm_1.SSM({
|
|
14
|
+
credentials: credentialProvider,
|
|
14
15
|
region,
|
|
15
16
|
});
|
|
16
|
-
const ec2Client = new
|
|
17
|
-
credentialProvider,
|
|
17
|
+
const ec2Client = new client_ec2_1.EC2({
|
|
18
|
+
credentials: credentialProvider,
|
|
18
19
|
region,
|
|
19
20
|
});
|
|
20
21
|
const ssmParams = constants_1.ALL_SSM_PARAMETER_PATHS.filter((param) => !param.optional);
|
|
21
22
|
const paths = ssmParams.map((param) => param.path);
|
|
22
|
-
const awsResponse = await ssmClient.getParameters({ Names: paths })
|
|
23
|
+
const awsResponse = await ssmClient.getParameters({ Names: paths });
|
|
23
24
|
const notFoundParameters = awsResponse.InvalidParameters ?? [];
|
|
24
25
|
const notFoundInDetail = ssmParams.filter((_) => notFoundParameters.includes(_.path));
|
|
25
26
|
const foundInDetail = ssmParams.filter((_) => !notFoundParameters.includes(_.path));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssm.js","sourceRoot":"","sources":["../../../../src/bin/commands/account-readiness/ssm.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"ssm.js","sourceRoot":"","sources":["../../../../src/bin/commands/account-readiness/ssm.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA0C;AAC1C,oDAA0C;AAC1C,kDAA0B;AAE1B,kDAA6D;AAE7D,gDAAiF;AASjF,MAAM,iBAAiB,GAAG,KAAK,EAAE,EAAE,kBAAkB,EAAE,MAAM,EAAa,EAAwC,EAAE;IAClH,MAAM,SAAS,GAAG,IAAI,gBAAG,CAAC;QACxB,WAAW,EAAE,kBAAkB;QAC/B,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,gBAAG,CAAC;QACxB,WAAW,EAAE,kBAAkB;QAC/B,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,mCAAuB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAa,SAAS,CAAC,GAAG,CAAC,CAAC,KAAuB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE/E,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAEpE,MAAM,kBAAkB,GAAG,WAAW,CAAC,iBAAiB,IAAI,EAAE,CAAC;IAC/D,MAAM,gBAAgB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACtF,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEpF,MAAM,IAAI,GAAG,MAAM,IAAA,qBAAe,EAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,oBAAoB,GAAG,MAAM,IAAA,4BAAsB,EAAC,SAAS,CAAC,CAAC;IACrE,MAAM,WAAW,GAAa,IAAI;SAC/B,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC;SAC9B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,sEAAsE;QACtE,OAAO,GAAG,CAAC,KAAM,CAAC;IACpB,CAAC,CAAC,CAAC;IAEL,MAAM,+BAA+B,GAAG,oBAAoB,CAAC,MAAM,CACjE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CACpD,CAAC;IAEF,MAAM,wBAAwB,GAAG,+BAA+B;SAC7D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAyB,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IAEzD,OAAO;QACL,eAAe,EAAE,aAAa;QAC9B,iBAAiB,EAAE,gBAAgB;QACnC,oBAAoB,EAAE,wBAAwB;KAC/C,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,MAAM,GAAG,KAAK,EAAE,KAAgB,EAAmB,EAAE;IAChE,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC,CAAC;IAEjG,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,MAAM,aAAa,GACjB,+OAA+O,CAAC;IAElP,MAAM,gBAAgB,GAAG,iCAAiC,CAAC;IAC3D,MAAM,aAAa,GAAG,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,eAAK,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAE/G,IAAI,MAAM,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;QACvC,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAC7D;IAED,IAAI,MAAM,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC1C,IAAI,CAAC,GAAG,CACN,0CAA0C,EAC1C,4EAA4E,MAAM,CAAC,oBAAoB;aACpG,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;aACtB,IAAI,CAAC,IAAI,CAAC,GAAG,CACjB,CAAC;KACH;IAED,OAAO;QACL,IAAI,EAAE,yBAAyB;QAC/B,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,aAAa;QAClB,MAAM,EAAE,IAAI;QACZ,eAAe,EAAE,MAAM,CAAC,eAAe,CAAC,MAAM;QAC9C,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,CAAC,MAAM;KACnD,CAAC;AACJ,CAAC,CAAC;AAhCW,QAAA,MAAM,UAgCjB;AAEK,MAAM,MAAM,GAAG,CAAC,MAAmC,EAAW,EAAE;IACrE,OAAO,MAAM,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,CAAC;AAC/C,CAAC,CAAC;AAFW,QAAA,MAAM,UAEjB","sourcesContent":["import { EC2 } from \"@aws-sdk/client-ec2\";\nimport { SSM } from \"@aws-sdk/client-ssm\";\nimport chalk from \"chalk\";\nimport type { SsmParameterPath } from \"../../../constants\";\nimport { ALL_SSM_PARAMETER_PATHS } from \"../../../constants\";\nimport type { AwsConfig } from \"../../../types/cli\";\nimport { getSsmParametersForVpc, getVpcsInDetail } from \"../../../utils/cli/vpc\";\nimport type { Report } from \".\";\n\ninterface SSMParameterReadinessOutput {\n missingParameters: SsmParameterPath[];\n foundParameters: SsmParameterPath[];\n defaultVPCReferences: SsmParameterPath[];\n}\n\nconst ssmParamReadiness = async ({ credentialProvider, region }: AwsConfig): Promise<SSMParameterReadinessOutput> => {\n const ssmClient = new SSM({\n credentials: credentialProvider,\n region,\n });\n\n const ec2Client = new EC2({\n credentials: credentialProvider,\n region,\n });\n\n const ssmParams = ALL_SSM_PARAMETER_PATHS.filter((param) => !param.optional);\n const paths: string[] = ssmParams.map((param: SsmParameterPath) => param.path);\n\n const awsResponse = await ssmClient.getParameters({ Names: paths });\n\n const notFoundParameters = awsResponse.InvalidParameters ?? [];\n const notFoundInDetail = ssmParams.filter((_) => notFoundParameters.includes(_.path));\n const foundInDetail = ssmParams.filter((_) => !notFoundParameters.includes(_.path));\n\n const vpcs = await getVpcsInDetail(ec2Client);\n const ssmParamsFromAccount = await getSsmParametersForVpc(ssmClient);\n const defaultVpcs: string[] = vpcs\n .filter((vpc) => vpc.IsDefault)\n .map((vpc) => {\n // Non-null-assertion, A VPC always has an ID, the type in CDK is odd!\n return vpc.VpcId!;\n });\n\n const ssmParametersMatchingDefaultVpc = ssmParamsFromAccount.filter(\n ({ Value }) => Value && defaultVpcs.includes(Value),\n );\n\n const defaultVPCReferencePaths = ssmParametersMatchingDefaultVpc\n .map((param) => {\n return ssmParams.find((p) => p.path === param.Name);\n })\n .filter((p): p is SsmParameterPath => p !== undefined);\n\n return {\n foundParameters: foundInDetail,\n missingParameters: notFoundInDetail,\n defaultVPCReferences: defaultVPCReferencePaths,\n };\n};\n\nexport const report = async (props: AwsConfig): Promise<Report> => {\n const output = await ssmParamReadiness(props);\n const isPass = output.missingParameters.length === 0 && output.defaultVPCReferences.length === 0;\n\n const errs = new Map<string, string>();\n const parametersMsg =\n \"CDK uses predefined SSM parameters within patterns and constructs. For example, the EC2 APP pattern uses a parameter to determine which Kinesis stream to forward logs to. Your CDK app may fail at runtime if these parameters do not exist.\";\n\n const missingParamsMsg = \"Required parameters are missing\";\n const missingParams = output.missingParameters.map((p) => ` ${chalk.yellowBright(p.path)}: ${p.description}`);\n\n if (output.missingParameters.length > 0) {\n errs.set(missingParamsMsg, `\\n${missingParams.join(\"\\n\")}`);\n }\n\n if (output.defaultVPCReferences.length > 0) {\n errs.set(\n \"Default VPC referenced in VPC parameters\",\n `you should use a custom VPC instead. Default VPC is referenced in paths: ${output.defaultVPCReferences\n .map((vpc) => vpc.path)\n .join(\", \")}.`,\n );\n }\n\n return {\n name: \"SSM Parameter Readiness\",\n isPass: isPass,\n msg: parametersMsg,\n errors: errs,\n parametersFound: output.foundParameters.length,\n parametersMissing: output.missingParameters.length,\n };\n};\n\nexport const isPass = (output: SSMParameterReadinessOutput): boolean => {\n return output.missingParameters.length === 0;\n};\n"]}
|
package/lib/types/cli.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { Subnet, Vpc } from "@aws-sdk/client-ec2";
|
|
2
|
+
import type { AwsCredentialIdentityProvider } from "@aws-sdk/types";
|
|
3
3
|
export interface AwsConfig {
|
|
4
|
-
credentialProvider:
|
|
4
|
+
credentialProvider: AwsCredentialIdentityProvider;
|
|
5
5
|
region: string;
|
|
6
6
|
}
|
|
7
7
|
export type CliCommandResponse = Promise<string | Record<string, unknown> | number>;
|
|
8
8
|
export interface VpcInDetail extends Vpc {
|
|
9
|
-
subnets:
|
|
9
|
+
subnets: Subnet[];
|
|
10
10
|
isUsed: boolean;
|
|
11
11
|
}
|
|
12
12
|
//# sourceMappingURL=cli.d.ts.map
|
package/lib/types/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/types/cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/types/cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAEpE,MAAM,WAAW,SAAS;IACxB,kBAAkB,EAAE,6BAA6B,CAAC;IAClD,MAAM,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAEpC,MAAM,GAEN,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAEvB,MAAM,CACT,CAAC;AAEF,MAAM,WAAW,WAAY,SAAQ,GAAG;IACtC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB"}
|
package/lib/types/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/types/cli.ts"],"names":[],"mappings":"","sourcesContent":["import type {
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/types/cli.ts"],"names":[],"mappings":"","sourcesContent":["import type { Subnet, Vpc } from \"@aws-sdk/client-ec2\";\nimport type { AwsCredentialIdentityProvider } from \"@aws-sdk/types\";\n\nexport interface AwsConfig {\n credentialProvider: AwsCredentialIdentityProvider;\n region: string;\n}\n\n// A CLI command can return...\nexport type CliCommandResponse = Promise<\n // ...a simple message to be printed\n | string\n // ...or a blob of JSON to be printed via `JSON.stringify`\n | Record<string, unknown>\n // ...or an exit code\n | number\n>;\n\nexport interface VpcInDetail extends Vpc {\n subnets: Subnet[];\n isUsed: boolean;\n}\n"]}
|
package/lib/utils/cli/vpc.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type {
|
|
1
|
+
import type { EC2 } from "@aws-sdk/client-ec2";
|
|
2
|
+
import type { Parameter, SSM } from "@aws-sdk/client-ssm";
|
|
3
3
|
import type { VpcInDetail } from "../../types/cli";
|
|
4
4
|
export declare const primaryVpcSsmParameterPaths: string[];
|
|
5
5
|
export declare const vpcSsmParameterPaths: RegExp[];
|
|
6
|
-
export declare const getSsmParametersForVpc: (ssmClient:
|
|
7
|
-
export declare const getVpcsInDetail: (ec2Client:
|
|
6
|
+
export declare const getSsmParametersForVpc: (ssmClient: SSM) => Promise<Parameter[]>;
|
|
7
|
+
export declare const getVpcsInDetail: (ec2Client: EC2) => Promise<VpcInDetail[]>;
|
|
8
8
|
//# sourceMappingURL=vpc.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vpc.d.ts","sourceRoot":"","sources":["../../../src/utils/cli/vpc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"vpc.d.ts","sourceRoot":"","sources":["../../../src/utils/cli/vpc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA6C,GAAG,EAAe,MAAM,qBAAqB,CAAC;AACvG,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGnD,eAAO,MAAM,2BAA2B,EAAE,MAAM,EAE/C,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,MAAM,EAGvC,CAAC;AAWH,eAAO,MAAM,sBAAsB,cAAqB,GAAG,KAAG,QAAQ,SAAS,EAAE,CAWhF,CAAC;AA2CF,eAAO,MAAM,eAAe,cAAqB,GAAG,KAAG,QAAQ,WAAW,EAAE,CAgB3E,CAAC"}
|
package/lib/utils/cli/vpc.js
CHANGED
|
@@ -9,12 +9,10 @@ exports.vpcSsmParameterPaths = exports.primaryVpcSsmParameterPaths.map((primaryP
|
|
|
9
9
|
return new RegExp(`^${reBody}$`);
|
|
10
10
|
});
|
|
11
11
|
const getSsmParametersWithVpcPrefix = async (ssmClient) => {
|
|
12
|
-
const params = await ssmClient
|
|
13
|
-
.getParametersByPath({
|
|
12
|
+
const params = await ssmClient.getParametersByPath({
|
|
14
13
|
Path: constants_1.VPC_SSM_PARAMETER_PREFIX,
|
|
15
14
|
Recursive: true,
|
|
16
|
-
})
|
|
17
|
-
.promise();
|
|
15
|
+
});
|
|
18
16
|
return params.Parameters ?? [];
|
|
19
17
|
};
|
|
20
18
|
const getSsmParametersForVpc = async (ssmClient) => {
|
|
@@ -32,13 +30,13 @@ const getSubnetsForVpc = async (vpc, ec2Client) => {
|
|
|
32
30
|
if (!vpc.VpcId) {
|
|
33
31
|
return [];
|
|
34
32
|
}
|
|
35
|
-
const response = await ec2Client
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
const response = await ec2Client.describeSubnets({
|
|
34
|
+
Filters: [{ Name: "vpc-id", Values: [vpc.VpcId] }],
|
|
35
|
+
});
|
|
38
36
|
return response.Subnets ?? [];
|
|
39
37
|
};
|
|
40
38
|
const getVpcs = async (ec2Client) => {
|
|
41
|
-
const vpcs = await ec2Client.describeVpcs()
|
|
39
|
+
const vpcs = await ec2Client.describeVpcs();
|
|
42
40
|
return vpcs.Vpcs ?? [];
|
|
43
41
|
};
|
|
44
42
|
const totalUnusedAddressesInSubnet = (subnets) => {
|
package/lib/utils/cli/vpc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vpc.js","sourceRoot":"","sources":["../../../src/utils/cli/vpc.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"vpc.js","sourceRoot":"","sources":["../../../src/utils/cli/vpc.ts"],"names":[],"mappings":";;;AAEA,+CAAoF;AAEpF,kCAA8B;AAEjB,QAAA,2BAA2B,GAAa,mCAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3G,CAAC,CAAC,UAAU,CAAC,oCAAwB,CAAC,CACvC,CAAC;AAEW,QAAA,oBAAoB,GAAa,mCAA2B,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE;IAC5F,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAChE,OAAO,IAAI,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,MAAM,6BAA6B,GAAG,KAAK,EAAE,SAAc,EAAwB,EAAE;IACnF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,mBAAmB,CAAC;QACjD,IAAI,EAAE,oCAAwB;QAC9B,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;AACjC,CAAC,CAAC;AAEK,MAAM,sBAAsB,GAAG,KAAK,EAAE,SAAc,EAAwB,EAAE;IACnF,MAAM,mBAAmB,GAAG,MAAM,6BAA6B,CAAC,SAAS,CAAC,CAAC;IAE3E,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,KAAK,CAAC;SACd;QAED,OAAO,4BAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAXW,QAAA,sBAAsB,0BAWjC;AAEF,MAAM,gBAAgB,GAAG,KAAK,EAAE,GAAQ,EAAE,SAAc,EAAqB,EAAE;IAC7E,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;QACd,OAAO,EAAE,CAAC;KACX;IACD,MAAM,QAAQ,GAA0B,MAAM,SAAS,CAAC,eAAe,CAAC;QACtE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;KACnD,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,KAAK,EAAE,SAAc,EAAkB,EAAE;IACvD,MAAM,IAAI,GAAuB,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;IAChE,OAAO,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,4BAA4B,GAAG,CAAC,OAAiB,EAAU,EAAE;IACjE,OAAO,IAAA,UAAG,EAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,uBAAuB,IAAI,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAAY,EAAU,EAAE;IAC7C,MAAM,0BAA0B,GAAG,CAAC,CAAC;IAErC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAElC,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE;QACvB,OAAO,CAAC,CAAC;KACV;IAED,MAAM,QAAQ,GAAG,EAAE,GAAG,YAAY,CAAC;IACnC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,0BAA0B,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,OAAiB,EAAU,EAAE;IAC1D,MAAM,MAAM,GAAG,OAAO;SACnB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC;SACjC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAElE,OAAO,IAAA,UAAG,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC,CAAC;AAEK,MAAM,eAAe,GAAG,KAAK,EAAE,SAAc,EAA0B,EAAE;IAC9E,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IAEtC,OAAO,MAAM,OAAO,CAAC,GAAG,CACtB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAEvD,MAAM,MAAM,GAAY,qBAAqB,CAAC,OAAO,CAAC,GAAG,4BAA4B,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAErG,OAAO;YACL,GAAG,GAAG;YACN,OAAO;YACP,MAAM;SACP,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;AACJ,CAAC,CAAC;AAhBW,QAAA,eAAe,mBAgB1B","sourcesContent":["import type { DescribeSubnetsResult, DescribeVpcsResult, EC2, Subnet, Vpc } from \"@aws-sdk/client-ec2\";\nimport type { Parameter, SSM } from \"@aws-sdk/client-ssm\";\nimport { ALL_SSM_PARAMETER_PATHS, VPC_SSM_PARAMETER_PREFIX } from \"../../constants\";\nimport type { VpcInDetail } from \"../../types/cli\";\nimport { sum } from \"../math\";\n\nexport const primaryVpcSsmParameterPaths: string[] = ALL_SSM_PARAMETER_PATHS.map((_) => _.path).filter((_) =>\n _.startsWith(VPC_SSM_PARAMETER_PREFIX),\n);\n\nexport const vpcSsmParameterPaths: RegExp[] = primaryVpcSsmParameterPaths.map((primaryPath) => {\n const reBody = primaryPath.replace(\"primary\", \"([A-z0-9.-_])+\");\n return new RegExp(`^${reBody}$`);\n});\n\nconst getSsmParametersWithVpcPrefix = async (ssmClient: SSM): Promise<Parameter[]> => {\n const params = await ssmClient.getParametersByPath({\n Path: VPC_SSM_PARAMETER_PREFIX,\n Recursive: true,\n });\n\n return params.Parameters ?? [];\n};\n\nexport const getSsmParametersForVpc = async (ssmClient: SSM): Promise<Parameter[]> => {\n const paramsWithVpcPrefix = await getSsmParametersWithVpcPrefix(ssmClient);\n\n return paramsWithVpcPrefix.filter((param) => {\n const path = param.Name;\n if (!path) {\n return false;\n }\n\n return vpcSsmParameterPaths.filter((re) => re.exec(path)).length > 0;\n });\n};\n\nconst getSubnetsForVpc = async (vpc: Vpc, ec2Client: EC2): Promise<Subnet[]> => {\n if (!vpc.VpcId) {\n return [];\n }\n const response: DescribeSubnetsResult = await ec2Client.describeSubnets({\n Filters: [{ Name: \"vpc-id\", Values: [vpc.VpcId] }],\n });\n return response.Subnets ?? [];\n};\n\nconst getVpcs = async (ec2Client: EC2): Promise<Vpc[]> => {\n const vpcs: DescribeVpcsResult = await ec2Client.describeVpcs();\n return vpcs.Vpcs ?? [];\n};\n\nconst totalUnusedAddressesInSubnet = (subnets: Subnet[]): number => {\n return sum(subnets.map((_) => _.AvailableIpAddressCount ?? 0));\n};\n\nconst countFromCidr = (cidr: string): number => {\n const UNUSABLE_IPS_IN_CIDR_BLOCK = 5;\n\n const [, mask] = cidr.split(\"/\");\n const maskAsNumber = Number(mask);\n\n if (isNaN(maskAsNumber)) {\n return 0;\n }\n\n const hostBits = 32 - maskAsNumber;\n return Math.pow(2, hostBits) - UNUSABLE_IPS_IN_CIDR_BLOCK;\n};\n\nconst totalCapacityOfSubnet = (subnets: Subnet[]): number => {\n const counts = subnets\n .map((subnet) => subnet.CidrBlock)\n .map((cidrBlock) => (cidrBlock ? countFromCidr(cidrBlock) : 0));\n\n return sum(counts.filter((_) => !!_));\n};\n\nexport const getVpcsInDetail = async (ec2Client: EC2): Promise<VpcInDetail[]> => {\n const vpcs = await getVpcs(ec2Client);\n\n return await Promise.all(\n vpcs.map(async (vpc) => {\n const subnets = await getSubnetsForVpc(vpc, ec2Client);\n\n const isUsed: boolean = totalCapacityOfSubnet(subnets) - totalUnusedAddressesInSubnet(subnets) !== 0;\n\n return {\n ...vpc,\n subnets,\n isUsed,\n };\n }),\n );\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@guardian/cdk",
|
|
3
3
|
"description": "Generic Guardian flavoured AWS CDK components",
|
|
4
|
-
"version": "62.
|
|
4
|
+
"version": "62.1.1",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
7
7
|
"files": [
|
|
@@ -10,7 +10,10 @@
|
|
|
10
10
|
"bin": {
|
|
11
11
|
"gu-cdk": "bin/gu-cdk"
|
|
12
12
|
},
|
|
13
|
-
"repository":
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "git+https://github.com/guardian/cdk.git"
|
|
16
|
+
},
|
|
14
17
|
"scripts": {
|
|
15
18
|
"build": "tsc",
|
|
16
19
|
"lint": "eslint src",
|
|
@@ -52,8 +55,10 @@
|
|
|
52
55
|
"typescript": "5.1.6"
|
|
53
56
|
},
|
|
54
57
|
"dependencies": {
|
|
58
|
+
"@aws-sdk/client-ec2": "^3.908.0",
|
|
59
|
+
"@aws-sdk/client-ssm": "^3.908.0",
|
|
60
|
+
"@aws-sdk/credential-providers": "^3.908.0",
|
|
55
61
|
"@oclif/core": "3.26.6",
|
|
56
|
-
"aws-sdk": "^2.1692.0",
|
|
57
62
|
"chalk": "^4.1.2",
|
|
58
63
|
"codemaker": "^1.114.1",
|
|
59
64
|
"git-url-parse": "^16.0.1",
|