@cdklabs/multi-az-observability 0.0.0-alpha.0
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/.jsii +10177 -0
- package/API.md +5119 -0
- package/LICENSE +202 -0
- package/README.md +175 -0
- package/cdk.json +68 -0
- package/lib/alarmsandrules/AvailabilityAndLatencyAlarmsAndRules.d.ts +214 -0
- package/lib/alarmsandrules/AvailabilityAndLatencyAlarmsAndRules.js +763 -0
- package/lib/alarmsandrules/BaseOperationRegionalAlarmsAndRules.d.ts +22 -0
- package/lib/alarmsandrules/BaseOperationRegionalAlarmsAndRules.js +21 -0
- package/lib/alarmsandrules/BaseOperationZonalAlarmsAndRules.d.ts +34 -0
- package/lib/alarmsandrules/BaseOperationZonalAlarmsAndRules.js +39 -0
- package/lib/alarmsandrules/CanaryOperationRegionalAlarmsAndRules.d.ts +7 -0
- package/lib/alarmsandrules/CanaryOperationRegionalAlarmsAndRules.js +11 -0
- package/lib/alarmsandrules/CanaryOperationZonalAlarmsAndRules.d.ts +16 -0
- package/lib/alarmsandrules/CanaryOperationZonalAlarmsAndRules.js +17 -0
- package/lib/alarmsandrules/IBaseOperationRegionalAlarmsAndRules.d.ts +18 -0
- package/lib/alarmsandrules/IBaseOperationRegionalAlarmsAndRules.js +3 -0
- package/lib/alarmsandrules/IBaseOperationZonalAlarmsAndRules.d.ts +30 -0
- package/lib/alarmsandrules/IBaseOperationZonalAlarmsAndRules.js +3 -0
- package/lib/alarmsandrules/ICanaryOperationRegionalAlarmsAndRules.d.ts +6 -0
- package/lib/alarmsandrules/ICanaryOperationRegionalAlarmsAndRules.js +3 -0
- package/lib/alarmsandrules/ICanaryOperationZonalAlarmsAndRules.d.ts +12 -0
- package/lib/alarmsandrules/ICanaryOperationZonalAlarmsAndRules.js +3 -0
- package/lib/alarmsandrules/IOperationAlarmsAndRules.d.ts +55 -0
- package/lib/alarmsandrules/IOperationAlarmsAndRules.js +3 -0
- package/lib/alarmsandrules/IServerSideOperationRegionalAlarmsAndRules.d.ts +15 -0
- package/lib/alarmsandrules/IServerSideOperationRegionalAlarmsAndRules.js +3 -0
- package/lib/alarmsandrules/IServerSideOperationZonalAlarmsAndRules.d.ts +36 -0
- package/lib/alarmsandrules/IServerSideOperationZonalAlarmsAndRules.js +3 -0
- package/lib/alarmsandrules/IServiceAlarmsAndRules.d.ts +44 -0
- package/lib/alarmsandrules/IServiceAlarmsAndRules.js +3 -0
- package/lib/alarmsandrules/InsightRuleBody.d.ts +67 -0
- package/lib/alarmsandrules/InsightRuleBody.js +46 -0
- package/lib/alarmsandrules/OperationAlarmsAndRules.d.ts +59 -0
- package/lib/alarmsandrules/OperationAlarmsAndRules.js +135 -0
- package/lib/alarmsandrules/ServerSideOperationRegionalAlarmsAndRules.d.ts +19 -0
- package/lib/alarmsandrules/ServerSideOperationRegionalAlarmsAndRules.js +22 -0
- package/lib/alarmsandrules/ServerSideOperationZonalAlarmsAndRules.d.ts +40 -0
- package/lib/alarmsandrules/ServerSideOperationZonalAlarmsAndRules.js +46 -0
- package/lib/alarmsandrules/ServiceAlarmsAndRules.d.ts +48 -0
- package/lib/alarmsandrules/ServiceAlarmsAndRules.js +166 -0
- package/lib/alarmsandrules/props/BaseOperationRegionalAlarmsAndRulesProps.d.ts +24 -0
- package/lib/alarmsandrules/props/BaseOperationRegionalAlarmsAndRulesProps.js +3 -0
- package/lib/alarmsandrules/props/BaseOperationZonalAlarmsAndRulesProps.d.ts +62 -0
- package/lib/alarmsandrules/props/BaseOperationZonalAlarmsAndRulesProps.js +3 -0
- package/lib/alarmsandrules/props/CanaryOperationRegionalAlarmsAndRulesProps.d.ts +6 -0
- package/lib/alarmsandrules/props/CanaryOperationRegionalAlarmsAndRulesProps.js +3 -0
- package/lib/alarmsandrules/props/CanaryOperationZonalAlarmsAndRulesProps.d.ts +6 -0
- package/lib/alarmsandrules/props/CanaryOperationZonalAlarmsAndRulesProps.js +3 -0
- package/lib/alarmsandrules/props/OperationAlarmsAndRulesProps.d.ts +45 -0
- package/lib/alarmsandrules/props/OperationAlarmsAndRulesProps.js +3 -0
- package/lib/alarmsandrules/props/ServerSideOperationRegionalAlarmsAndRulesProps.d.ts +6 -0
- package/lib/alarmsandrules/props/ServerSideOperationRegionalAlarmsAndRulesProps.js +3 -0
- package/lib/alarmsandrules/props/ServerSideOperationZonalAlarmsAndRulesProps.d.ts +6 -0
- package/lib/alarmsandrules/props/ServerSideOperationZonalAlarmsAndRulesProps.js +3 -0
- package/lib/alarmsandrules/props/ServiceAlarmsAndRulesProps.d.ts +13 -0
- package/lib/alarmsandrules/props/ServiceAlarmsAndRulesProps.js +3 -0
- package/lib/azmapper/AvailabilityZoneMapper.d.ts +86 -0
- package/lib/azmapper/AvailabilityZoneMapper.js +200 -0
- package/lib/azmapper/IAvailabilityZoneMapper.d.ts +86 -0
- package/lib/azmapper/IAvailabilityZoneMapper.js +3 -0
- package/lib/azmapper/props/AvailabilityZoneMapperProps.d.ts +13 -0
- package/lib/azmapper/props/AvailabilityZoneMapperProps.js +3 -0
- package/lib/azmapper/src/index.py +107 -0
- package/lib/canaries/CanaryFunction.d.ts +16 -0
- package/lib/canaries/CanaryFunction.js +152 -0
- package/lib/canaries/CanaryTest.d.ts +10 -0
- package/lib/canaries/CanaryTest.js +84 -0
- package/lib/canaries/ICanaryFunction.d.ts +6 -0
- package/lib/canaries/ICanaryFunction.js +3 -0
- package/lib/canaries/props/AddCanaryTestProps.d.ts +66 -0
- package/lib/canaries/props/AddCanaryTestProps.js +3 -0
- package/lib/canaries/props/CanaryFunctionProps.d.ts +29 -0
- package/lib/canaries/props/CanaryFunctionProps.js +3 -0
- package/lib/canaries/props/CanaryTestProps.d.ts +21 -0
- package/lib/canaries/props/CanaryTestProps.js +3 -0
- package/lib/canaries/props/NetworkConfigurationProps.d.ts +16 -0
- package/lib/canaries/props/NetworkConfigurationProps.js +3 -0
- package/lib/canaries/src/canary.zip +0 -0
- package/lib/dashboards/BasicServiceDashboard.d.ts +10 -0
- package/lib/dashboards/BasicServiceDashboard.js +130 -0
- package/lib/dashboards/ContributorInsightsWidget.d.ts +22 -0
- package/lib/dashboards/ContributorInsightsWidget.js +55 -0
- package/lib/dashboards/IOperationAvailabilityAndLatencyDashboard.d.ts +10 -0
- package/lib/dashboards/IOperationAvailabilityAndLatencyDashboard.js +3 -0
- package/lib/dashboards/IServiceAvailabilityAndLatencyDashboard.d.ts +10 -0
- package/lib/dashboards/IServiceAvailabilityAndLatencyDashboard.js +3 -0
- package/lib/dashboards/OperationAvailabilityAndLatencyDashboard.d.ts +20 -0
- package/lib/dashboards/OperationAvailabilityAndLatencyDashboard.js +588 -0
- package/lib/dashboards/ServiceAvailabilityAndLatencyDashboard.d.ts +24 -0
- package/lib/dashboards/ServiceAvailabilityAndLatencyDashboard.js +475 -0
- package/lib/dashboards/props/BasicServiceDashboardProps.d.ts +23 -0
- package/lib/dashboards/props/BasicServiceDashboardProps.js +3 -0
- package/lib/dashboards/props/ContributorInsightWidgetProps.d.ts +31 -0
- package/lib/dashboards/props/ContributorInsightWidgetProps.js +3 -0
- package/lib/dashboards/props/OperationAvailabilityAndLatencyDashboardProps.d.ts +84 -0
- package/lib/dashboards/props/OperationAvailabilityAndLatencyDashboardProps.js +3 -0
- package/lib/dashboards/props/OperationAvailabilityWidgetProps.d.ts +37 -0
- package/lib/dashboards/props/OperationAvailabilityWidgetProps.js +3 -0
- package/lib/dashboards/props/OperationLatencyWidgetProps.d.ts +37 -0
- package/lib/dashboards/props/OperationLatencyWidgetProps.js +3 -0
- package/lib/dashboards/props/ServiceAvailabilityAndLatencyDashboardProps.d.ts +30 -0
- package/lib/dashboards/props/ServiceAvailabilityAndLatencyDashboardProps.js +3 -0
- package/lib/index.d.ts +35 -0
- package/lib/index.js +30 -0
- package/lib/metrics/ApplicationLoadBalancerMetrics.d.ts +36 -0
- package/lib/metrics/ApplicationLoadBalancerMetrics.js +150 -0
- package/lib/metrics/AvailabilityAndLatencyMetrics.d.ts +61 -0
- package/lib/metrics/AvailabilityAndLatencyMetrics.js +212 -0
- package/lib/metrics/NetworkLoadBalancerMetrics.d.ts +19 -0
- package/lib/metrics/NetworkLoadBalancerMetrics.js +48 -0
- package/lib/metrics/RegionalAvailabilityMetrics.d.ts +19 -0
- package/lib/metrics/RegionalAvailabilityMetrics.js +71 -0
- package/lib/metrics/RegionalLatencyMetrics.d.ts +33 -0
- package/lib/metrics/RegionalLatencyMetrics.js +69 -0
- package/lib/metrics/ZonalAvailabilityMetrics.d.ts +19 -0
- package/lib/metrics/ZonalAvailabilityMetrics.js +71 -0
- package/lib/metrics/ZonalLatencyMetrics.d.ts +29 -0
- package/lib/metrics/ZonalLatencyMetrics.js +65 -0
- package/lib/metrics/props/AvailabilityAndLatencyMetricProps.d.ts +23 -0
- package/lib/metrics/props/AvailabilityAndLatencyMetricProps.js +3 -0
- package/lib/metrics/props/AvailabilityMetricProps.d.ts +11 -0
- package/lib/metrics/props/AvailabilityMetricProps.js +3 -0
- package/lib/metrics/props/LatencyMetricProps.d.ts +15 -0
- package/lib/metrics/props/LatencyMetricProps.js +3 -0
- package/lib/metrics/props/RegionalAvailabilityMetricProps.d.ts +6 -0
- package/lib/metrics/props/RegionalAvailabilityMetricProps.js +3 -0
- package/lib/metrics/props/RegionalLatencyMetricProps.d.ts +6 -0
- package/lib/metrics/props/RegionalLatencyMetricProps.js +3 -0
- package/lib/metrics/props/ServiceAvailabilityMetricProps.d.ts +23 -0
- package/lib/metrics/props/ServiceAvailabilityMetricProps.js +3 -0
- package/lib/metrics/props/ServiceLatencyMericProps.d.ts +23 -0
- package/lib/metrics/props/ServiceLatencyMericProps.js +3 -0
- package/lib/metrics/props/ZonalAvailabilityMetricProps.d.ts +10 -0
- package/lib/metrics/props/ZonalAvailabilityMetricProps.js +3 -0
- package/lib/metrics/props/ZonalLatencyMetricProps.d.ts +10 -0
- package/lib/metrics/props/ZonalLatencyMetricProps.js +3 -0
- package/lib/monitoring/src/monitoring-layer.zip +0 -0
- package/lib/outlier-detection/IOutlierDetectionFunction.d.ts +12 -0
- package/lib/outlier-detection/IOutlierDetectionFunction.js +3 -0
- package/lib/outlier-detection/OutlierDetectionFunction.d.ts +16 -0
- package/lib/outlier-detection/OutlierDetectionFunction.js +126 -0
- package/lib/outlier-detection/props/OutlierDetectionFunctionProps.d.ts +12 -0
- package/lib/outlier-detection/props/OutlierDetectionFunctionProps.js +3 -0
- package/lib/outlier-detection/src/outlier-detection.zip +0 -0
- package/lib/outlier-detection/src/scipy-layer.zip +0 -0
- package/lib/services/BasicServiceMultiAZObservability.d.ts +64 -0
- package/lib/services/BasicServiceMultiAZObservability.js +504 -0
- package/lib/services/CanaryMetrics.d.ts +17 -0
- package/lib/services/CanaryMetrics.js +19 -0
- package/lib/services/CanaryTestMetricsOverride.d.ts +39 -0
- package/lib/services/CanaryTestMetricsOverride.js +23 -0
- package/lib/services/ContributorInsightRuleDetails.d.ts +42 -0
- package/lib/services/ContributorInsightRuleDetails.js +23 -0
- package/lib/services/IBasicServiceMultiAZObservability.d.ts +45 -0
- package/lib/services/IBasicServiceMultiAZObservability.js +3 -0
- package/lib/services/ICanaryMetrics.d.ts +14 -0
- package/lib/services/ICanaryMetrics.js +3 -0
- package/lib/services/ICanaryTestMetricsOverride.d.ts +36 -0
- package/lib/services/ICanaryTestMetricsOverride.js +3 -0
- package/lib/services/IContributorInsightRuleDetails.d.ts +38 -0
- package/lib/services/IContributorInsightRuleDetails.js +3 -0
- package/lib/services/IInstrumentedServiceMultiAZObservability.d.ts +39 -0
- package/lib/services/IInstrumentedServiceMultiAZObservability.js +3 -0
- package/lib/services/IOperation.d.ts +75 -0
- package/lib/services/IOperation.js +3 -0
- package/lib/services/IOperationMetricDetails.d.ts +78 -0
- package/lib/services/IOperationMetricDetails.js +3 -0
- package/lib/services/IService.d.ts +76 -0
- package/lib/services/IService.js +3 -0
- package/lib/services/IServiceMetricDetails.d.ts +68 -0
- package/lib/services/IServiceMetricDetails.js +3 -0
- package/lib/services/InstrumentedServiceMultiAZObservability.d.ts +55 -0
- package/lib/services/InstrumentedServiceMultiAZObservability.js +310 -0
- package/lib/services/Operation.d.ts +78 -0
- package/lib/services/Operation.js +34 -0
- package/lib/services/OperationMetricDetails.d.ts +82 -0
- package/lib/services/OperationMetricDetails.js +50 -0
- package/lib/services/Service.d.ts +80 -0
- package/lib/services/Service.js +36 -0
- package/lib/services/ServiceMetricDetails.d.ts +71 -0
- package/lib/services/ServiceMetricDetails.js +28 -0
- package/lib/services/props/BasicServiceMultiAZObservabilityProps.d.ts +126 -0
- package/lib/services/props/BasicServiceMultiAZObservabilityProps.js +3 -0
- package/lib/services/props/CanaryMetricProps.d.ts +14 -0
- package/lib/services/props/CanaryMetricProps.js +3 -0
- package/lib/services/props/CanaryTestMetricsOverrideProps.d.ts +47 -0
- package/lib/services/props/CanaryTestMetricsOverrideProps.js +3 -0
- package/lib/services/props/ContributorInsightRuleDetailsProps.d.ts +38 -0
- package/lib/services/props/ContributorInsightRuleDetailsProps.js +3 -0
- package/lib/services/props/InstrumentedServiceMultiAZObservabilityProps.d.ts +88 -0
- package/lib/services/props/InstrumentedServiceMultiAZObservabilityProps.js +3 -0
- package/lib/services/props/MetricDimensions.d.ts +61 -0
- package/lib/services/props/MetricDimensions.js +63 -0
- package/lib/services/props/OperationMetricDetailsProps.d.ts +97 -0
- package/lib/services/props/OperationMetricDetailsProps.js +3 -0
- package/lib/services/props/OperationProps.d.ts +93 -0
- package/lib/services/props/OperationProps.js +3 -0
- package/lib/services/props/ServiceMetricDetailsProps.d.ts +68 -0
- package/lib/services/props/ServiceMetricDetailsProps.js +3 -0
- package/lib/services/props/ServiceProps.d.ts +69 -0
- package/lib/services/props/ServiceProps.js +3 -0
- package/lib/utilities/AvailabilityMetricType.d.ts +26 -0
- package/lib/utilities/AvailabilityMetricType.js +33 -0
- package/lib/utilities/LatencyMetricType.d.ts +13 -0
- package/lib/utilities/LatencyMetricType.js +20 -0
- package/lib/utilities/OutlierDetectionAlgorithm.d.ts +42 -0
- package/lib/utilities/OutlierDetectionAlgorithm.js +49 -0
- package/lib/utilities/StackWithDynamicSource.d.ts +14 -0
- package/lib/utilities/StackWithDynamicSource.js +82 -0
- package/package.json +176 -0
- package/rosetta/default.ts-fixture +13 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.AvailabilityZoneMapper = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
7
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
8
|
+
const fs = require("fs");
|
|
9
|
+
const path = require("path");
|
|
10
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
11
|
+
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
12
|
+
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
13
|
+
const aws_logs_1 = require("aws-cdk-lib/aws-logs");
|
|
14
|
+
const constructs_1 = require("constructs");
|
|
15
|
+
/**
|
|
16
|
+
* A construct that allows you to map AZ names to ids and back
|
|
17
|
+
*/
|
|
18
|
+
class AvailabilityZoneMapper extends constructs_1.Construct {
|
|
19
|
+
constructor(scope, id, props) {
|
|
20
|
+
super(scope, id);
|
|
21
|
+
/*
|
|
22
|
+
let currentNode: Construct | undefined = this.node.scope;
|
|
23
|
+
|
|
24
|
+
while (currentNode !== undefined && !(currentNode instanceof Stack)) {
|
|
25
|
+
currentNode = currentNode.node.scope;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (currentNode !== undefined) {
|
|
29
|
+
(currentNode as Stack).addTransform('AWS::LanguageExtensions');
|
|
30
|
+
}
|
|
31
|
+
*/
|
|
32
|
+
let xrayManagedPolicy = new aws_iam_1.ManagedPolicy(this, 'XrayManagedPolicy', {
|
|
33
|
+
path: '/azmapper/',
|
|
34
|
+
statements: [
|
|
35
|
+
new aws_iam_1.PolicyStatement({
|
|
36
|
+
actions: [
|
|
37
|
+
'xray:PutTraceSegments',
|
|
38
|
+
'xray:PutTelemetryRecords',
|
|
39
|
+
'xray:GetSamplingRules',
|
|
40
|
+
'xray:GetSamplingTargets',
|
|
41
|
+
'xray:GetSamplingStatisticSummaries',
|
|
42
|
+
],
|
|
43
|
+
effect: aws_iam_1.Effect.ALLOW,
|
|
44
|
+
resources: ['*'],
|
|
45
|
+
}),
|
|
46
|
+
],
|
|
47
|
+
});
|
|
48
|
+
let ec2ManagedPolicy = new aws_iam_1.ManagedPolicy(this, 'EC2ManagedPolicy', {
|
|
49
|
+
path: '/azmapper/',
|
|
50
|
+
statements: [
|
|
51
|
+
new aws_iam_1.PolicyStatement({
|
|
52
|
+
actions: ['ec2:DescribeAvailabilityZones'],
|
|
53
|
+
effect: aws_iam_1.Effect.ALLOW,
|
|
54
|
+
resources: ['*'],
|
|
55
|
+
}),
|
|
56
|
+
],
|
|
57
|
+
});
|
|
58
|
+
let executionRole = new aws_iam_1.Role(this, 'executionRole', {
|
|
59
|
+
assumedBy: new aws_iam_1.ServicePrincipal('lambda.amazonaws.com'),
|
|
60
|
+
path: '/azmapper/',
|
|
61
|
+
managedPolicies: [xrayManagedPolicy, ec2ManagedPolicy],
|
|
62
|
+
});
|
|
63
|
+
const file = fs.readFileSync(path.resolve(__dirname, './../azmapper/src/index.py'), 'utf-8');
|
|
64
|
+
this.function = new aws_lambda_1.Function(this, 'AvailabilityZoneMapperFunction', {
|
|
65
|
+
runtime: aws_lambda_1.Runtime.PYTHON_3_12,
|
|
66
|
+
code: aws_lambda_1.Code.fromInline(file),
|
|
67
|
+
handler: 'index.handler',
|
|
68
|
+
role: executionRole,
|
|
69
|
+
architecture: aws_lambda_1.Architecture.ARM_64,
|
|
70
|
+
tracing: aws_lambda_1.Tracing.ACTIVE,
|
|
71
|
+
timeout: aws_cdk_lib_1.Duration.seconds(20),
|
|
72
|
+
memorySize: 512,
|
|
73
|
+
environment: {
|
|
74
|
+
REGION: aws_cdk_lib_1.Fn.ref('AWS::Region'),
|
|
75
|
+
PARTITION: aws_cdk_lib_1.Fn.ref('AWS::Partition'),
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
this.logGroup = new aws_logs_1.LogGroup(this, 'LogGroup', {
|
|
79
|
+
logGroupName: `/aws/lambda/${this.function.functionName}`,
|
|
80
|
+
retention: aws_logs_1.RetentionDays.ONE_DAY,
|
|
81
|
+
removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY,
|
|
82
|
+
});
|
|
83
|
+
new aws_iam_1.ManagedPolicy(this, 'CloudWatchManagedPolicy', {
|
|
84
|
+
path: '/azmapper/',
|
|
85
|
+
statements: [
|
|
86
|
+
new aws_iam_1.PolicyStatement({
|
|
87
|
+
actions: ['cloudwatch:PutMetricData'],
|
|
88
|
+
effect: aws_iam_1.Effect.ALLOW,
|
|
89
|
+
resources: ['*'],
|
|
90
|
+
}),
|
|
91
|
+
new aws_iam_1.PolicyStatement({
|
|
92
|
+
actions: ['logs:CreateLogStream', 'logs:PutLogEvents'],
|
|
93
|
+
effect: aws_iam_1.Effect.ALLOW,
|
|
94
|
+
resources: [
|
|
95
|
+
aws_cdk_lib_1.Fn.sub('arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:') +
|
|
96
|
+
this.logGroup.logGroupName +
|
|
97
|
+
':*',
|
|
98
|
+
],
|
|
99
|
+
}),
|
|
100
|
+
],
|
|
101
|
+
roles: [executionRole],
|
|
102
|
+
});
|
|
103
|
+
this.mapper = new aws_cdk_lib_1.CustomResource(this, 'AvailabilityZoneMapper', {
|
|
104
|
+
serviceToken: this.function.functionArn,
|
|
105
|
+
properties: props?.availabilityZoneNames !== undefined
|
|
106
|
+
? { AvailabilityZones: props.availabilityZoneNames }
|
|
107
|
+
: {},
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Gets the Availability Zone Id for the given Availability Zone Name in this account
|
|
112
|
+
* @param availabilityZoneName
|
|
113
|
+
* @returns
|
|
114
|
+
*/
|
|
115
|
+
availabilityZoneId(availabilityZoneName) {
|
|
116
|
+
return this.mapper.getAttString(availabilityZoneName);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Gets the Availability Zone Name for the given Availability Zone Id in this account
|
|
120
|
+
* @param availabilityZoneId
|
|
121
|
+
* @returns
|
|
122
|
+
*/
|
|
123
|
+
availabilityZoneName(availabilityZoneId) {
|
|
124
|
+
return this.mapper.getAttString(availabilityZoneId);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Gets the prefix for the region used with Availability Zone Ids, for example
|
|
128
|
+
* in us-east-1, this returns "use1"
|
|
129
|
+
* @returns
|
|
130
|
+
*/
|
|
131
|
+
regionPrefixForAvailabilityZoneIds() {
|
|
132
|
+
return this.mapper.getAttString(aws_cdk_lib_1.Fn.ref('AWS::Region'));
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Returns an array for Availability Zone Ids for the supplied Availability Zone names,
|
|
136
|
+
* they are returned in the same order the names were provided
|
|
137
|
+
* @param availabilityZoneNames
|
|
138
|
+
* @returns
|
|
139
|
+
*/
|
|
140
|
+
availabilityZoneIdsAsArray(availabilityZoneNames) {
|
|
141
|
+
let ids = [];
|
|
142
|
+
for (let i = 0; i < availabilityZoneNames.length; i++) {
|
|
143
|
+
ids.push(this.availabilityZoneId(availabilityZoneNames[i]));
|
|
144
|
+
}
|
|
145
|
+
return ids;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Returns a comma delimited list of Availability Zone Ids for the supplied
|
|
149
|
+
* Availability Zone names. You can use this string with Fn.Select(x, Fn.Split(",", azs)) to
|
|
150
|
+
* get a specific Availability Zone Id
|
|
151
|
+
* @param availabilityZoneNames
|
|
152
|
+
* @returns
|
|
153
|
+
*/
|
|
154
|
+
availabilityZoneIdsAsCommaDelimitedList(availabilityZoneNames) {
|
|
155
|
+
let ids = [];
|
|
156
|
+
for (let i = 0; i < availabilityZoneNames.length; i++) {
|
|
157
|
+
ids.push(this.availabilityZoneId(availabilityZoneNames[i]));
|
|
158
|
+
}
|
|
159
|
+
return ids.join(',');
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Returns a comma delimited list of Availability Zone Ids for the supplied
|
|
163
|
+
* Availability Zone names. You can use this string with Fn.Select(x, Fn.Split(",", azs)) to
|
|
164
|
+
* get a specific Availability Zone Id
|
|
165
|
+
* @returns
|
|
166
|
+
*/
|
|
167
|
+
allAvailabilityZoneIdsAsCommaDelimitedList() {
|
|
168
|
+
return this.mapper.getAttString('AllAvailabilityZoneIds');
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Returns a reference that can be cast to a string array with all of the
|
|
172
|
+
* Availability Zone Ids
|
|
173
|
+
* @returns
|
|
174
|
+
*/
|
|
175
|
+
allAvailabilityZoneIdsAsArray() {
|
|
176
|
+
return this.mapper.getAtt('AllAvailabilityZoneIdsArray');
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Given a letter like "f" or "a", returns the Availability Zone Id for that
|
|
180
|
+
* Availability Zone name in this account
|
|
181
|
+
* @param letter
|
|
182
|
+
* @returns
|
|
183
|
+
*/
|
|
184
|
+
availabilityZoneIdFromAvailabilityZoneLetter(letter) {
|
|
185
|
+
return this.mapper.getAttString(letter);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Gets all of the Availability Zone names in this Region as a comma delimited
|
|
189
|
+
* list. You can use this string with Fn.Select(x, Fn.Split(",", azs)) to
|
|
190
|
+
* get a specific Availability Zone Name
|
|
191
|
+
* @returns
|
|
192
|
+
*/
|
|
193
|
+
allAvailabilityZoneNamesAsCommaDelimitedList() {
|
|
194
|
+
return this.mapper.getAttString('AllAvailabilityZoneNames');
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
exports.AvailabilityZoneMapper = AvailabilityZoneMapper;
|
|
198
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
199
|
+
AvailabilityZoneMapper[_a] = { fqn: "@cdklabs/multi-az-observability.AvailabilityZoneMapper", version: "0.0.0-alpha.0" };
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXZhaWxhYmlsaXR5Wm9uZU1hcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hem1hcHBlci9BdmFpbGFiaWxpdHlab25lTWFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUN0Qyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLDZDQU1xQjtBQUNyQixpREFRNkI7QUFDN0IsdURBT2dDO0FBQ2hDLG1EQUEwRTtBQUMxRSwyQ0FBdUM7QUFJdkM7O0dBRUc7QUFDSCxNQUFhLHNCQUNYLFNBQVEsc0JBQVM7SUFtQmpCLFlBQ0UsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLEtBQW1DO1FBRW5DLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakI7Ozs7Ozs7Ozs7VUFVRTtRQUVGLElBQUksaUJBQWlCLEdBQW1CLElBQUksdUJBQWEsQ0FDdkQsSUFBSSxFQUNKLG1CQUFtQixFQUNuQjtZQUNFLElBQUksRUFBRSxZQUFZO1lBQ2xCLFVBQVUsRUFBRTtnQkFDVixJQUFJLHlCQUFlLENBQUM7b0JBQ2xCLE9BQU8sRUFBRTt3QkFDUCx1QkFBdUI7d0JBQ3ZCLDBCQUEwQjt3QkFDMUIsdUJBQXVCO3dCQUN2Qix5QkFBeUI7d0JBQ3pCLG9DQUFvQztxQkFDckM7b0JBQ0QsTUFBTSxFQUFFLGdCQUFNLENBQUMsS0FBSztvQkFDcEIsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO2lCQUNqQixDQUFDO2FBQ0g7U0FDRixDQUNGLENBQUM7UUFFRixJQUFJLGdCQUFnQixHQUFtQixJQUFJLHVCQUFhLENBQ3RELElBQUksRUFDSixrQkFBa0IsRUFDbEI7WUFDRSxJQUFJLEVBQUUsWUFBWTtZQUNsQixVQUFVLEVBQUU7Z0JBQ1YsSUFBSSx5QkFBZSxDQUFDO29CQUNsQixPQUFPLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztvQkFDMUMsTUFBTSxFQUFFLGdCQUFNLENBQUMs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QUFNLENBQUMsWUFBWSxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCw2QkFBNkI7UUFDM0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDRDQUE0QyxDQUFDLE1BQWM7UUFDekQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCw0Q0FBNEM7UUFDMUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQzlELENBQUM7O0FBOU9ILHdEQStPQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQge1xuICBDdXN0b21SZXNvdXJjZSxcbiAgRHVyYXRpb24sXG4gIEZuLFxuICBSZWZlcmVuY2UsXG4gIFJlbW92YWxQb2xpY3ksXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIEVmZmVjdCxcbiAgSU1hbmFnZWRQb2xpY3ksXG4gIElSb2xlLFxuICBNYW5hZ2VkUG9saWN5LFxuICBQb2xpY3lTdGF0ZW1lbnQsXG4gIFJvbGUsXG4gIFNlcnZpY2VQcmluY2lwYWwsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHtcbiAgQXJjaGl0ZWN0dXJlLFxuICBDb2RlLFxuICBGdW5jdGlvbixcbiAgSUZ1bmN0aW9uLFxuICBSdW50aW1lLFxuICBUcmFjaW5nLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IElMb2dHcm91cCwgTG9nR3JvdXAsIFJldGVudGlvbkRheXMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IElBdmFpbGFiaWxpdHlab25lTWFwcGVyIH0gZnJvbSAnLi9JQXZhaWxhYmlsaXR5Wm9uZU1hcHBlcic7XG5pbXBvcnQgeyBBdmFpbGFiaWxpdHlab25lTWFwcGVyUHJvcHMgfSBmcm9tICcuL3Byb3BzL0F2YWlsYWJpbGl0eVpvbmVNYXBwZXJQcm9wcyc7XG5cbi8qKlxuICogQSBjb25zdHJ1Y3QgdGhhdCBhbGxvd3MgeW91IHRvIG1hcCBBWiBuYW1lcyB0byBpZHMgYW5kIGJhY2tcbiAqL1xuZXhwb3J0IGNsYXNzIEF2YWlsYWJpbGl0eVpvbmVNYXBwZXJcbiAgZXh0ZW5kcyBDb25zdHJ1Y3RcbiAgaW1wbGVtZW50cyBJQXZhaWxhYmlsaXR5Wm9uZU1hcHBlciB7XG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdGhhdCBkb2VzIHRoZSBtYXBwaW5nXG4gICAqL1xuICBmdW5jdGlvbjogSUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9nIGdyb3VwIGZvciB0aGUgZnVuY3Rpb24ncyBsb2dzXG4gICAqL1xuICBsb2dHcm91cDogSUxvZ0dyb3VwO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIHJlc291cmNlIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgdG8gdXNlXG4gICAqIEZuOjpHZXRBdHQgZnVuY3Rpb25zIG9uIHRvIHJldHJpZXZlIGF2YWlsYWJpbGl0eSB6b25lXG4gICAqIG5hbWVzIGFuZCBpZHNcbiAgICovXG4gIG1hcHBlcjogQ3VzdG9tUmVzb3VyY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzPzogQXZhaWxhYmlsaXR5Wm9uZU1hcHBlclByb3BzLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLypcbiAgICBsZXQgY3VycmVudE5vZGU6IENvbnN0cnVjdCB8IHVuZGVmaW5lZCA9IHRoaXMubm9kZS5zY29wZTtcblxuICAgIHdoaWxlIChjdXJyZW50Tm9kZSAhPT0gdW5kZWZpbmVkICYmICEoY3VycmVudE5vZGUgaW5zdGFuY2VvZiBTdGFjaykpIHtcbiAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUubm9kZS5zY29wZTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudE5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgKGN1cnJlbnROb2RlIGFzIFN0YWNrKS5hZGRUcmFuc2Zvcm0oJ0FXUzo6TGFuZ3VhZ2VFeHRlbnNpb25zJyk7XG4gICAgfVxuICAgICovXG5cbiAgICBsZXQgeHJheU1hbmFnZWRQb2xpY3k6IElNYW5hZ2VkUG9saWN5ID0gbmV3IE1hbmFnZWRQb2xpY3koXG4gICAgICB0aGlzLFxuICAgICAgJ1hyYXlNYW5hZ2VkUG9saWN5JyxcbiAgICAgIHtcbiAgICAgICAgcGF0aDogJy9hem1hcHBlci8nLFxuICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICd4cmF5OlB1dFRyYWNlU2VnbWVudHMnLFxuICAgICAgICAgICAgICAneHJheTpQdXRUZWxlbWV0cnlSZWNvcmRzJyxcbiAgICAgICAgICAgICAgJ3hyYXk6R2V0U2FtcGxpbmdSdWxlcycsXG4gICAgICAgICAgICAgICd4cmF5OkdldFNhbXBsaW5nVGFyZ2V0cycsXG4gICAgICAgICAgICAgICd4cmF5OkdldFNhbXBsaW5nU3RhdGlzdGljU3VtbWFyaWVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBsZXQgZWMyTWFuYWdlZFBvbGljeTogSU1hbmFnZWRQb2xpY3kgPSBuZXcgTWFuYWdlZFBvbGljeShcbiAgICAgIHRoaXMsXG4gICAgICAnRUMyTWFuYWdlZFBvbGljeScsXG4gICAgICB7XG4gICAgICAgIHBhdGg6ICcvYXptYXBwZXIvJyxcbiAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgYWN0aW9uczogWydlYzI6RGVzY3JpYmVBdmFpbGFiaWxpdHlab25lcyddLFxuICAgICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgbGV0IGV4ZWN1dGlvblJvbGU6IElSb2xlID0gbmV3IFJvbGUodGhpcywgJ2V4ZWN1dGlvblJvbGUnLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBTZXJ2aWNlUHJpbmNpcGFsKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgcGF0aDogJy9hem1hcHBlci8nLFxuICAgICAgbWFuYWdlZFBvbGljaWVzOiBbeHJheU1hbmFnZWRQb2xpY3ksIGVjMk1hbmFnZWRQb2xpY3ldLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZmlsZTogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4vLi4vYXptYXBwZXIvc3JjL2luZGV4LnB5JyksXG4gICAgICAndXRmLTgnLFxuICAgICk7XG5cbiAgICB0aGlzLmZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKHRoaXMsICdBdmFpbGFiaWxpdHlab25lTWFwcGVyRnVuY3Rpb24nLCB7XG4gICAgICBydW50aW1lOiBSdW50aW1lLlBZVEhPTl8zXzEyLFxuICAgICAgY29kZTogQ29kZS5mcm9tSW5saW5lKGZpbGUpLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgcm9sZTogZXhlY3V0aW9uUm9sZSxcbiAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIHRyYWNpbmc6IFRyYWNpbmcuQUNUSVZFLFxuICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcygyMCksXG4gICAgICBtZW1vcnlTaXplOiA1MTIsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBSRUdJT046IEZuLnJlZignQVdTOjpSZWdpb24nKSxcbiAgICAgICAgUEFSVElUSU9OOiBGbi5yZWYoJ0FXUzo6UGFydGl0aW9uJyksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5sb2dHcm91cCA9IG5ldyBMb2dHcm91cCh0aGlzLCAnTG9nR3JvdXAnLCB7XG4gICAgICBsb2dHcm91cE5hbWU6IGAvYXdzL2xhbWJkYS8ke3RoaXMuZnVuY3Rpb24uZnVuY3Rpb25OYW1lfWAsXG4gICAgICByZXRlbnRpb246IFJldGVudGlvbkRheXMuT05FX0RBWSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICB9KTtcblxuICAgIG5ldyBNYW5hZ2VkUG9saWN5KHRoaXMsICdDbG91ZFdhdGNoTWFuYWdlZFBvbGljeScsIHtcbiAgICAgIHBhdGg6ICcvYXptYXBwZXIvJyxcbiAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogWydjbG91ZHdhdGNoOlB1dE1ldHJpY0RhdGEnXSxcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogWydsb2dzOkNyZWF0ZUxvZ1N0cmVhbScsICdsb2dzOlB1dExvZ0V2ZW50cyddLFxuICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgRm4uc3ViKFxuICAgICAgICAgICAgICAnYXJuOiR7QVdTOjpQYXJ0aXRpb259OmxvZ3M6JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH06bG9nLWdyb3VwOicsXG4gICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgdGhpcy5sb2dHcm91cC5sb2dHcm91cE5hbWUgK1xuICAgICAgICAgICAgICAnOionLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICAgIHJvbGVzOiBbZXhlY3V0aW9uUm9sZV0sXG4gICAgfSk7XG5cbiAgICB0aGlzLm1hcHBlciA9IG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLCAnQXZhaWxhYmlsaXR5Wm9uZU1hcHBlcicsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogdGhpcy5mdW5jdGlvbi5mdW5jdGlvbkFybixcbiAgICAgIHByb3BlcnRpZXM6XG4gICAgICAgIHByb3BzPy5hdmFpbGFiaWxpdHlab25lTmFtZXMgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8geyBBdmFpbGFiaWxpdHlab25lczogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZU5hbWVzIH1cbiAgICAgICAgICA6IHt9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIEF2YWlsYWJpbGl0eSBab25lIElkIGZvciB0aGUgZ2l2ZW4gQXZhaWxhYmlsaXR5IFpvbmUgTmFtZSBpbiB0aGlzIGFjY291bnRcbiAgICogQHBhcmFtIGF2YWlsYWJpbGl0eVpvbmVOYW1lXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBhdmFpbGFiaWxpdHlab25lSWQoYXZhaWxhYmlsaXR5Wm9uZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubWFwcGVyLmdldEF0dFN0cmluZyhhdmFpbGFiaWxpdHlab25lTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgQXZhaWxhYmlsaXR5IFpvbmUgTmFtZSBmb3IgdGhlIGdpdmVuIEF2YWlsYWJpbGl0eSBab25lIElkIGluIHRoaXMgYWNjb3VudFxuICAgKiBAcGFyYW0gYXZhaWxhYmlsaXR5Wm9uZUlkXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBhdmFpbGFiaWxpdHlab25lTmFtZShhdmFpbGFiaWxpdHlab25lSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubWFwcGVyLmdldEF0dFN0cmluZyhhdmFpbGFiaWxpdHlab25lSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHByZWZpeCBmb3IgdGhlIHJlZ2lvbiB1c2VkIHdpdGggQXZhaWxhYmlsaXR5IFpvbmUgSWRzLCBmb3IgZXhhbXBsZVxuICAgKiBpbiB1cy1lYXN0LTEsIHRoaXMgcmV0dXJucyBcInVzZTFcIlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcmVnaW9uUHJlZml4Rm9yQXZhaWxhYmlsaXR5Wm9uZUlkcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm1hcHBlci5nZXRBdHRTdHJpbmcoRm4ucmVmKCdBV1M6OlJlZ2lvbicpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGFycmF5IGZvciBBdmFpbGFiaWxpdHkgWm9uZSBJZHMgZm9yIHRoZSBzdXBwbGllZCBBdmFpbGFiaWxpdHkgWm9uZSBuYW1lcyxcbiAgICogdGhleSBhcmUgcmV0dXJuZWQgaW4gdGhlIHNhbWUgb3JkZXIgdGhlIG5hbWVzIHdlcmUgcHJvdmlkZWRcbiAgICogQHBhcmFtIGF2YWlsYWJpbGl0eVpvbmVOYW1lc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXZhaWxhYmlsaXR5Wm9uZUlkc0FzQXJyYXkoYXZhaWxhYmlsaXR5Wm9uZU5hbWVzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBsZXQgaWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdmFpbGFiaWxpdHlab25lTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlkcy5wdXNoKHRoaXMuYXZhaWxhYmlsaXR5Wm9uZUlkKGF2YWlsYWJpbGl0eVpvbmVOYW1lc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBpZHM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGNvbW1hIGRlbGltaXRlZCBsaXN0IG9mIEF2YWlsYWJpbGl0eSBab25lIElkcyBmb3IgdGhlIHN1cHBsaWVkXG4gICAqIEF2YWlsYWJpbGl0eSBab25lIG5hbWVzLiBZb3UgY2FuIHVzZSB0aGlzIHN0cmluZyB3aXRoIEZuLlNlbGVjdCh4LCBGbi5TcGxpdChcIixcIiwgYXpzKSkgdG9cbiAgICogZ2V0IGEgc3BlY2lmaWMgQXZhaWxhYmlsaXR5IFpvbmUgSWRcbiAgICogQHBhcmFtIGF2YWlsYWJpbGl0eVpvbmVOYW1lc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXZhaWxhYmlsaXR5Wm9uZUlkc0FzQ29tbWFEZWxpbWl0ZWRMaXN0KFxuICAgIGF2YWlsYWJpbGl0eVpvbmVOYW1lczogc3RyaW5nW10sXG4gICk6IHN0cmluZyB7XG4gICAgbGV0IGlkczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXZhaWxhYmlsaXR5Wm9uZU5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZHMucHVzaCh0aGlzLmF2YWlsYWJpbGl0eVpvbmVJZChhdmFpbGFiaWxpdHlab25lTmFtZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaWRzLmpvaW4oJywnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgY29tbWEgZGVsaW1pdGVkIGxpc3Qgb2YgQXZhaWxhYmlsaXR5IFpvbmUgSWRzIGZvciB0aGUgc3VwcGxpZWRcbiAgICogQXZhaWxhYmlsaXR5IFpvbmUgbmFtZXMuIFlvdSBjYW4gdXNlIHRoaXMgc3RyaW5nIHdpdGggRm4uU2VsZWN0KHgsIEZuLlNwbGl0KFwiLFwiLCBhenMpKSB0b1xuICAgKiBnZXQgYSBzcGVjaWZpYyBBdmFpbGFiaWxpdHkgWm9uZSBJZFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYWxsQXZhaWxhYmlsaXR5Wm9uZUlkc0FzQ29tbWFEZWxpbWl0ZWRMaXN0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubWFwcGVyLmdldEF0dFN0cmluZygnQWxsQXZhaWxhYmlsaXR5Wm9uZUlkcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWZlcmVuY2UgdGhhdCBjYW4gYmUgY2FzdCB0byBhIHN0cmluZyBhcnJheSB3aXRoIGFsbCBvZiB0aGVcbiAgICogQXZhaWxhYmlsaXR5IFpvbmUgSWRzXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBhbGxBdmFpbGFiaWxpdHlab25lSWRzQXNBcnJheSgpOiBSZWZlcmVuY2Uge1xuICAgIHJldHVybiB0aGlzLm1hcHBlci5nZXRBdHQoJ0FsbEF2YWlsYWJpbGl0eVpvbmVJZHNBcnJheScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgbGV0dGVyIGxpa2UgXCJmXCIgb3IgXCJhXCIsIHJldHVybnMgdGhlIEF2YWlsYWJpbGl0eSBab25lIElkIGZvciB0aGF0XG4gICAqIEF2YWlsYWJpbGl0eSBab25lIG5hbWUgaW4gdGhpcyBhY2NvdW50XG4gICAqIEBwYXJhbSBsZXR0ZXJcbiAgICogQHJldHVybnNcbiAgICovXG4gIGF2YWlsYWJpbGl0eVpvbmVJZEZyb21BdmFpbGFiaWxpdHlab25lTGV0dGVyKGxldHRlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5tYXBwZXIuZ2V0QXR0U3RyaW5nKGxldHRlcik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbGwgb2YgdGhlIEF2YWlsYWJpbGl0eSBab25lIG5hbWVzIGluIHRoaXMgUmVnaW9uIGFzIGEgY29tbWEgZGVsaW1pdGVkXG4gICAqIGxpc3QuIFlvdSBjYW4gdXNlIHRoaXMgc3RyaW5nIHdpdGggRm4uU2VsZWN0KHgsIEZuLlNwbGl0KFwiLFwiLCBhenMpKSB0b1xuICAgKiBnZXQgYSBzcGVjaWZpYyBBdmFpbGFiaWxpdHkgWm9uZSBOYW1lXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBhbGxBdmFpbGFiaWxpdHlab25lTmFtZXNBc0NvbW1hRGVsaW1pdGVkTGlzdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm1hcHBlci5nZXRBdHRTdHJpbmcoJ0FsbEF2YWlsYWJpbGl0eVpvbmVOYW1lcycpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { CustomResource, Reference } from 'aws-cdk-lib';
|
|
2
|
+
import { IFunction } from 'aws-cdk-lib/aws-lambda';
|
|
3
|
+
import { ILogGroup } from 'aws-cdk-lib/aws-logs';
|
|
4
|
+
import { IConstruct } from 'constructs';
|
|
5
|
+
/**
|
|
6
|
+
* A wrapper for the Availability Zone mapper construct
|
|
7
|
+
* that allows you to translate Availability Zone names
|
|
8
|
+
* to Availability Zone Ids and vice a versa using the
|
|
9
|
+
* mapping in the AWS account where this is deployed.
|
|
10
|
+
*/
|
|
11
|
+
export interface IAvailabilityZoneMapper extends IConstruct {
|
|
12
|
+
/**
|
|
13
|
+
* The function that does the mapping
|
|
14
|
+
*/
|
|
15
|
+
function: IFunction;
|
|
16
|
+
/**
|
|
17
|
+
* The log group for the function's logs
|
|
18
|
+
*/
|
|
19
|
+
logGroup: ILogGroup;
|
|
20
|
+
/**
|
|
21
|
+
* The custom resource that can be referenced to use
|
|
22
|
+
* Fn::GetAtt functions on to retrieve availability zone
|
|
23
|
+
* names and ids
|
|
24
|
+
*/
|
|
25
|
+
mapper: CustomResource;
|
|
26
|
+
/**
|
|
27
|
+
* Gets the Availability Zone Id for the given Availability Zone Name in this account
|
|
28
|
+
* @param availabilityZoneName
|
|
29
|
+
* @returns
|
|
30
|
+
*/
|
|
31
|
+
availabilityZoneId(availabilityZoneName: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* Gets the Availability Zone Name for the given Availability Zone Id in this account
|
|
34
|
+
* @param availabilityZoneId
|
|
35
|
+
* @returns
|
|
36
|
+
*/
|
|
37
|
+
availabilityZoneName(availabilityZoneId: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* Gets the prefix for the region used with Availability Zone Ids, for example
|
|
40
|
+
* in us-east-1, this returns "use1"
|
|
41
|
+
* @returns
|
|
42
|
+
*/
|
|
43
|
+
regionPrefixForAvailabilityZoneIds(): string;
|
|
44
|
+
/**
|
|
45
|
+
* Returns an array for Availability Zone Ids for the supplied Availability Zone names,
|
|
46
|
+
* they are returned in the same order the names were provided
|
|
47
|
+
* @param availabilityZoneNames
|
|
48
|
+
* @returns
|
|
49
|
+
*/
|
|
50
|
+
availabilityZoneIdsAsArray(availabilityZoneNames: string[]): string[];
|
|
51
|
+
/**
|
|
52
|
+
* Returns a comma delimited list of Availability Zone Ids for the supplied
|
|
53
|
+
* Availability Zone names. You can use this string with Fn.Select(x, Fn.Split(",", azs)) to
|
|
54
|
+
* get a specific Availability Zone Id
|
|
55
|
+
* @param availabilityZoneNames
|
|
56
|
+
* @returns
|
|
57
|
+
*/
|
|
58
|
+
availabilityZoneIdsAsCommaDelimitedList(availabilityZoneNames: string[]): string;
|
|
59
|
+
/**
|
|
60
|
+
* Returns a comma delimited list of Availability Zone Ids for the supplied
|
|
61
|
+
* Availability Zone names. You can use this string with Fn.Select(x, Fn.Split(",", azs)) to
|
|
62
|
+
* get a specific Availability Zone Id
|
|
63
|
+
* @returns
|
|
64
|
+
*/
|
|
65
|
+
allAvailabilityZoneIdsAsCommaDelimitedList(): string;
|
|
66
|
+
/**
|
|
67
|
+
* Returns a reference that can be cast to a string array with all of the
|
|
68
|
+
* Availability Zone Ids
|
|
69
|
+
* @returns
|
|
70
|
+
*/
|
|
71
|
+
allAvailabilityZoneIdsAsArray(): Reference;
|
|
72
|
+
/**
|
|
73
|
+
* Given a letter like "f" or "a", returns the Availability Zone Id for that
|
|
74
|
+
* Availability Zone name in this account
|
|
75
|
+
* @param letter
|
|
76
|
+
* @returns
|
|
77
|
+
*/
|
|
78
|
+
availabilityZoneIdFromAvailabilityZoneLetter(letter: string): string;
|
|
79
|
+
/**
|
|
80
|
+
* Gets all of the Availability Zone names in this Region as a comma delimited
|
|
81
|
+
* list. You can use this string with Fn.Select(x, Fn.Split(",", azs)) to
|
|
82
|
+
* get a specific Availability Zone Name
|
|
83
|
+
* @returns
|
|
84
|
+
*/
|
|
85
|
+
allAvailabilityZoneNamesAsCommaDelimitedList(): string;
|
|
86
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUF2YWlsYWJpbGl0eVpvbmVNYXBwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXptYXBwZXIvSUF2YWlsYWJpbGl0eVpvbmVNYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCB7IEN1c3RvbVJlc291cmNlLCBSZWZlcmVuY2UgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBJRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IElMb2dHcm91cCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuLyoqXG4gKiBBIHdyYXBwZXIgZm9yIHRoZSBBdmFpbGFiaWxpdHkgWm9uZSBtYXBwZXIgY29uc3RydWN0XG4gKiB0aGF0IGFsbG93cyB5b3UgdG8gdHJhbnNsYXRlIEF2YWlsYWJpbGl0eSBab25lIG5hbWVzXG4gKiB0byBBdmFpbGFiaWxpdHkgWm9uZSBJZHMgYW5kIHZpY2UgYSB2ZXJzYSB1c2luZyB0aGVcbiAqIG1hcHBpbmcgaW4gdGhlIEFXUyBhY2NvdW50IHdoZXJlIHRoaXMgaXMgZGVwbG95ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUF2YWlsYWJpbGl0eVpvbmVNYXBwZXIgZXh0ZW5kcyBJQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIG1hcHBpbmdcbiAgICovXG4gIGZ1bmN0aW9uOiBJRnVuY3Rpb247XG5cbiAgLyoqXG4gICAqIFRoZSBsb2cgZ3JvdXAgZm9yIHRoZSBmdW5jdGlvbidzIGxvZ3NcbiAgICovXG4gIGxvZ0dyb3VwOiBJTG9nR3JvdXA7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXN0b20gcmVzb3VyY2UgdGhhdCBjYW4gYmUgcmVmZXJlbmNlZCB0byB1c2VcbiAgICogRm46OkdldEF0dCBmdW5jdGlvbnMgb24gdG8gcmV0cmlldmUgYXZhaWxhYmlsaXR5IHpvbmVcbiAgICogbmFtZXMgYW5kIGlkc1xuICAgKi9cbiAgbWFwcGVyOiBDdXN0b21SZXNvdXJjZTtcblxuICAvKipcbiAgICogR2V0cyB0aGUgQXZhaWxhYmlsaXR5IFpvbmUgSWQgZm9yIHRoZSBnaXZlbiBBdmFpbGFiaWxpdHkgWm9uZSBOYW1lIGluIHRoaXMgYWNjb3VudFxuICAgKiBAcGFyYW0gYXZhaWxhYmlsaXR5Wm9uZU5hbWVcbiAgICogQHJldHVybnNcbiAgICovXG4gIGF2YWlsYWJpbGl0eVpvbmVJZChhdmFpbGFiaWxpdHlab25lTmFtZTogc3RyaW5nKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBdmFpbGFiaWxpdHkgWm9uZSBOYW1lIGZvciB0aGUgZ2l2ZW4gQXZhaWxhYmlsaXR5IFpvbmUgSWQgaW4gdGhpcyBhY2NvdW50XG4gICAqIEBwYXJhbSBhdmFpbGFiaWxpdHlab25lSWRcbiAgICogQHJldHVybnNcbiAgICovXG4gIGF2YWlsYWJpbGl0eVpvbmVOYW1lKGF2YWlsYWJpbGl0eVpvbmVJZDogc3RyaW5nKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBwcmVmaXggZm9yIHRoZSByZWdpb24gdXNlZCB3aXRoIEF2YWlsYWJpbGl0eSBab25lIElkcywgZm9yIGV4YW1wbGVcbiAgICogaW4gdXMtZWFzdC0xLCB0aGlzIHJldHVybnMgXCJ1c2UxXCJcbiAgICogQHJldHVybnNcbiAgICovXG4gIHJlZ2lvblByZWZpeEZvckF2YWlsYWJpbGl0eVpvbmVJZHMoKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGFycmF5IGZvciBBdmFpbGFiaWxpdHkgWm9uZSBJZHMgZm9yIHRoZSBzdXBwbGllZCBBdmFpbGFiaWxpdHkgWm9uZSBuYW1lcyxcbiAgICogdGhleSBhcmUgcmV0dXJuZWQgaW4gdGhlIHNhbWUgb3JkZXIgdGhlIG5hbWVzIHdlcmUgcHJvdmlkZWRcbiAgICogQHBhcmFtIGF2YWlsYWJpbGl0eVpvbmVOYW1lc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXZhaWxhYmlsaXR5Wm9uZUlkc0FzQXJyYXkoYXZhaWxhYmlsaXR5Wm9uZU5hbWVzOiBzdHJpbmdbXSk6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgY29tbWEgZGVsaW1pdGVkIGxpc3Qgb2YgQXZhaWxhYmlsaXR5IFpvbmUgSWRzIGZvciB0aGUgc3VwcGxpZWRcbiAgICogQXZhaWxhYmlsaXR5IFpvbmUgbmFtZXMuIFlvdSBjYW4gdXNlIHRoaXMgc3RyaW5nIHdpdGggRm4uU2VsZWN0KHgsIEZuLlNwbGl0KFwiLFwiLCBhenMpKSB0b1xuICAgKiBnZXQgYSBzcGVjaWZpYyBBdmFpbGFiaWxpdHkgWm9uZSBJZFxuICAgKiBAcGFyYW0gYXZhaWxhYmlsaXR5Wm9uZU5hbWVzXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBhdmFpbGFiaWxpdHlab25lSWRzQXNDb21tYURlbGltaXRlZExpc3QoXG4gICAgYXZhaWxhYmlsaXR5Wm9uZU5hbWVzOiBzdHJpbmdbXSxcbiAgKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgY29tbWEgZGVsaW1pdGVkIGxpc3Qgb2YgQXZhaWxhYmlsaXR5IFpvbmUgSWRzIGZvciB0aGUgc3VwcGxpZWRcbiAgICogQXZhaWxhYmlsaXR5IFpvbmUgbmFtZXMuIFlvdSBjYW4gdXNlIHRoaXMgc3RyaW5nIHdpdGggRm4uU2VsZWN0KHgsIEZuLlNwbGl0KFwiLFwiLCBhenMpKSB0b1xuICAgKiBnZXQgYSBzcGVjaWZpYyBBdmFpbGFiaWxpdHkgWm9uZSBJZFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYWxsQXZhaWxhYmlsaXR5Wm9uZUlkc0FzQ29tbWFEZWxpbWl0ZWRMaXN0KCk6IHN0cmluZztcblxuICAvKipcbiAgICogUmV0dXJucyBhIHJlZmVyZW5jZSB0aGF0IGNhbiBiZSBjYXN0IHRvIGEgc3RyaW5nIGFycmF5IHdpdGggYWxsIG9mIHRoZVxuICAgKiBBdmFpbGFiaWxpdHkgWm9uZSBJZHNcbiAgICogQHJldHVybnNcbiAgICovXG4gIGFsbEF2YWlsYWJpbGl0eVpvbmVJZHNBc0FycmF5KCk6IFJlZmVyZW5jZTtcblxuICAvKipcbiAgICogR2l2ZW4gYSBsZXR0ZXIgbGlrZSBcImZcIiBvciBcImFcIiwgcmV0dXJucyB0aGUgQXZhaWxhYmlsaXR5IFpvbmUgSWQgZm9yIHRoYXRcbiAgICogQXZhaWxhYmlsaXR5IFpvbmUgbmFtZSBpbiB0aGlzIGFjY291bnRcbiAgICogQHBhcmFtIGxldHRlclxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXZhaWxhYmlsaXR5Wm9uZUlkRnJvbUF2YWlsYWJpbGl0eVpvbmVMZXR0ZXIobGV0dGVyOiBzdHJpbmcpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdldHMgYWxsIG9mIHRoZSBBdmFpbGFiaWxpdHkgWm9uZSBuYW1lcyBpbiB0aGlzIFJlZ2lvbiBhcyBhIGNvbW1hIGRlbGltaXRlZFxuICAgKiBsaXN0LiBZb3UgY2FuIHVzZSB0aGlzIHN0cmluZyB3aXRoIEZuLlNlbGVjdCh4LCBGbi5TcGxpdChcIixcIiwgYXpzKSkgdG9cbiAgICogZ2V0IGEgc3BlY2lmaWMgQXZhaWxhYmlsaXR5IFpvbmUgTmFtZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYWxsQXZhaWxhYmlsaXR5Wm9uZU5hbWVzQXNDb21tYURlbGltaXRlZExpc3QoKTogc3RyaW5nO1xufVxuIl19
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Properties for the AZ mapper
|
|
3
|
+
*/
|
|
4
|
+
export interface AvailabilityZoneMapperProps {
|
|
5
|
+
/**
|
|
6
|
+
* The currently in use Availability Zone names which
|
|
7
|
+
* constrains the list of AZ IDs that are returned
|
|
8
|
+
*
|
|
9
|
+
* @default - No names are provided and the mapper returns
|
|
10
|
+
* all AZs in the region in its lists
|
|
11
|
+
*/
|
|
12
|
+
readonly availabilityZoneNames?: string[];
|
|
13
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXZhaWxhYmlsaXR5Wm9uZU1hcHBlclByb3BzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6bWFwcGVyL3Byb3BzL0F2YWlsYWJpbGl0eVpvbmVNYXBwZXJQcm9wcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciB0aGUgQVogbWFwcGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXZhaWxhYmlsaXR5Wm9uZU1hcHBlclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50bHkgaW4gdXNlIEF2YWlsYWJpbGl0eSBab25lIG5hbWVzIHdoaWNoXG4gICAqIGNvbnN0cmFpbnMgdGhlIGxpc3Qgb2YgQVogSURzIHRoYXQgYXJlIHJldHVybmVkXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gbmFtZXMgYXJlIHByb3ZpZGVkIGFuZCB0aGUgbWFwcGVyIHJldHVybnNcbiAgICogYWxsIEFacyBpbiB0aGUgcmVnaW9uIGluIGl0cyBsaXN0c1xuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZU5hbWVzPzogc3RyaW5nW107XG59XG4iXX0=
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import urllib3
|
|
4
|
+
import json
|
|
5
|
+
import os
|
|
6
|
+
import boto3
|
|
7
|
+
|
|
8
|
+
SUCCESS = "SUCCESS"
|
|
9
|
+
FAILED = "FAILED"
|
|
10
|
+
http = urllib3.PoolManager()
|
|
11
|
+
region = os.environ.get("AWS_REGION")
|
|
12
|
+
ec2 = boto3.client('ec2', region_name = region)
|
|
13
|
+
|
|
14
|
+
def handler(event, context):
|
|
15
|
+
try:
|
|
16
|
+
print(event)
|
|
17
|
+
if event['RequestType'] == 'Delete':
|
|
18
|
+
sendResponse(event, context, SUCCESS, {})
|
|
19
|
+
return
|
|
20
|
+
|
|
21
|
+
zone_names=[]
|
|
22
|
+
if 'ResourceProperties' in event and 'AvailabilityZones' in event['ResourceProperties'] and event['ResourceProperties']['AvailabilityZones'] != '':
|
|
23
|
+
zone_names = event['ResourceProperties']['AvailabilityZones']
|
|
24
|
+
|
|
25
|
+
in_use_azs = ec2.describe_availability_zones(Filters=[ { 'Name': 'zone-type', 'Values': [ 'availability-zone'] } ], ZoneNames = zone_names)
|
|
26
|
+
all_azs = ec2.describe_availability_zones(Filters=[ { 'Name': 'zone-type', 'Values': [ 'availability-zone'] } ])
|
|
27
|
+
|
|
28
|
+
az_map = {}
|
|
29
|
+
|
|
30
|
+
biggest_letter = sorted([x["ZoneName"][-1] for x in all_azs["AvailabilityZones"]], reverse=True)[0]
|
|
31
|
+
biggest_number = int(sorted([x["ZoneId"][-1] for x in all_azs["AvailabilityZones"]], reverse=True)[0])
|
|
32
|
+
|
|
33
|
+
for code in range(ord('a'), ord(biggest_letter) + 1):
|
|
34
|
+
az_map[chr(code)] = ""
|
|
35
|
+
|
|
36
|
+
for num in range(1, biggest_number + 1):
|
|
37
|
+
az_map["az" + str(num)] = ""
|
|
38
|
+
|
|
39
|
+
# Supply the region and get its shorthand
|
|
40
|
+
az_map[region] = all_azs["AvailabilityZones"][0]["ZoneId"].split("-")[0]
|
|
41
|
+
|
|
42
|
+
# Get the in use availability zone Ids as comma delimited list
|
|
43
|
+
az_map["InUseAvailabilityZoneIds"] = ",".join(x["ZoneId"] for x in in_use_azs["AvailabilityZones"])
|
|
44
|
+
|
|
45
|
+
# Get the in use availability zone Ids as an array
|
|
46
|
+
az_map["InUseAvailabilityZoneIdsArray"] = [x["ZoneId"] for x in in_use_azs["AvailabilityZones"]]
|
|
47
|
+
|
|
48
|
+
# Get the in use availability zone names as comma delimited list
|
|
49
|
+
az_map["InUseAvailabilityZoneNames"] = ",".join(x["ZoneName"] for x in in_use_azs["AvailabilityZones"])
|
|
50
|
+
|
|
51
|
+
# Get the in use availability zone names as an array
|
|
52
|
+
az_map["InUseAvailabilityZoneNames"] = ",".join(x["ZoneName"] for x in in_use_azs["AvailabilityZones"])
|
|
53
|
+
|
|
54
|
+
# Make a comma delimited list of name to id joined with a colon
|
|
55
|
+
az_map["InUseAvailabilityZoneNameToIdMap"] = ",".join(x["ZoneName"] + ":" + x["ZoneId"] for x in in_use_azs["AvailabilityZones"])
|
|
56
|
+
|
|
57
|
+
# Make a comma delimited list of name to id joined with a colon for all AZs
|
|
58
|
+
az_map["AllAvailabilityZoneNameToIdMap"] = ",".join(x["ZoneName"] + ":" + x["ZoneId"] for x in all_azs["AvailabilityZones"])
|
|
59
|
+
|
|
60
|
+
# All availability zones in the region
|
|
61
|
+
az_map["AllAvailabilityZoneIds"] = ",".join(x["ZoneId"] for x in all_azs["AvailabilityZones"])
|
|
62
|
+
az_map["AllAvailabilityZoneIdsArray"] = [x["ZoneId"] for x in all_azs["AvailabilityZones"]]
|
|
63
|
+
az_map["AllAvailabilityZoneNames"] = ",".join(x["ZoneName"] for x in all_azs["AvailabilityZones"])
|
|
64
|
+
az_map["AllAvailabilityZoneNamesArray"] = [x["ZoneName"] for x in all_azs["AvailabilityZones"]]
|
|
65
|
+
|
|
66
|
+
# Allow lookups for individual AZ names to Ids
|
|
67
|
+
for item in all_azs['AvailabilityZones']:
|
|
68
|
+
az_map[item['ZoneName']] = item['ZoneId']
|
|
69
|
+
az_map[item['ZoneId']] = item['ZoneName']
|
|
70
|
+
az_id = item['ZoneId'].split('-')[1].lower()
|
|
71
|
+
az_map[az_id] = item['ZoneName']
|
|
72
|
+
az_letter = item['ZoneName'][-1]
|
|
73
|
+
az_map[az_letter] = item['ZoneId']
|
|
74
|
+
|
|
75
|
+
print(json.dumps(az_map))
|
|
76
|
+
|
|
77
|
+
sendResponse(event, context, SUCCESS, az_map)
|
|
78
|
+
except Exception as e:
|
|
79
|
+
print(e)
|
|
80
|
+
sendResponse(event, context, FAILED, str(e))
|
|
81
|
+
return
|
|
82
|
+
|
|
83
|
+
def sendResponse(event, context, responseStatus, responseData, physicalResourceId=None, noEcho=False, reason=None):
|
|
84
|
+
responseUrl = event['ResponseURL']
|
|
85
|
+
print(responseUrl)
|
|
86
|
+
responseBody = {
|
|
87
|
+
'Status' : responseStatus,
|
|
88
|
+
'Reason' : reason or "See the details in CloudWatch Log Stream: {}".format(context.log_stream_name),
|
|
89
|
+
'PhysicalResourceId' : physicalResourceId or context.log_stream_name,
|
|
90
|
+
'StackId' : event['StackId'],
|
|
91
|
+
'RequestId' : event['RequestId'],
|
|
92
|
+
'LogicalResourceId' : event['LogicalResourceId'],
|
|
93
|
+
'NoEcho' : noEcho,
|
|
94
|
+
'Data' : responseData
|
|
95
|
+
}
|
|
96
|
+
json_responseBody = json.dumps(responseBody, default=str)
|
|
97
|
+
print("Response body:")
|
|
98
|
+
print(json_responseBody)
|
|
99
|
+
headers = {
|
|
100
|
+
'content-type' : '',
|
|
101
|
+
'content-length' : str(len(json_responseBody))
|
|
102
|
+
}
|
|
103
|
+
try:
|
|
104
|
+
response = http.request('PUT', responseUrl, headers=headers, body=json_responseBody)
|
|
105
|
+
print("Status code:", response.status)
|
|
106
|
+
except Exception as e:
|
|
107
|
+
print("send(...) failed executing http.request(..):", e)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { IFunction } from 'aws-cdk-lib/aws-lambda';
|
|
2
|
+
import { ILogGroup } from 'aws-cdk-lib/aws-logs';
|
|
3
|
+
import { Construct } from 'constructs';
|
|
4
|
+
import { ICanaryFunction } from './ICanaryFunction';
|
|
5
|
+
import { CanaryFunctionProps } from './props/CanaryFunctionProps';
|
|
6
|
+
export declare class CanaryFunction extends Construct implements ICanaryFunction {
|
|
7
|
+
/**
|
|
8
|
+
* The canary function
|
|
9
|
+
*/
|
|
10
|
+
function: IFunction;
|
|
11
|
+
/**
|
|
12
|
+
* The log group where the canarty logs will be sent
|
|
13
|
+
*/
|
|
14
|
+
logGroup: ILogGroup;
|
|
15
|
+
constructor(scope: Construct, id: string, props: CanaryFunctionProps);
|
|
16
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CanaryFunction = void 0;
|
|
4
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
5
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
6
|
+
const path = require("path");
|
|
7
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
8
|
+
const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
|
|
9
|
+
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
10
|
+
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
11
|
+
const aws_logs_1 = require("aws-cdk-lib/aws-logs");
|
|
12
|
+
const constructs_1 = require("constructs");
|
|
13
|
+
class CanaryFunction extends constructs_1.Construct {
|
|
14
|
+
constructor(scope, id, props) {
|
|
15
|
+
super(scope, id);
|
|
16
|
+
let xrayManagedPolicy = new aws_iam_1.ManagedPolicy(this, 'xrayManagedPolicy', {
|
|
17
|
+
path: '/canary/',
|
|
18
|
+
statements: [
|
|
19
|
+
new aws_iam_1.PolicyStatement({
|
|
20
|
+
actions: [
|
|
21
|
+
'xray:PutTraceSegments',
|
|
22
|
+
'xray:PutTelemetryRecords',
|
|
23
|
+
'xray:GetSamplingRules',
|
|
24
|
+
'xray:GetSamplingTargets',
|
|
25
|
+
'xray:GetSamplingStatisticSummaries',
|
|
26
|
+
],
|
|
27
|
+
effect: aws_iam_1.Effect.ALLOW,
|
|
28
|
+
resources: ['*'],
|
|
29
|
+
}),
|
|
30
|
+
],
|
|
31
|
+
});
|
|
32
|
+
let ec2ManagedPolicy = new aws_iam_1.ManagedPolicy(this, 'ec2ManagedPolicy', {
|
|
33
|
+
path: '/canary/',
|
|
34
|
+
statements: [
|
|
35
|
+
new aws_iam_1.PolicyStatement({
|
|
36
|
+
actions: [
|
|
37
|
+
'ec2:CreateNetworkInterface',
|
|
38
|
+
'ec2:DescribeNetworkInterfaces',
|
|
39
|
+
'ec2:DeleteNetworkInterface',
|
|
40
|
+
],
|
|
41
|
+
effect: aws_iam_1.Effect.ALLOW,
|
|
42
|
+
resources: ['*'],
|
|
43
|
+
}),
|
|
44
|
+
],
|
|
45
|
+
});
|
|
46
|
+
let executionRole = new aws_iam_1.Role(this, 'executionRole', {
|
|
47
|
+
assumedBy: new aws_iam_1.ServicePrincipal('lambda.amazonaws.com'),
|
|
48
|
+
path: '/canary/',
|
|
49
|
+
managedPolicies: [xrayManagedPolicy, ec2ManagedPolicy],
|
|
50
|
+
});
|
|
51
|
+
/*
|
|
52
|
+
let code: AssetCode = Code.fromAsset(path.join(__dirname, "src/"), {
|
|
53
|
+
bundling: {
|
|
54
|
+
//image: new Runtime('python3.12:latest-arm64', RuntimeFamily.PYTHON).bundlingImage,
|
|
55
|
+
image: Runtime.PYTHON_3_12.bundlingImage,
|
|
56
|
+
command: [
|
|
57
|
+
'bash', '-c',
|
|
58
|
+
'pip install --no-cache -r requirements.txt -t /asset-output && cp --archive --update . /asset-output',
|
|
59
|
+
],
|
|
60
|
+
platform: 'linux/arm64',
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
*/
|
|
64
|
+
let monitoringLayer = new aws_lambda_1.LayerVersion(this, 'MonitoringLayer', {
|
|
65
|
+
code: aws_lambda_1.Code.fromAsset(path.join(__dirname, '../monitoring/src/monitoring-layer.zip')),
|
|
66
|
+
compatibleArchitectures: [aws_lambda_1.Architecture.ARM_64],
|
|
67
|
+
compatibleRuntimes: [aws_lambda_1.Runtime.PYTHON_3_12],
|
|
68
|
+
});
|
|
69
|
+
if (props.vpc !== undefined && props.vpc != null) {
|
|
70
|
+
let sg = new aws_ec2_1.SecurityGroup(this, 'canarySecurityGroup', {
|
|
71
|
+
description: 'Allow canary to communicate with load balancer',
|
|
72
|
+
vpc: props.vpc,
|
|
73
|
+
allowAllOutbound: true,
|
|
74
|
+
});
|
|
75
|
+
this.function = new aws_lambda_1.Function(this, 'canary', {
|
|
76
|
+
runtime: aws_lambda_1.Runtime.PYTHON_3_12,
|
|
77
|
+
code: aws_lambda_1.Code.fromAsset(path.join(__dirname, 'src/canary.zip')),
|
|
78
|
+
handler: 'index.handler',
|
|
79
|
+
role: executionRole,
|
|
80
|
+
architecture: aws_lambda_1.Architecture.ARM_64,
|
|
81
|
+
tracing: aws_lambda_1.Tracing.ACTIVE,
|
|
82
|
+
timeout: aws_cdk_lib_1.Duration.seconds(240),
|
|
83
|
+
memorySize: 512,
|
|
84
|
+
layers: [monitoringLayer],
|
|
85
|
+
environment: {
|
|
86
|
+
REGION: aws_cdk_lib_1.Fn.ref('AWS::Region'),
|
|
87
|
+
PARTITION: aws_cdk_lib_1.Fn.ref('AWS::Partition'),
|
|
88
|
+
TIMEOUT: props.httpTimeout !== undefined
|
|
89
|
+
? props.httpTimeout.toSeconds().toString()
|
|
90
|
+
: '2',
|
|
91
|
+
IGNORE_SSL_ERRORS: (props.ignoreTlsErrors !== undefined && props.ignoreTlsErrors == true)
|
|
92
|
+
.toString()
|
|
93
|
+
.toLowerCase(),
|
|
94
|
+
},
|
|
95
|
+
vpc: props.vpc,
|
|
96
|
+
securityGroups: [sg],
|
|
97
|
+
vpcSubnets: props.subnetSelection,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
this.function = new aws_lambda_1.Function(this, 'canary', {
|
|
102
|
+
runtime: aws_lambda_1.Runtime.PYTHON_3_12,
|
|
103
|
+
code: aws_lambda_1.Code.fromAsset(path.join(__dirname, 'src/canary.zip')),
|
|
104
|
+
handler: 'index.handler',
|
|
105
|
+
role: executionRole,
|
|
106
|
+
architecture: aws_lambda_1.Architecture.ARM_64,
|
|
107
|
+
tracing: aws_lambda_1.Tracing.ACTIVE,
|
|
108
|
+
timeout: aws_cdk_lib_1.Duration.seconds(240),
|
|
109
|
+
memorySize: 512,
|
|
110
|
+
layers: [monitoringLayer],
|
|
111
|
+
environment: {
|
|
112
|
+
REGION: aws_cdk_lib_1.Fn.ref('AWS::Region'),
|
|
113
|
+
PARTITION: aws_cdk_lib_1.Fn.ref('AWS::Partition'),
|
|
114
|
+
TIMEOUT: props.httpTimeout !== undefined
|
|
115
|
+
? props.httpTimeout.toSeconds().toString()
|
|
116
|
+
: '2',
|
|
117
|
+
IGNORE_SSL_ERRORS: (props.ignoreTlsErrors !== undefined && props.ignoreTlsErrors == true)
|
|
118
|
+
.toString()
|
|
119
|
+
.toLowerCase(),
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
this.function.addPermission('invokePermission', {
|
|
124
|
+
action: 'lambda:InvokeFunction',
|
|
125
|
+
principal: new aws_iam_1.ServicePrincipal('events.amazonaws.com'),
|
|
126
|
+
sourceArn: aws_cdk_lib_1.Fn.sub('arn:${AWS::Partition}:events:${AWS::Region}:${AWS::AccountId}:rule/*'),
|
|
127
|
+
});
|
|
128
|
+
this.logGroup = new aws_logs_1.LogGroup(this, 'logGroup', {
|
|
129
|
+
logGroupName: `/aws/lambda/${this.function.functionName}`,
|
|
130
|
+
retention: aws_logs_1.RetentionDays.ONE_WEEK,
|
|
131
|
+
removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY,
|
|
132
|
+
});
|
|
133
|
+
new aws_iam_1.ManagedPolicy(this, 'cwManagedPolicy', {
|
|
134
|
+
path: '/canary/',
|
|
135
|
+
statements: [
|
|
136
|
+
new aws_iam_1.PolicyStatement({
|
|
137
|
+
actions: ['cloudwatch:PutMetricData'],
|
|
138
|
+
effect: aws_iam_1.Effect.ALLOW,
|
|
139
|
+
resources: ['*'],
|
|
140
|
+
}),
|
|
141
|
+
new aws_iam_1.PolicyStatement({
|
|
142
|
+
actions: ['logs:CreateLogStream', 'logs:PutLogEvents'],
|
|
143
|
+
effect: aws_iam_1.Effect.ALLOW,
|
|
144
|
+
resources: [this.logGroup.logGroupArn],
|
|
145
|
+
}),
|
|
146
|
+
],
|
|
147
|
+
roles: [executionRole],
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
exports.CanaryFunction = CanaryFunction;
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FuYXJ5RnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2FuYXJpZXMvQ2FuYXJ5RnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUN0Qyw2QkFBNkI7QUFDN0IsNkNBQTBEO0FBQzFELGlEQUFvRTtBQUNwRSxpREFRNkI7QUFDN0IsdURBU2dDO0FBQ2hDLG1EQUEwRTtBQUMxRSwyQ0FBdUM7QUFJdkMsTUFBYSxjQUFlLFNBQVEsc0JBQVM7SUFXM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEwQjtRQUNsRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksaUJBQWlCLEdBQW1CLElBQUksdUJBQWEsQ0FDdkQsSUFBSSxFQUNKLG1CQUFtQixFQUNuQjtZQUNFLElBQUksRUFBRSxVQUFVO1lBQ2hCLFVBQVUsRUFBRTtnQkFDVixJQUFJLHlCQUFlLENBQUM7b0JBQ2xCLE9BQU8sRUFBRTt3QkFDUCx1QkFBdUI7d0JBQ3ZCLDBCQUEwQjt3QkFDMUIsdUJBQXVCO3dCQUN2Qix5QkFBeUI7d0JBQ3pCLG9DQUFvQztxQkFDckM7b0JBQ0QsTUFBTSxFQUFFLGdCQUFNLENBQUMsS0FBSztvQkFDcEIsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO2lCQUNqQixDQUFDO2FBQ0g7U0FDRixDQUNGLENBQUM7UUFDRixJQUFJLGdCQUFnQixHQUFHLElBQUksdUJBQWEsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7WUFDakUsSUFBSSxFQUFFLFVBQVU7WUFDaEIsVUFBVSxFQUFFO2dCQUNWLElBQUkseUJBQWUsQ0FBQztvQkFDbEIsT0FBTyxFQUFFO3dCQUNQLDRCQUE0Qjt3QkFDNUIsK0JBQStCO3dCQUMvQiw0QkFBNEI7cUJBQzdCO29CQUNELE1BQU0sRUFBRSxnQkFBTSxDQUFDLEtBQUs7b0JBQ3BCLFNBQVMsRUFBRSxD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QkFBYSxDQUFDLFFBQVE7WUFDakMsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztTQUNyQyxDQUFDLENBQUM7UUFFSCxJQUFJLHVCQUFhLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1lBQ3pDLElBQUksRUFBRSxVQUFVO1lBQ2hCLFVBQVUsRUFBRTtnQkFDVixJQUFJLHlCQUFlLENBQUM7b0JBQ2xCLE9BQU8sRUFBRSxDQUFDLDBCQUEwQixDQUFDO29CQUNyQyxNQUFNLEVBQUUsZ0JBQU0sQ0FBQyxLQUFLO29CQUNwQixTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7aUJBQ2pCLENBQUM7Z0JBQ0YsSUFBSSx5QkFBZSxDQUFDO29CQUNsQixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxtQkFBbUIsQ0FBQztvQkFDdEQsTUFBTSxFQUFFLGdCQUFNLENBQUMsS0FBSztvQkFDcEIsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7aUJBQ3ZDLENBQUM7YUFDSDtZQUNELEtBQUssRUFBRSxDQUFDLGFBQWEsQ0FBQztTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUE1S0Qsd0NBNEtDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IER1cmF0aW9uLCBGbiwgUmVtb3ZhbFBvbGljeSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IElTZWN1cml0eUdyb3VwLCBTZWN1cml0eUdyb3VwIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQge1xuICBFZmZlY3QsXG4gIElNYW5hZ2VkUG9saWN5LFxuICBJUm9sZSxcbiAgTWFuYWdlZFBvbGljeSxcbiAgUG9saWN5U3RhdGVtZW50LFxuICBSb2xlLFxuICBTZXJ2aWNlUHJpbmNpcGFsLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7XG4gIEFyY2hpdGVjdHVyZSxcbiAgQ29kZSxcbiAgRnVuY3Rpb24sXG4gIElGdW5jdGlvbixcbiAgSUxheWVyVmVyc2lvbixcbiAgTGF5ZXJWZXJzaW9uLFxuICBSdW50aW1lLFxuICBUcmFjaW5nLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IElMb2dHcm91cCwgTG9nR3JvdXAsIFJldGVudGlvbkRheXMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IElDYW5hcnlGdW5jdGlvbiB9IGZyb20gJy4vSUNhbmFyeUZ1bmN0aW9uJztcbmltcG9ydCB7IENhbmFyeUZ1bmN0aW9uUHJvcHMgfSBmcm9tICcuL3Byb3BzL0NhbmFyeUZ1bmN0aW9uUHJvcHMnO1xuXG5leHBvcnQgY2xhc3MgQ2FuYXJ5RnVuY3Rpb24gZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJQ2FuYXJ5RnVuY3Rpb24ge1xuICAvKipcbiAgICogVGhlIGNhbmFyeSBmdW5jdGlvblxuICAgKi9cbiAgZnVuY3Rpb246IElGdW5jdGlvbjtcblxuICAvKipcbiAgICogVGhlIGxvZyBncm91cCB3aGVyZSB0aGUgY2FuYXJ0eSBsb2dzIHdpbGwgYmUgc2VudFxuICAgKi9cbiAgbG9nR3JvdXA6IElMb2dHcm91cDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ2FuYXJ5RnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBsZXQgeHJheU1hbmFnZWRQb2xpY3k6IElNYW5hZ2VkUG9saWN5ID0gbmV3IE1hbmFnZWRQb2xpY3koXG4gICAgICB0aGlzLFxuICAgICAgJ3hyYXlNYW5hZ2VkUG9saWN5JyxcbiAgICAgIHtcbiAgICAgICAgcGF0aDogJy9jYW5hcnkvJyxcbiAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAneHJheTpQdXRUcmFjZVNlZ21lbnRzJyxcbiAgICAgICAgICAgICAgJ3hyYXk6UHV0VGVsZW1ldHJ5UmVjb3JkcycsXG4gICAgICAgICAgICAgICd4cmF5OkdldFNhbXBsaW5nUnVsZXMnLFxuICAgICAgICAgICAgICAneHJheTpHZXRTYW1wbGluZ1RhcmdldHMnLFxuICAgICAgICAgICAgICAneHJheTpHZXRTYW1wbGluZ1N0YXRpc3RpY1N1bW1hcmllcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICApO1xuICAgIGxldCBlYzJNYW5hZ2VkUG9saWN5ID0gbmV3IE1hbmFnZWRQb2xpY3kodGhpcywgJ2VjMk1hbmFnZWRQb2xpY3knLCB7XG4gICAgICBwYXRoOiAnL2NhbmFyeS8nLFxuICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAnZWMyOkNyZWF0ZU5ldHdvcmtJbnRlcmZhY2UnLFxuICAgICAgICAgICAgJ2VjMjpEZXNjcmliZU5ldHdvcmtJbnRlcmZhY2VzJyxcbiAgICAgICAgICAgICdlYzI6RGVsZXRlTmV0d29ya0ludGVyZmFjZScsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBsZXQgZXhlY3V0aW9uUm9sZTogSVJvbGUgPSBuZXcgUm9sZSh0aGlzLCAnZXhlY3V0aW9uUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2xhbWJkYS5hbWF6b25hd3MuY29tJyksXG4gICAgICBwYXRoOiAnL2NhbmFyeS8nLFxuICAgICAgbWFuYWdlZFBvbGljaWVzOiBbeHJheU1hbmFnZWRQb2xpY3ksIGVjMk1hbmFnZWRQb2xpY3ldLFxuICAgIH0pO1xuXG4gICAgLypcbiAgICBsZXQgY29kZTogQXNzZXRDb2RlID0gQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgXCJzcmMvXCIpLCB7XG4gICAgICBidW5kbGluZzoge1xuICAgICAgICAvL2ltYWdlOiBuZXcgUnVudGltZSgncHl0aG9uMy4xMjpsYXRlc3QtYXJtNjQnLCBSdW50aW1lRmFtaWx5LlBZVEhPTikuYnVuZGxpbmdJbWFnZSxcbiAgICAgICAgaW1hZ2U6IFJ1bnRpbWUuUFlUSE9OXzNfMTIuYnVuZGxpbmdJbWFnZSxcbiAgICAgICAgY29tbWFuZDogW1xuICAgICAgICAgICdiYXNoJywgJy1jJyxcbiAgICAgICAgICAncGlwIGluc3RhbGwgLS1uby1jYWNoZSAtciByZXF1aXJlbWVudHMudHh0IC10IC9hc3NldC1vdXRwdXQgJiYgY3AgLS1hcmNoaXZlIC0tdXBkYXRlIC4gL2Fzc2V0LW91dHB1dCcsXG4gICAgICAgIF0sXG4gICAgICAgIHBsYXRmb3JtOiAnbGludXgvYXJtNjQnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICAqL1xuICAgIGxldCBtb25pdG9yaW5nTGF5ZXI6IElMYXllclZlcnNpb24gPSBuZXcgTGF5ZXJWZXJzaW9uKFxuICAgICAgdGhpcyxcbiAgICAgICdNb25pdG9yaW5nTGF5ZXInLFxuICAgICAge1xuICAgICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChcbiAgICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vbW9uaXRvcmluZy9zcmMvbW9uaXRvcmluZy1sYXllci56aXAnKSxcbiAgICAgICAgKSxcbiAgICAgICAgY29tcGF0aWJsZUFyY2hpdGVjdHVyZXM6IFtBcmNoaXRlY3R1cmUuQVJNXzY0XSxcbiAgICAgICAgY29tcGF0aWJsZVJ1bnRpbWVzOiBbUnVudGltZS5QWVRIT05fM18xMl0sXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBpZiAocHJvcHMudnBjICE9PSB1bmRlZmluZWQgJiYgcHJvcHMudnBjICE9IG51bGwpIHtcbiAgICAgIGxldCBzZzogSVNlY3VyaXR5R3JvdXAgPSBuZXcgU2VjdXJpdHlHcm91cCh0aGlzLCAnY2FuYXJ5U2VjdXJpdHlHcm91cCcsIHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdBbGxvdyBjYW5hcnkgdG8gY29tbXVuaWNhdGUgd2l0aCBsb2FkIGJhbGFuY2VyJyxcbiAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5mdW5jdGlvbiA9IG5ldyBGdW5jdGlvbih0aGlzLCAnY2FuYXJ5Jywge1xuICAgICAgICBydW50aW1lOiBSdW50aW1lLlBZVEhPTl8zXzEyLFxuICAgICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChwYXRoLmpvaW4oX19kaXJuYW1lLCAnc3JjL2NhbmFyeS56aXAnKSksXG4gICAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgICAgcm9sZTogZXhlY3V0aW9uUm9sZSxcbiAgICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgICB0cmFjaW5nOiBUcmFjaW5nLkFDVElWRSxcbiAgICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcygyNDApLFxuICAgICAgICBtZW1vcnlTaXplOiA1MTIsXG4gICAgICAgIGxheWVyczogW21vbml0b3JpbmdMYXllcl0sXG4gICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgUkVHSU9OOiBGbi5yZWYoJ0FXUzo6UmVnaW9uJyksXG4gICAgICAgICAgUEFSVElUSU9OOiBGbi5yZWYoJ0FXUzo6UGFydGl0aW9uJyksXG4gICAgICAgICAgVElNRU9VVDpcbiAgICAgICAgICAgIHByb3BzLmh0dHBUaW1lb3V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBwcm9wcy5odHRwVGltZW91dC50b1NlY29uZHMoKS50b1N0cmluZygpXG4gICAgICAgICAgICAgIDogJzInLFxuICAgICAgICAgIElHTk9SRV9TU0xfRVJST1JTOiAoXG4gICAgICAgICAgICBwcm9wcy5pZ25vcmVUbHNFcnJvcnMgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5pZ25vcmVUbHNFcnJvcnMgPT0gdHJ1ZVxuICAgICAgICAgIClcbiAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgfSxcbiAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgIHNlY3VyaXR5R3JvdXBzOiBbc2ddLFxuICAgICAgICB2cGNTdWJuZXRzOiBwcm9wcy5zdWJuZXRTZWxlY3Rpb24sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mdW5jdGlvbiA9IG5ldyBGdW5jdGlvbih0aGlzLCAnY2FuYXJ5Jywge1xuICAgICAgICBydW50aW1lOiBSdW50aW1lLlBZVEhPTl8zXzEyLFxuICAgICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChwYXRoLmpvaW4oX19kaXJuYW1lLCAnc3JjL2NhbmFyeS56aXAnKSksXG4gICAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgICAgcm9sZTogZXhlY3V0aW9uUm9sZSxcbiAgICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgICB0cmFjaW5nOiBUcmFjaW5nLkFDVElWRSxcbiAgICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcygyNDApLFxuICAgICAgICBtZW1vcnlTaXplOiA1MTIsXG4gICAgICAgIGxheWVyczogW21vbml0b3JpbmdMYXllcl0sXG4gICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgUkVHSU9OOiBGbi5yZWYoJ0FXUzo6UmVnaW9uJyksXG4gICAgICAgICAgUEFSVElUSU9OOiBGbi5yZWYoJ0FXUzo6UGFydGl0aW9uJyksXG4gICAgICAgICAgVElNRU9VVDpcbiAgICAgICAgICAgIHByb3BzLmh0dHBUaW1lb3V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBwcm9wcy5odHRwVGltZW91dC50b1NlY29uZHMoKS50b1N0cmluZygpXG4gICAgICAgICAgICAgIDogJzInLFxuICAgICAgICAgIElHTk9SRV9TU0xfRVJST1JTOiAoXG4gICAgICAgICAgICBwcm9wcy5pZ25vcmVUbHNFcnJvcnMgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5pZ25vcmVUbHNFcnJvcnMgPT0gdHJ1ZVxuICAgICAgICAgIClcbiAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZnVuY3Rpb24uYWRkUGVybWlzc2lvbignaW52b2tlUGVybWlzc2lvbicsIHtcbiAgICAgIGFjdGlvbjogJ2xhbWJkYTpJbnZva2VGdW5jdGlvbicsXG4gICAgICBwcmluY2lwYWw6IG5ldyBTZXJ2aWNlUHJpbmNpcGFsKCdldmVudHMuYW1hem9uYXdzLmNvbScpLFxuICAgICAgc291cmNlQXJuOiBGbi5zdWIoXG4gICAgICAgICdhcm46JHtBV1M6OlBhcnRpdGlvbn06ZXZlbnRzOiR7QVdTOjpSZWdpb259OiR7QVdTOjpBY2NvdW50SWR9OnJ1bGUvKicsXG4gICAgICApLFxuICAgIH0pO1xuXG4gICAgdGhpcy5sb2dHcm91cCA9IG5ldyBMb2dHcm91cCh0aGlzLCAnbG9nR3JvdXAnLCB7XG4gICAgICBsb2dHcm91cE5hbWU6IGAvYXdzL2xhbWJkYS8ke3RoaXMuZnVuY3Rpb24uZnVuY3Rpb25OYW1lfWAsXG4gICAgICByZXRlbnRpb246IFJldGVudGlvbkRheXMuT05FX1dFRUssXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgfSk7XG5cbiAgICBuZXcgTWFuYWdlZFBvbGljeSh0aGlzLCAnY3dNYW5hZ2VkUG9saWN5Jywge1xuICAgICAgcGF0aDogJy9jYW5hcnkvJyxcbiAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogWydjbG91ZHdhdGNoOlB1dE1ldHJpY0RhdGEnXSxcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogWydsb2dzOkNyZWF0ZUxvZ1N0cmVhbScsICdsb2dzOlB1dExvZ0V2ZW50cyddLFxuICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIHJlc291cmNlczogW3RoaXMubG9nR3JvdXAubG9nR3JvdXBBcm5dLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgICByb2xlczogW2V4ZWN1dGlvblJvbGVdLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|