@cdklabs/cdk-appmod-catalog-blueprints 1.0.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.
Files changed (105) hide show
  1. package/.jsii +8644 -0
  2. package/LICENSE +202 -0
  3. package/README.md +212 -0
  4. package/lib/document-processing/agentic-document-processing.d.ts +16 -0
  5. package/lib/document-processing/agentic-document-processing.js +90 -0
  6. package/lib/document-processing/base-document-processing.d.ts +189 -0
  7. package/lib/document-processing/base-document-processing.js +509 -0
  8. package/lib/document-processing/bedrock-document-processing.d.ts +167 -0
  9. package/lib/document-processing/bedrock-document-processing.js +297 -0
  10. package/lib/document-processing/index.d.ts +3 -0
  11. package/lib/document-processing/index.js +20 -0
  12. package/lib/document-processing/resources/default-bedrock-invoke/index.py +63 -0
  13. package/lib/document-processing/resources/default-bedrock-invoke/requirements.txt +4 -0
  14. package/lib/document-processing/resources/default-doc-retrieval-lambda/index.mjs +92 -0
  15. package/lib/document-processing/resources/default-doc-retrieval-lambda/package.json +10 -0
  16. package/lib/document-processing/resources/default-error-handler/index.js +46 -0
  17. package/lib/document-processing/resources/default-error-handler/package.json +4 -0
  18. package/lib/document-processing/resources/default-image-processor/classifier.mjs +665 -0
  19. package/lib/document-processing/resources/default-image-processor/extractors.mjs +465 -0
  20. package/lib/document-processing/resources/default-image-processor/index.mjs +143 -0
  21. package/lib/document-processing/resources/default-image-processor/package-lock.json +12 -0
  22. package/lib/document-processing/resources/default-image-processor/package.json +4 -0
  23. package/lib/document-processing/resources/default-image-validator/index.mjs +76 -0
  24. package/lib/document-processing/resources/default-image-validator/package-lock.json +154 -0
  25. package/lib/document-processing/resources/default-image-validator/package.json +7 -0
  26. package/lib/document-processing/resources/default-pdf-processor/index.js +46 -0
  27. package/lib/document-processing/resources/default-pdf-validator/index.js +36 -0
  28. package/lib/document-processing/resources/default-sqs-consumer/index.py +111 -0
  29. package/lib/document-processing/resources/default-sqs-consumer/requirements.txt +4 -0
  30. package/lib/document-processing/resources/default-sqs-consumer/sample_payload.json +20 -0
  31. package/lib/document-processing/resources/default-sqs-consumer/sample_payload_multi.json +24 -0
  32. package/lib/document-processing/resources/default-strands-agent/index.py +111 -0
  33. package/lib/document-processing/resources/default-strands-agent/requirements.txt +6 -0
  34. package/lib/document-processing/tests/agentic-document-processing-nag.test.d.ts +1 -0
  35. package/lib/document-processing/tests/agentic-document-processing-nag.test.js +107 -0
  36. package/lib/document-processing/tests/agentic-document-processing.test.d.ts +1 -0
  37. package/lib/document-processing/tests/agentic-document-processing.test.js +125 -0
  38. package/lib/document-processing/tests/bedrock-document-processing-nag.test.d.ts +1 -0
  39. package/lib/document-processing/tests/bedrock-document-processing-nag.test.js +101 -0
  40. package/lib/document-processing/tests/bedrock-document-processing.test.d.ts +1 -0
  41. package/lib/document-processing/tests/bedrock-document-processing.test.js +79 -0
  42. package/lib/framework/custom-resource/default-runtimes.d.ts +21 -0
  43. package/lib/framework/custom-resource/default-runtimes.js +34 -0
  44. package/lib/framework/custom-resource/index.d.ts +1 -0
  45. package/lib/framework/custom-resource/index.js +18 -0
  46. package/lib/framework/foundation/access-log.d.ts +69 -0
  47. package/lib/framework/foundation/access-log.js +121 -0
  48. package/lib/framework/foundation/eventbridge-broker.d.ts +18 -0
  49. package/lib/framework/foundation/eventbridge-broker.js +42 -0
  50. package/lib/framework/foundation/index.d.ts +3 -0
  51. package/lib/framework/foundation/index.js +20 -0
  52. package/lib/framework/foundation/network.d.ts +19 -0
  53. package/lib/framework/foundation/network.js +83 -0
  54. package/lib/framework/index.d.ts +2 -0
  55. package/lib/framework/index.js +19 -0
  56. package/lib/framework/quickstart/base-quickstart.d.ts +30 -0
  57. package/lib/framework/quickstart/base-quickstart.js +30 -0
  58. package/lib/index.d.ts +4 -0
  59. package/lib/index.js +21 -0
  60. package/lib/tsconfig.tsbuildinfo +1 -0
  61. package/lib/utilities/cdk-nag-config.d.ts +42 -0
  62. package/lib/utilities/cdk-nag-config.js +194 -0
  63. package/lib/utilities/data-loader-lambda/index.py +282 -0
  64. package/lib/utilities/data-loader-lambda/requirements.txt +3 -0
  65. package/lib/utilities/data-loader.d.ts +173 -0
  66. package/lib/utilities/data-loader.js +447 -0
  67. package/lib/utilities/index.d.ts +3 -0
  68. package/lib/utilities/index.js +20 -0
  69. package/lib/utilities/lambda-iam-utils.d.ts +145 -0
  70. package/lib/utilities/lambda-iam-utils.js +235 -0
  71. package/lib/utilities/lambda_layers/data-masking/layer-construct.d.ts +42 -0
  72. package/lib/utilities/lambda_layers/data-masking/layer-construct.js +53 -0
  73. package/lib/utilities/lambda_layers/data-masking/layer-construct.ts +88 -0
  74. package/lib/utilities/observability/bedrock-observability.d.ts +18 -0
  75. package/lib/utilities/observability/bedrock-observability.js +131 -0
  76. package/lib/utilities/observability/cloudfront-distribution-observability-property-injector.d.ts +6 -0
  77. package/lib/utilities/observability/cloudfront-distribution-observability-property-injector.js +22 -0
  78. package/lib/utilities/observability/index.d.ts +6 -0
  79. package/lib/utilities/observability/index.js +25 -0
  80. package/lib/utilities/observability/lambda-observability-property-injector.d.ts +8 -0
  81. package/lib/utilities/observability/lambda-observability-property-injector.js +43 -0
  82. package/lib/utilities/observability/log-group-data-protection-props.d.ts +19 -0
  83. package/lib/utilities/observability/log-group-data-protection-props.js +5 -0
  84. package/lib/utilities/observability/observability.d.ts +83 -0
  85. package/lib/utilities/observability/observability.js +278 -0
  86. package/lib/utilities/observability/observable.d.ts +32 -0
  87. package/lib/utilities/observability/observable.js +3 -0
  88. package/lib/utilities/observability/powertools-config.d.ts +3 -0
  89. package/lib/utilities/observability/powertools-config.js +25 -0
  90. package/lib/utilities/observability/resources/bedrock-manage-logging-configuration/index.py +27 -0
  91. package/lib/utilities/observability/state-machine-observability-property-injector.d.ts +8 -0
  92. package/lib/utilities/observability/state-machine-observability-property-injector.js +49 -0
  93. package/lib/utilities/tests/data-loader-nag.test.d.ts +1 -0
  94. package/lib/utilities/tests/data-loader-nag.test.js +432 -0
  95. package/lib/utilities/tests/data-loader.test.d.ts +1 -0
  96. package/lib/utilities/tests/data-loader.test.js +284 -0
  97. package/lib/webapp/frontend-construct.d.ts +136 -0
  98. package/lib/webapp/frontend-construct.js +253 -0
  99. package/lib/webapp/index.d.ts +1 -0
  100. package/lib/webapp/index.js +18 -0
  101. package/lib/webapp/tests/frontend-construct-nag.test.d.ts +1 -0
  102. package/lib/webapp/tests/frontend-construct-nag.test.js +266 -0
  103. package/lib/webapp/tests/frontend-construct.test.d.ts +1 -0
  104. package/lib/webapp/tests/frontend-construct.test.js +385 -0
  105. package/package.json +183 -0
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BedrockObservability = void 0;
4
+ const path = require("path");
5
+ const aws_lambda_python_alpha_1 = require("@aws-cdk/aws-lambda-python-alpha");
6
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
7
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
8
+ const aws_kms_1 = require("aws-cdk-lib/aws-kms");
9
+ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
10
+ const aws_logs_1 = require("aws-cdk-lib/aws-logs");
11
+ const custom_resources_1 = require("aws-cdk-lib/custom-resources");
12
+ const constructs_1 = require("constructs");
13
+ const framework_1 = require("../../framework");
14
+ const lambda_iam_utils_1 = require("../lambda-iam-utils");
15
+ class BedrockObservability extends constructs_1.Construct {
16
+ constructor(scope, id, props) {
17
+ super(scope, id);
18
+ const { region, account } = aws_cdk_lib_1.Stack.of(this);
19
+ const logGroupName = `/aws/bedrock/${aws_cdk_lib_1.Names.uniqueResourceName(this, {
20
+ maxLength: 100,
21
+ })}`;
22
+ const logGroupArn = `arn:aws:logs:${region}:${account}:log-group:${logGroupName}`;
23
+ const logStreamArn = `${logGroupArn}:log-stream:aws/bedrock/modelinvocations`;
24
+ this.encryptionKey = props?.logGroupDataProtection?.logGroupEncryptionKey || new aws_kms_1.Key(this, 'BedrockInvocationLoggingEncryptionKey', {
25
+ removalPolicy: props?.removalPolicy || aws_cdk_lib_1.RemovalPolicy.DESTROY,
26
+ enableKeyRotation: true,
27
+ });
28
+ this.encryptionKey.grantEncryptDecrypt(new aws_iam_1.ServicePrincipal('logs.amazonaws.com', {
29
+ conditions: {
30
+ ArnEquals: {
31
+ 'kms:EncryptionContext:aws:logs:arn': logGroupArn,
32
+ },
33
+ },
34
+ }));
35
+ this.logGroup = new aws_logs_1.LogGroup(this, 'BedrockInvocationLogGroup', {
36
+ logGroupName,
37
+ encryptionKey: this.encryptionKey,
38
+ removalPolicy: props?.removalPolicy || aws_cdk_lib_1.RemovalPolicy.DESTROY,
39
+ dataProtectionPolicy: props?.logGroupDataProtection?.dataProtectionIdentifiers ? new aws_logs_1.DataProtectionPolicy({
40
+ identifiers: props?.logGroupDataProtection?.dataProtectionIdentifiers,
41
+ }) : undefined,
42
+ });
43
+ this.loggingRole = props?.loggingRole || new aws_iam_1.Role(this, 'BedrockInvocationLoggingRole', {
44
+ assumedBy: new aws_iam_1.ServicePrincipal('bedrock.amazonaws.com', {
45
+ conditions: {
46
+ StringEquals: {
47
+ 'aws:SourceAccount': account,
48
+ },
49
+ ArnLike: {
50
+ 'aws:SourceArn': `arn:aws:bedrock:${region}:${account}:*`,
51
+ },
52
+ },
53
+ }),
54
+ inlinePolicies: {
55
+ BedrockLoggingPolicy: new aws_iam_1.PolicyDocument({
56
+ statements: [
57
+ new aws_iam_1.PolicyStatement({
58
+ effect: aws_iam_1.Effect.ALLOW,
59
+ actions: [
60
+ 'logs:CreateLogStream',
61
+ 'logs:PutLogEvents',
62
+ ],
63
+ resources: [
64
+ logStreamArn,
65
+ ],
66
+ }),
67
+ ],
68
+ }),
69
+ },
70
+ });
71
+ // Lambda function role with least privilege
72
+ const lambdaRole = new aws_iam_1.Role(this, 'BedrockLoggingConfigRole', {
73
+ assumedBy: new aws_iam_1.ServicePrincipal('lambda.amazonaws.com'),
74
+ inlinePolicies: {
75
+ BedrockLoggingConfigPolicy: new aws_iam_1.PolicyDocument({
76
+ statements: [
77
+ new aws_iam_1.PolicyStatement({
78
+ effect: aws_iam_1.Effect.ALLOW,
79
+ actions: [
80
+ 'bedrock:GetModelInvocationLoggingConfiguration',
81
+ 'bedrock:PutModelInvocationLoggingConfiguration',
82
+ ],
83
+ resources: ['*'],
84
+ }),
85
+ new aws_iam_1.PolicyStatement({
86
+ effect: aws_iam_1.Effect.ALLOW,
87
+ actions: [
88
+ 'iam:PassRole',
89
+ ],
90
+ resources: [
91
+ this.loggingRole.roleArn,
92
+ ],
93
+ }),
94
+ ],
95
+ }),
96
+ },
97
+ });
98
+ const generatedLogPermissions = lambda_iam_utils_1.LambdaIamUtils.createLogsPermissions({
99
+ account,
100
+ functionName: 'bedrock-manage-logging-function',
101
+ region,
102
+ scope: this,
103
+ });
104
+ // PythonFunction for managing Bedrock logging configuration
105
+ const manageLoggingFunction = new aws_lambda_python_alpha_1.PythonFunction(this, 'BedrockManageLoggingFunction', {
106
+ functionName: generatedLogPermissions.uniqueFunctionName,
107
+ entry: path.join(__dirname, 'resources', 'bedrock-manage-logging-configuration'),
108
+ runtime: framework_1.DefaultRuntimes.PYTHON,
109
+ architecture: aws_lambda_1.Architecture.X86_64,
110
+ role: lambdaRole,
111
+ });
112
+ for (const statement of generatedLogPermissions.policyStatements) {
113
+ manageLoggingFunction.role?.addToPrincipalPolicy(statement);
114
+ }
115
+ // Custom resource provider
116
+ const provider = new custom_resources_1.Provider(this, 'BedrockLoggingProvider', {
117
+ onEventHandler: manageLoggingFunction,
118
+ });
119
+ // Custom resource to configure Bedrock logging
120
+ new aws_cdk_lib_1.CustomResource(this, 'BedrockLoggingConfig', {
121
+ serviceToken: provider.serviceToken,
122
+ properties: {
123
+ logGroupName: this.logGroup.logGroupName,
124
+ roleArn: this.loggingRole.roleArn,
125
+ override: props?.overrideExistingConfiguration || false,
126
+ },
127
+ });
128
+ }
129
+ }
130
+ exports.BedrockObservability = BedrockObservability;
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVkcm9jay1vYnNlcnZhYmlsaXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdXNlLWNhc2VzL3V0aWxpdGllcy9vYnNlcnZhYmlsaXR5L2JlZHJvY2stb2JzZXJ2YWJpbGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBNkI7QUFDN0IsOEVBQWtFO0FBQ2xFLDZDQUEwRTtBQUMxRSxpREFBc0c7QUFDdEcsaURBQTBDO0FBQzFDLHVEQUFzRDtBQUN0RCxtREFBc0U7QUFDdEUsbUVBQXdEO0FBQ3hELDJDQUF1QztBQUV2QywrQ0FBa0Q7QUFDbEQsMERBQXFEO0FBU3JELE1BQWEsb0JBQXFCLFNBQVEsc0JBQVM7SUFLakQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFpQztRQUN6RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0MsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLG1CQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFO1lBQ2xFLFNBQVMsRUFBRSxHQUFHO1NBQ2YsQ0FBQyxFQUFFLENBQUM7UUFFTCxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsTUFBTSxJQUFJLE9BQU8sY0FBYyxZQUFZLEVBQUUsQ0FBQztRQUNsRixNQUFNLFlBQVksR0FBRyxHQUFHLFdBQVcsMENBQTBDLENBQUM7UUFFOUUsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUscUJBQXFCLElBQUksSUFBSSxhQUFHLENBQUMsSUFBSSxFQUFFLHVDQUF1QyxFQUFFO1lBQ2xJLGFBQWEsRUFBRSxLQUFLLEVBQUUsYUFBYSxJQUFJLDJCQUFhLENBQUMsT0FBTztZQUM1RCxpQkFBaUIsRUFBRSxJQUFJO1NBQ3hCLENBQUMsQ0FBQztRQUVILElB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QVcsRUFBRSxzQ0FBc0MsQ0FBQztZQUNoRixPQUFPLEVBQUUsMkJBQWUsQ0FBQyxNQUFNO1lBQy9CLFlBQVksRUFBRSx5QkFBWSxDQUFDLE1BQU07WUFDakMsSUFBSSxFQUFFLFVBQVU7U0FDakIsQ0FBQyxDQUFDO1FBRUgsS0FBSyxNQUFNLFNBQVMsSUFBSSx1QkFBdUIsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2pFLHFCQUFxQixDQUFDLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBRUQsMkJBQTJCO1FBQzNCLE1BQU0sUUFBUSxHQUFHLElBQUksMkJBQVEsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLEVBQUU7WUFDNUQsY0FBYyxFQUFFLHFCQUFxQjtTQUN0QyxDQUFDLENBQUM7UUFFSCwrQ0FBK0M7UUFDL0MsSUFBSSw0QkFBYyxDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRTtZQUMvQyxZQUFZLEVBQUUsUUFBUSxDQUFDLFlBQVk7WUFDbkMsVUFBVSxFQUFFO2dCQUNWLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVk7Z0JBQ3hDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU87Z0JBQ2pDLFFBQVEsRUFBRSxLQUFLLEVBQUUsNkJBQTZCLElBQUksS0FBSzthQUN4RDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWxJRCxvREFrSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgUHl0aG9uRnVuY3Rpb24gfSBmcm9tICdAYXdzLWNkay9hd3MtbGFtYmRhLXB5dGhvbi1hbHBoYSc7XG5pbXBvcnQgeyBDdXN0b21SZXNvdXJjZSwgTmFtZXMsIFJlbW92YWxQb2xpY3ksIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgUm9sZSwgU2VydmljZVByaW5jaXBhbCwgUG9saWN5U3RhdGVtZW50LCBFZmZlY3QsIFBvbGljeURvY3VtZW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBLZXkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB7IEFyY2hpdGVjdHVyZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgRGF0YVByb3RlY3Rpb25Qb2xpY3ksIExvZ0dyb3VwIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgTG9nR3JvdXBEYXRhUHJvdGVjdGlvblByb3BzIH0gZnJvbSAnLi9sb2ctZ3JvdXAtZGF0YS1wcm90ZWN0aW9uLXByb3BzJztcbmltcG9ydCB7IERlZmF1bHRSdW50aW1lcyB9IGZyb20gJy4uLy4uL2ZyYW1ld29yayc7XG5pbXBvcnQgeyBMYW1iZGFJYW1VdGlscyB9IGZyb20gJy4uL2xhbWJkYS1pYW0tdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJlZHJvY2tPYnNlcnZhYmlsaXR5UHJvcHMge1xuICByZWFkb25seSBsb2dHcm91cERhdGFQcm90ZWN0aW9uPzogTG9nR3JvdXBEYXRhUHJvdGVjdGlvblByb3BzO1xuICByZWFkb25seSBsb2dnaW5nUm9sZT86IFJvbGU7XG4gIHJlYWRvbmx5IG92ZXJyaWRlRXhpc3RpbmdDb25maWd1cmF0aW9uPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3k7XG59XG5cbmV4cG9ydCBjbGFzcyBCZWRyb2NrT2JzZXJ2YWJpbGl0eSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHJlYWRvbmx5IGxvZ0dyb3VwOiBMb2dHcm91cDtcbiAgcmVhZG9ubHkgbG9nZ2luZ1JvbGU6IFJvbGU7XG4gIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk6IEtleTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IEJlZHJvY2tPYnNlcnZhYmlsaXR5UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIGNvbnN0IHsgcmVnaW9uLCBhY2NvdW50IH0gPSBTdGFjay5vZih0aGlzKTtcblxuICAgIGNvbnN0IGxvZ0dyb3VwTmFtZSA9IGAvYXdzL2JlZHJvY2svJHtOYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywge1xuICAgICAgbWF4TGVuZ3RoOiAxMDAsXG4gICAgfSl9YDtcblxuICAgIGNvbnN0IGxvZ0dyb3VwQXJuID0gYGFybjphd3M6bG9nczoke3JlZ2lvbn06JHthY2NvdW50fTpsb2ctZ3JvdXA6JHtsb2dHcm91cE5hbWV9YDtcbiAgICBjb25zdCBsb2dTdHJlYW1Bcm4gPSBgJHtsb2dHcm91cEFybn06bG9nLXN0cmVhbTphd3MvYmVkcm9jay9tb2RlbGludm9jYXRpb25zYDtcblxuICAgIHRoaXMuZW5jcnlwdGlvbktleSA9IHByb3BzPy5sb2dHcm91cERhdGFQcm90ZWN0aW9uPy5sb2dHcm91cEVuY3J5cHRpb25LZXkgfHwgbmV3IEtleSh0aGlzLCAnQmVkcm9ja0ludm9jYXRpb25Mb2dnaW5nRW5jcnlwdGlvbktleScsIHtcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzPy5yZW1vdmFsUG9saWN5IHx8IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIGVuYWJsZUtleVJvdGF0aW9uOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5lbmNyeXB0aW9uS2V5LmdyYW50RW5jcnlwdERlY3J5cHQobmV3IFNlcnZpY2VQcmluY2lwYWwoJ2xvZ3MuYW1hem9uYXdzLmNvbScsIHtcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgQXJuRXF1YWxzOiB7XG4gICAgICAgICAgJ2ttczpFbmNyeXB0aW9uQ29udGV4dDphd3M6bG9nczphcm4nOiBsb2dHcm91cEFybixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSkpO1xuXG4gICAgdGhpcy5sb2dHcm91cCA9IG5ldyBMb2dHcm91cCh0aGlzLCAnQmVkcm9ja0ludm9jYXRpb25Mb2dHcm91cCcsIHtcbiAgICAgIGxvZ0dyb3VwTmFtZSxcbiAgICAgIGVuY3J5cHRpb25LZXk6IHRoaXMuZW5jcnlwdGlvbktleSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzPy5yZW1vdmFsUG9saWN5IHx8IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIGRhdGFQcm90ZWN0aW9uUG9saWN5OiBwcm9wcz8ubG9nR3JvdXBEYXRhUHJvdGVjdGlvbj8uZGF0YVByb3RlY3Rpb25JZGVudGlmaWVycyA/IG5ldyBEYXRhUHJvdGVjdGlvblBvbGljeSh7XG4gICAgICAgIGlkZW50aWZpZXJzOiBwcm9wcz8ubG9nR3JvdXBEYXRhUHJvdGVjdGlvbj8uZGF0YVByb3RlY3Rpb25JZGVudGlmaWVycyxcbiAgICAgIH0pIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5sb2dnaW5nUm9sZSA9IHByb3BzPy5sb2dnaW5nUm9sZSB8fCBuZXcgUm9sZSh0aGlzLCAnQmVkcm9ja0ludm9jYXRpb25Mb2dnaW5nUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2JlZHJvY2suYW1hem9uYXdzLmNvbScsIHtcbiAgICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICAgJ2F3czpTb3VyY2VBY2NvdW50JzogYWNjb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIEFybkxpa2U6IHtcbiAgICAgICAgICAgICdhd3M6U291cmNlQXJuJzogYGFybjphd3M6YmVkcm9jazoke3JlZ2lvbn06JHthY2NvdW50fToqYCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBCZWRyb2NrTG9nZ2luZ1BvbGljeTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAnbG9nczpDcmVhdGVMb2dTdHJlYW0nLFxuICAgICAgICAgICAgICAgICdsb2dzOlB1dExvZ0V2ZW50cycsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIGxvZ1N0cmVhbUFybixcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIExhbWJkYSBmdW5jdGlvbiByb2xlIHdpdGggbGVhc3QgcHJpdmlsZWdlXG4gICAgY29uc3QgbGFtYmRhUm9sZSA9IG5ldyBSb2xlKHRoaXMsICdCZWRyb2NrTG9nZ2luZ0NvbmZpZ1JvbGUnLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBTZXJ2aWNlUHJpbmNpcGFsKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgQmVkcm9ja0xvZ2dpbmdDb25maWdQb2xpY3k6IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgJ2JlZHJvY2s6R2V0TW9kZWxJbnZvY2F0aW9uTG9nZ2luZ0NvbmZpZ3VyYXRpb24nLFxuICAgICAgICAgICAgICAgICdiZWRyb2NrOlB1dE1vZGVsSW52b2NhdGlvbkxvZ2dpbmdDb25maWd1cmF0aW9uJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgJ2lhbTpQYXNzUm9sZScsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2luZ1JvbGUucm9sZUFybixcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGdlbmVyYXRlZExvZ1Blcm1pc3Npb25zID0gTGFtYmRhSWFtVXRpbHMuY3JlYXRlTG9nc1Blcm1pc3Npb25zKHtcbiAgICAgIGFjY291bnQsXG4gICAgICBmdW5jdGlvbk5hbWU6ICdiZWRyb2NrLW1hbmFnZS1sb2dnaW5nLWZ1bmN0aW9uJyxcbiAgICAgIHJlZ2lvbixcbiAgICAgIHNjb3BlOiB0aGlzLFxuICAgIH0pO1xuXG4gICAgLy8gUHl0aG9uRnVuY3Rpb24gZm9yIG1hbmFnaW5nIEJlZHJvY2sgbG9nZ2luZyBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgbWFuYWdlTG9nZ2luZ0Z1bmN0aW9uID0gbmV3IFB5dGhvbkZ1bmN0aW9uKHRoaXMsICdCZWRyb2NrTWFuYWdlTG9nZ2luZ0Z1bmN0aW9uJywge1xuICAgICAgZnVuY3Rpb25OYW1lOiBnZW5lcmF0ZWRMb2dQZXJtaXNzaW9ucy51bmlxdWVGdW5jdGlvbk5hbWUsXG4gICAgICBlbnRyeTogcGF0aC5qb2luKF9fZGlybmFtZSwgJ3Jlc291cmNlcycsICdiZWRyb2NrLW1hbmFnZS1sb2dnaW5nLWNvbmZpZ3VyYXRpb24nKSxcbiAgICAgIHJ1bnRpbWU6IERlZmF1bHRSdW50aW1lcy5QWVRIT04sXG4gICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5YODZfNjQsXG4gICAgICByb2xlOiBsYW1iZGFSb2xlLFxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgZ2VuZXJhdGVkTG9nUGVybWlzc2lvbnMucG9saWN5U3RhdGVtZW50cykge1xuICAgICAgbWFuYWdlTG9nZ2luZ0Z1bmN0aW9uLnJvbGU/LmFkZFRvUHJpbmNpcGFsUG9saWN5KHN0YXRlbWVudCk7XG4gICAgfVxuXG4gICAgLy8gQ3VzdG9tIHJlc291cmNlIHByb3ZpZGVyXG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgUHJvdmlkZXIodGhpcywgJ0JlZHJvY2tMb2dnaW5nUHJvdmlkZXInLCB7XG4gICAgICBvbkV2ZW50SGFuZGxlcjogbWFuYWdlTG9nZ2luZ0Z1bmN0aW9uLFxuICAgIH0pO1xuXG4gICAgLy8gQ3VzdG9tIHJlc291cmNlIHRvIGNvbmZpZ3VyZSBCZWRyb2NrIGxvZ2dpbmdcbiAgICBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgJ0JlZHJvY2tMb2dnaW5nQ29uZmlnJywge1xuICAgICAgc2VydmljZVRva2VuOiBwcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGxvZ0dyb3VwTmFtZTogdGhpcy5sb2dHcm91cC5sb2dHcm91cE5hbWUsXG4gICAgICAgIHJvbGVBcm46IHRoaXMubG9nZ2luZ1JvbGUucm9sZUFybixcbiAgICAgICAgb3ZlcnJpZGU6IHByb3BzPy5vdmVycmlkZUV4aXN0aW5nQ29uZmlndXJhdGlvbiB8fCBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn0iXX0=
@@ -0,0 +1,6 @@
1
+ import { InjectionContext, IPropertyInjector } from 'aws-cdk-lib';
2
+ export declare class CloudfrontDistributionObservabilityPropertyInjector implements IPropertyInjector {
3
+ readonly constructUniqueId: string;
4
+ constructor();
5
+ inject(originalProps: any, context: InjectionContext): any;
6
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.CloudfrontDistributionObservabilityPropertyInjector = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const aws_cloudfront_1 = require("aws-cdk-lib/aws-cloudfront");
7
+ class CloudfrontDistributionObservabilityPropertyInjector {
8
+ constructor() {
9
+ this.constructUniqueId = aws_cloudfront_1.Distribution.PROPERTY_INJECTION_ID;
10
+ }
11
+ inject(originalProps, context) {
12
+ return {
13
+ enableLogging: true,
14
+ logFilePrefix: `${context.id}-distribution-`,
15
+ ...originalProps,
16
+ };
17
+ }
18
+ }
19
+ exports.CloudfrontDistributionObservabilityPropertyInjector = CloudfrontDistributionObservabilityPropertyInjector;
20
+ _a = JSII_RTTI_SYMBOL_1;
21
+ CloudfrontDistributionObservabilityPropertyInjector[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.CloudfrontDistributionObservabilityPropertyInjector", version: "1.0.0" };
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmcm9udC1kaXN0cmlidXRpb24tb2JzZXJ2YWJpbGl0eS1wcm9wZXJ0eS1pbmplY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy91dGlsaXRpZXMvb2JzZXJ2YWJpbGl0eS9jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi1vYnNlcnZhYmlsaXR5LXByb3BlcnR5LWluamVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsK0RBQTBEO0FBRTFELE1BQWEsbURBQW1EO0lBRzlEO1FBQ0UsSUFBSSxDQUFDLGlCQUFpQixHQUFHLDZCQUFZLENBQUMscUJBQXFCLENBQUM7SUFDOUQsQ0FBQztJQUVELE1BQU0sQ0FBQyxhQUFrQixFQUFFLE9BQXlCO1FBQ2xELE9BQU87WUFDTCxhQUFhLEVBQUUsSUFBSTtZQUNuQixhQUFhLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxnQkFBZ0I7WUFDNUMsR0FBRyxhQUFhO1NBQ2pCLENBQUM7SUFDSixDQUFDOztBQWJILGtIQWVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uQ29udGV4dCwgSVByb3BlcnR5SW5qZWN0b3IgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBEaXN0cmlidXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udCc7XG5cbmV4cG9ydCBjbGFzcyBDbG91ZGZyb250RGlzdHJpYnV0aW9uT2JzZXJ2YWJpbGl0eVByb3BlcnR5SW5qZWN0b3IgaW1wbGVtZW50cyBJUHJvcGVydHlJbmplY3RvciB7XG4gIHJlYWRvbmx5IGNvbnN0cnVjdFVuaXF1ZUlkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RVbmlxdWVJZCA9IERpc3RyaWJ1dGlvbi5QUk9QRVJUWV9JTkpFQ1RJT05fSUQ7XG4gIH1cblxuICBpbmplY3Qob3JpZ2luYWxQcm9wczogYW55LCBjb250ZXh0OiBJbmplY3Rpb25Db250ZXh0KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgZW5hYmxlTG9nZ2luZzogdHJ1ZSxcbiAgICAgIGxvZ0ZpbGVQcmVmaXg6IGAke2NvbnRleHQuaWR9LWRpc3RyaWJ1dGlvbi1gLFxuICAgICAgLi4ub3JpZ2luYWxQcm9wcyxcbiAgICB9O1xuICB9XG5cbn0iXX0=
@@ -0,0 +1,6 @@
1
+ export * from './lambda-observability-property-injector';
2
+ export * from './state-machine-observability-property-injector';
3
+ export * from './cloudfront-distribution-observability-property-injector';
4
+ export * from './observable';
5
+ export * from './powertools-config';
6
+ export * from './log-group-data-protection-props';
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
+ if (k2 === undefined) k2 = k;
6
+ var desc = Object.getOwnPropertyDescriptor(m, k);
7
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
8
+ desc = { enumerable: true, get: function() { return m[k]; } };
9
+ }
10
+ Object.defineProperty(o, k2, desc);
11
+ }) : (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ o[k2] = m[k];
14
+ }));
15
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
17
+ };
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ __exportStar(require("./lambda-observability-property-injector"), exports);
20
+ __exportStar(require("./state-machine-observability-property-injector"), exports);
21
+ __exportStar(require("./cloudfront-distribution-observability-property-injector"), exports);
22
+ __exportStar(require("./observable"), exports);
23
+ __exportStar(require("./powertools-config"), exports);
24
+ __exportStar(require("./log-group-data-protection-props"), exports);
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvdXRpbGl0aWVzL29ic2VydmFiaWxpdHkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHFFQUFxRTtBQUNyRSxzQ0FBc0M7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFdEMsMkVBQXlEO0FBQ3pELGtGQUFnRTtBQUNoRSw0RkFBMEU7QUFDMUUsK0NBQTZCO0FBQzdCLHNEQUFvQztBQUNwQyxvRUFBa0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmV4cG9ydCAqIGZyb20gJy4vbGFtYmRhLW9ic2VydmFiaWxpdHktcHJvcGVydHktaW5qZWN0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9zdGF0ZS1tYWNoaW5lLW9ic2VydmFiaWxpdHktcHJvcGVydHktaW5qZWN0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi1vYnNlcnZhYmlsaXR5LXByb3BlcnR5LWluamVjdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vb2JzZXJ2YWJsZSc7XG5leHBvcnQgKiBmcm9tICcuL3Bvd2VydG9vbHMtY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vbG9nLWdyb3VwLWRhdGEtcHJvdGVjdGlvbi1wcm9wcyc7Il19
@@ -0,0 +1,8 @@
1
+ import { InjectionContext, IPropertyInjector } from 'aws-cdk-lib';
2
+ import { LogGroupDataProtectionProps } from './log-group-data-protection-props';
3
+ export declare class LambdaObservabilityPropertyInjector implements IPropertyInjector {
4
+ readonly constructUniqueId: string;
5
+ readonly logGroupDataProtection: LogGroupDataProtectionProps;
6
+ constructor(logGroupDataProtection: LogGroupDataProtectionProps);
7
+ inject(originalProps: any, _context: InjectionContext): any;
8
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.LambdaObservabilityPropertyInjector = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
7
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
8
+ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
9
+ const aws_logs_1 = require("aws-cdk-lib/aws-logs");
10
+ class LambdaObservabilityPropertyInjector {
11
+ constructor(logGroupDataProtection) {
12
+ this.constructUniqueId = aws_lambda_1.Function.PROPERTY_INJECTION_ID;
13
+ this.logGroupDataProtection = logGroupDataProtection;
14
+ }
15
+ inject(originalProps, _context) {
16
+ const { region, account } = aws_cdk_lib_1.Stack.of(_context.scope);
17
+ const logGroupName = `/aws/lambda/${originalProps.functionName}`;
18
+ const logGroupArn = `arn:aws:logs:${region}:${account}:log-group:${logGroupName}`;
19
+ this.logGroupDataProtection.logGroupEncryptionKey?.grantEncryptDecrypt(new aws_iam_1.ServicePrincipal('logs.amazonaws.com', {
20
+ conditions: {
21
+ ArnEquals: {
22
+ 'kms:EncryptionContext:aws:logs:arn': logGroupArn,
23
+ },
24
+ },
25
+ }));
26
+ return {
27
+ LogGroup: new aws_logs_1.LogGroup(_context.scope, `${_context.id}-LogGroup`, {
28
+ logGroupName,
29
+ encryptionKey: this.logGroupDataProtection.logGroupEncryptionKey,
30
+ dataProtectionPolicy: this.logGroupDataProtection.dataProtectionIdentifiers ? new aws_logs_1.DataProtectionPolicy({
31
+ identifiers: this.logGroupDataProtection.dataProtectionIdentifiers,
32
+ }) : undefined,
33
+ removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY,
34
+ }),
35
+ tracing: aws_lambda_1.Tracing.ACTIVE,
36
+ ...originalProps,
37
+ };
38
+ }
39
+ }
40
+ exports.LambdaObservabilityPropertyInjector = LambdaObservabilityPropertyInjector;
41
+ _a = JSII_RTTI_SYMBOL_1;
42
+ LambdaObservabilityPropertyInjector[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.LambdaObservabilityPropertyInjector", version: "1.0.0" };
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLW9ic2VydmFiaWxpdHktcHJvcGVydHktaW5qZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvdXRpbGl0aWVzL29ic2VydmFiaWxpdHkvbGFtYmRhLW9ic2VydmFiaWxpdHktcHJvcGVydHktaW5qZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBd0Y7QUFDeEYsaURBQXVEO0FBQ3ZELHVEQUEyRDtBQUMzRCxtREFBc0U7QUFHdEUsTUFBYSxtQ0FBbUM7SUFJOUMsWUFBWSxzQkFBbUQ7UUFDN0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLHFCQUFRLENBQUMscUJBQXFCLENBQUM7UUFDeEQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHNCQUFzQixDQUFDO0lBQ3ZELENBQUM7SUFFRCxNQUFNLENBQUMsYUFBa0IsRUFBRSxRQUEwQjtRQUNuRCxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxNQUFNLFlBQVksR0FBRyxlQUFlLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNqRSxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsTUFBTSxJQUFJLE9BQU8sY0FBYyxZQUFZLEVBQUUsQ0FBQztRQUNsRixJQUFJLENBQUMsc0JBQXNCLENBQUMscUJBQXFCLEVBQUUsbUJBQW1CLENBQUMsSUFBSSwwQkFBZ0IsQ0FBQyxvQkFBb0IsRUFBRTtZQUNoSCxVQUFVLEVBQUU7Z0JBQ1YsU0FBUyxFQUFFO29CQUNULG9DQUFvQyxFQUFFLFdBQVc7aUJBQ2xEO2FBQ0Y7U0FDRixDQUFDLENBQUMsQ0FBQztRQUVKLE9BQU87WUFDTCxRQUFRLEVBQUUsSUFBSSxtQkFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxRQUFRLENBQUMsRUFBRSxXQUFXLEVBQUU7Z0JBQ2hFLFlBQVk7Z0JBQ1osYUFBYSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxxQkFBcUI7Z0JBQ2hFLG9CQUFvQixFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsSUFBSSwrQkFBb0IsQ0FBQztvQkFDckcsV0FBVyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx5QkFBeUI7aUJBQ25FLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDZCxhQUFhLEVBQUUsMkJBQWEsQ0FBQyxPQUFPO2FBQ3JDLENBQUM7WUFDRixPQUFPLEVBQUUsb0JBQU8sQ0FBQyxNQUFNO1lBQ3ZCLEdBQUcsYUFBYTtTQUNqQixDQUFDO0lBQ0osQ0FBQzs7QUFqQ0gsa0ZBbUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uQ29udGV4dCwgSVByb3BlcnR5SW5qZWN0b3IsIFJlbW92YWxQb2xpY3ksIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgU2VydmljZVByaW5jaXBhbCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgRnVuY3Rpb24sIFRyYWNpbmcgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IERhdGFQcm90ZWN0aW9uUG9saWN5LCBMb2dHcm91cCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7IExvZ0dyb3VwRGF0YVByb3RlY3Rpb25Qcm9wcyB9IGZyb20gJy4vbG9nLWdyb3VwLWRhdGEtcHJvdGVjdGlvbi1wcm9wcyc7XG5cbmV4cG9ydCBjbGFzcyBMYW1iZGFPYnNlcnZhYmlsaXR5UHJvcGVydHlJbmplY3RvciBpbXBsZW1lbnRzIElQcm9wZXJ0eUluamVjdG9yIHtcbiAgcmVhZG9ubHkgY29uc3RydWN0VW5pcXVlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9nR3JvdXBEYXRhUHJvdGVjdGlvbjogTG9nR3JvdXBEYXRhUHJvdGVjdGlvblByb3BzO1xuXG4gIGNvbnN0cnVjdG9yKGxvZ0dyb3VwRGF0YVByb3RlY3Rpb246IExvZ0dyb3VwRGF0YVByb3RlY3Rpb25Qcm9wcykge1xuICAgIHRoaXMuY29uc3RydWN0VW5pcXVlSWQgPSBGdW5jdGlvbi5QUk9QRVJUWV9JTkpFQ1RJT05fSUQ7XG4gICAgdGhpcy5sb2dHcm91cERhdGFQcm90ZWN0aW9uID0gbG9nR3JvdXBEYXRhUHJvdGVjdGlvbjtcbiAgfVxuXG4gIGluamVjdChvcmlnaW5hbFByb3BzOiBhbnksIF9jb250ZXh0OiBJbmplY3Rpb25Db250ZXh0KTogYW55IHtcbiAgICBjb25zdCB7IHJlZ2lvbiwgYWNjb3VudCB9ID0gU3RhY2sub2YoX2NvbnRleHQuc2NvcGUpO1xuICAgIGNvbnN0IGxvZ0dyb3VwTmFtZSA9IGAvYXdzL2xhbWJkYS8ke29yaWdpbmFsUHJvcHMuZnVuY3Rpb25OYW1lfWA7XG4gICAgY29uc3QgbG9nR3JvdXBBcm4gPSBgYXJuOmF3czpsb2dzOiR7cmVnaW9ufToke2FjY291bnR9OmxvZy1ncm91cDoke2xvZ0dyb3VwTmFtZX1gO1xuICAgIHRoaXMubG9nR3JvdXBEYXRhUHJvdGVjdGlvbi5sb2dHcm91cEVuY3J5cHRpb25LZXk/LmdyYW50RW5jcnlwdERlY3J5cHQobmV3IFNlcnZpY2VQcmluY2lwYWwoJ2xvZ3MuYW1hem9uYXdzLmNvbScsIHtcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgQXJuRXF1YWxzOiB7XG4gICAgICAgICAgJ2ttczpFbmNyeXB0aW9uQ29udGV4dDphd3M6bG9nczphcm4nOiBsb2dHcm91cEFybixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIExvZ0dyb3VwOiBuZXcgTG9nR3JvdXAoX2NvbnRleHQuc2NvcGUsIGAke19jb250ZXh0LmlkfS1Mb2dHcm91cGAsIHtcbiAgICAgICAgbG9nR3JvdXBOYW1lLFxuICAgICAgICBlbmNyeXB0aW9uS2V5OiB0aGlzLmxvZ0dyb3VwRGF0YVByb3RlY3Rpb24ubG9nR3JvdXBFbmNyeXB0aW9uS2V5LFxuICAgICAgICBkYXRhUHJvdGVjdGlvblBvbGljeTogdGhpcy5sb2dHcm91cERhdGFQcm90ZWN0aW9uLmRhdGFQcm90ZWN0aW9uSWRlbnRpZmllcnMgPyBuZXcgRGF0YVByb3RlY3Rpb25Qb2xpY3koe1xuICAgICAgICAgIGlkZW50aWZpZXJzOiB0aGlzLmxvZ0dyb3VwRGF0YVByb3RlY3Rpb24uZGF0YVByb3RlY3Rpb25JZGVudGlmaWVycyxcbiAgICAgICAgfSkgOiB1bmRlZmluZWQsXG4gICAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIH0pLFxuICAgICAgdHJhY2luZzogVHJhY2luZy5BQ1RJVkUsXG4gICAgICAuLi5vcmlnaW5hbFByb3BzLFxuICAgIH07XG4gIH1cblxufSJdfQ==
@@ -0,0 +1,19 @@
1
+ import { Key } from 'aws-cdk-lib/aws-kms';
2
+ import { DataIdentifier } from 'aws-cdk-lib/aws-logs';
3
+ /**
4
+ * Props to enable various data protection configuration
5
+ * for CloudWatch Log Groups
6
+ */
7
+ export interface LogGroupDataProtectionProps {
8
+ /**
9
+ * Encryption key that would be used to encrypt the relevant log group
10
+ * @default a new KMS key would automatically be created
11
+ */
12
+ readonly logGroupEncryptionKey?: Key;
13
+ /**
14
+ * List of DataIdentifiers that would be used as part of the
15
+ * Data Protection Policy that would be created for the log group
16
+ * @default Data Protection Policy won't be enabled
17
+ */
18
+ readonly dataProtectionIdentifiers?: DataIdentifier[];
19
+ }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWdyb3VwLWRhdGEtcHJvdGVjdGlvbi1wcm9wcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy91dGlsaXRpZXMvb2JzZXJ2YWJpbGl0eS9sb2ctZ3JvdXAtZGF0YS1wcm90ZWN0aW9uLXByb3BzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBLZXkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB7IERhdGFJZGVudGlmaWVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuXG4vKipcbiAqIFByb3BzIHRvIGVuYWJsZSB2YXJpb3VzIGRhdGEgcHJvdGVjdGlvbiBjb25maWd1cmF0aW9uXG4gKiBmb3IgQ2xvdWRXYXRjaCBMb2cgR3JvdXBzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nR3JvdXBEYXRhUHJvdGVjdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIEVuY3J5cHRpb24ga2V5IHRoYXQgd291bGQgYmUgdXNlZCB0byBlbmNyeXB0IHRoZSByZWxldmFudCBsb2cgZ3JvdXBcbiAgICogQGRlZmF1bHQgYSBuZXcgS01TIGtleSB3b3VsZCBhdXRvbWF0aWNhbGx5IGJlIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGxvZ0dyb3VwRW5jcnlwdGlvbktleT86IEtleTtcblxuICAvKipcbiAgICogTGlzdCBvZiBEYXRhSWRlbnRpZmllcnMgdGhhdCB3b3VsZCBiZSB1c2VkIGFzIHBhcnQgb2YgdGhlXG4gICAqIERhdGEgUHJvdGVjdGlvbiBQb2xpY3kgdGhhdCB3b3VsZCBiZSBjcmVhdGVkIGZvciB0aGUgbG9nIGdyb3VwXG4gICAqIEBkZWZhdWx0IERhdGEgUHJvdGVjdGlvbiBQb2xpY3kgd29uJ3QgYmUgZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YVByb3RlY3Rpb25JZGVudGlmaWVycz86IERhdGFJZGVudGlmaWVyW107XG59Il19
@@ -0,0 +1,83 @@
1
+ import * as cloudwatch from 'aws-cdk-lib/aws-cloudwatch';
2
+ import * as lambda from 'aws-cdk-lib/aws-lambda';
3
+ import * as logs from 'aws-cdk-lib/aws-logs';
4
+ import * as s3 from 'aws-cdk-lib/aws-s3';
5
+ import * as sqs from 'aws-cdk-lib/aws-sqs';
6
+ import * as stepfunctions from 'aws-cdk-lib/aws-stepfunctions';
7
+ import { Construct } from 'constructs';
8
+ /**
9
+ * Configuration for observability features
10
+ */
11
+ export interface ObservabilityConfig {
12
+ /** Enable CloudWatch Dashboard */
13
+ readonly enableDashboard?: boolean;
14
+ /** Enable CloudWatch Alarms */
15
+ readonly enableAlarms?: boolean;
16
+ /** Enable AWS X-Ray tracing */
17
+ readonly enableTracing?: boolean;
18
+ /** Log retention period in days */
19
+ readonly logRetentionDays?: logs.RetentionDays;
20
+ /** Custom dashboard name */
21
+ readonly dashboardName?: string;
22
+ /** SNS topic ARN for alarm notifications */
23
+ readonly alarmNotificationTopicArn?: string;
24
+ /** Custom metric namespace */
25
+ readonly metricsNamespace?: string;
26
+ }
27
+ /**
28
+ * Resources that need observability monitoring
29
+ */
30
+ export interface ObservabilityResources {
31
+ /** Step Functions state machine (optional) */
32
+ readonly stateMachine?: stepfunctions.StateMachine;
33
+ /** Lambda functions to monitor */
34
+ readonly lambdaFunctions: lambda.Function[];
35
+ /** SQS queues to monitor (optional) */
36
+ readonly sqsQueues?: sqs.Queue[];
37
+ /** S3 buckets for storage (optional) */
38
+ readonly s3Buckets?: s3.IBucket[];
39
+ /** Dead letter queue (optional) */
40
+ readonly deadLetterQueue?: sqs.IQueue;
41
+ /** Use case name for labeling */
42
+ readonly useCaseName: string;
43
+ }
44
+ /**
45
+ * Comprehensive observability construct for serverless use cases
46
+ */
47
+ export declare class ServerlessObservability extends Construct {
48
+ /** CloudWatch Dashboard for monitoring */
49
+ readonly dashboard?: cloudwatch.Dashboard;
50
+ /** CloudWatch Log Groups */
51
+ readonly logGroups: logs.LogGroup[];
52
+ /** CloudWatch Alarms */
53
+ readonly alarms: cloudwatch.Alarm[];
54
+ /** Metrics namespace */
55
+ readonly metricsNamespace: string;
56
+ constructor(scope: Construct, id: string, resources: ObservabilityResources, config?: ObservabilityConfig);
57
+ /**
58
+ * Create log groups for Lambda functions with proper retention
59
+ */
60
+ private createLogGroups;
61
+ /**
62
+ * Enable AWS X-Ray tracing for all resources
63
+ */
64
+ private enableTracing;
65
+ /**
66
+ * Create CloudWatch alarms for monitoring critical metrics
67
+ */
68
+ private createAlarms;
69
+ /**
70
+ * Create comprehensive CloudWatch dashboard
71
+ */
72
+ private createDashboard;
73
+ /**
74
+ * Add custom widget to the dashboard
75
+ */
76
+ addCustomWidget(widget: cloudwatch.IWidget): void;
77
+ /**
78
+ * Create a custom metric for use case specific events
79
+ */
80
+ createCustomMetric(metricName: string, dimensionsMap?: {
81
+ [key: string]: string;
82
+ }): cloudwatch.Metric;
83
+ }