@aws-cdk/aws-bedrock-agentcore-alpha
Version:
The CDK Construct Library for Amazon Bedrock
664 lines • 86.3 kB
JavaScript
"use strict";
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
var useValue = arguments.length > 2;
for (var i = 0; i < initializers.length; i++) {
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
}
return useValue ? value : void 0;
};
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
var _, done = false;
for (var i = decorators.length - 1; i >= 0; i--) {
var context = {};
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
if (kind === "accessor") {
if (result === void 0) continue;
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
if (_ = accept(result.get)) descriptor.get = _;
if (_ = accept(result.set)) descriptor.set = _;
if (_ = accept(result.init)) initializers.unshift(_);
}
else if (_ = accept(result)) {
if (kind === "field") initializers.unshift(_);
else descriptor[key] = _;
}
}
if (target) Object.defineProperty(target, contextIn.name, descriptor);
done = true;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Memory = exports.MemoryBase = void 0;
const jsiiDeprecationWarnings = require("../../.warnings.jsii.js");
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
* with the License. A copy of the License is located at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
* OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
* and limitations under the License.
*/
const aws_cdk_lib_1 = require("aws-cdk-lib");
const aws_bedrockagentcore_1 = require("aws-cdk-lib/aws-bedrockagentcore");
const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
const iam = require("aws-cdk-lib/aws-iam");
const kms = require("aws-cdk-lib/aws-kms");
const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable");
const perms_1 = require("./perms");
const validation_helpers_1 = require("./validation-helpers");
/******************************************************************************
* CONSTANTS
*****************************************************************************/
/**
* Minimum length for browser name
* @internal
*/
const MEMORY_NAME_MIN_LENGTH = 1;
/**
* Maximum length for browser name
* @internal
*/
const MEMORY_NAME_MAX_LENGTH = 48;
/**
* Minimum length for browser tags
* @internal
*/
const MEMORY_TAG_MIN_LENGTH = 1;
/**
* Maximum length for browser tags
* @internal
*/
const MEMORY_TAG_MAX_LENGTH = 256;
/**
* Minimum length for memory expiration days
* @internal
*/
const MEMORY_EXPIRATION_DAYS_MIN = 7;
/**
* Maximum length for memory expiration days
* @internal
*/
const MEMORY_EXPIRATION_DAYS_MAX = 365;
/******************************************************************************
* ABSTRACT BASE CLASS
*****************************************************************************/
/**
* Abstract base class for a Memory.
* Contains methods and attributes valid for Memories either created with CDK or imported.
*/
class MemoryBase extends aws_cdk_lib_1.Resource {
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.MemoryBase", version: "2.227.0-alpha.0" };
constructor(scope, id) {
super(scope, id);
}
/**
* Grants IAM actions to the IAM Principal
* @param grantee - The IAM principal to grant permissions to
* @param actions - The actions to grant
* @returns An IAM Grant object representing the granted permissions
*/
grant(grantee, ...actions) {
return iam.Grant.addToPrincipal({
grantee,
actions,
resourceArns: [this.memoryArn],
scope: this,
});
}
/**
* Grant the given principal identity permissions to write content to short-term memory.
*
* @param grantee - The IAM principal to grant read permissions to
* @default - Default grant configuration:
* - actions: ['bedrock-agentcore:CreateEvent'] on this.memoryArn
* @returns An IAM Grant object representing the granted permissions
*/
grantWrite(grantee) {
return this.grant(grantee, ...perms_1.MemoryPerms.STM.WRITE_PERMS);
}
/**
* Grant the given principal identity permissions to read the contents of this memory.
* Both Short-Term Memory (STM) and Long-Term Memory (LTM).
*
* @param grantee - The IAM principal to grant read permissions to
* @default - Default grant configuration:
* - actions: ['bedrock-agentcore:GetMemoryRecord',
'bedrock-agentcore:RetrieveMemoryRecords',
'bedrock-agentcore:ListMemoryRecords',
'bedrock-agentcore:ListActors',
'bedrock-agentcore:ListSessions] on this.memoryArn
* @returns An IAM Grant object representing the granted permissions
*/
grantRead(grantee) {
return this.grant(grantee, ...perms_1.MemoryPerms.READ_PERMS);
}
/**
* Grant the given principal identity permissions to read the Short-Term Memory (STM) contents of this memory.
*
* @param grantee - The IAM principal to grant read permissions to
* @default - Default grant configuration:
* - actions: ['bedrock-agentcore:GetEvent',
'bedrock-agentcore:ListEvents',
'bedrock-agentcore:ListActors',
'bedrock-agentcore:ListSessions',] on this.memoryArn
* @returns An IAM Grant object representing the granted permissions
*/
grantReadShortTermMemory(grantee) {
return this.grant(grantee, ...perms_1.MemoryPerms.STM.READ_PERMS);
}
/**
* Grant the given principal identity permissions to read the Long-Term Memory (LTM) contents of this memory.
*
* @param grantee - The IAM principal to grant read permissions to
* @default - Default grant configuration:
* - actions: ['bedrock-agentcore:GetMemoryRecord',
'bedrock-agentcore:RetrieveMemoryRecords',
'bedrock-agentcore:ListMemoryRecords',
'bedrock-agentcore:ListActors',
'bedrock-agentcore:ListSessions',] on this.memoryArn
* @returns An IAM Grant object representing the granted permissions
*/
grantReadLongTermMemory(grantee) {
return this.grant(grantee, ...perms_1.MemoryPerms.LTM.READ_PERMS);
}
/**
* Grant the given principal identity permissions to delete content on this memory.
*
* Both Short-Term Memory (STM) and Long-Term Memory (LTM).
*
* @param grantee - The IAM principal to grant delete permissions to
* @default - Default grant configuration:
* - actions: ['bedrock-agentcore:DeleteEvent',
'bedrock-agentcore:DeleteMemoryRecord'] on this.memoryArn
* @returns An IAM Grant object representing the granted permissions
*/
grantDelete(grantee) {
return this.grant(grantee, ...perms_1.MemoryPerms.DELETE_PERMS);
}
/**
* Grant the given principal identity permissions to delete Short-Term Memory (STM) content on this memory.
*
* @param grantee - The IAM principal to grant delete permissions to
* @default - Default grant configuration:
* - actions: ['bedrock-agentcore:DeleteEvent'] on this.memoryArn
* @returns An IAM Grant object representing the granted permissions
*/
grantDeleteShortTermMemory(grantee) {
return this.grant(grantee, ...perms_1.MemoryPerms.STM.DELETE_PERMS);
}
/**
* Grant the given principal identity permissions to delete Long-Term Memory (LTM) content on this memory.
*
* @param grantee - The IAM principal to grant delete permissions to
* @default - Default grant configuration:
* - actions: ['bedrock-agentcore:DeleteMemoryRecord'] on this.memoryArn
* @returns An IAM Grant object representing the granted permissions
*/
grantDeleteLongTermMemory(grantee) {
return this.grant(grantee, ...perms_1.MemoryPerms.LTM.DELETE_PERMS);
}
/**
* Grant the given principal identity permissions to manage the control plane of this memory.
*
* @param grantee - The IAM principal to grant admin permissions to
* @default - Default grant configuration:
* - actions: ['bedrock-agentcore:CreateMemory',
'bedrock-agentcore:GetMemory',
'bedrock-agentcore:DeleteMemory',
'bedrock-agentcore:UpdateMemory'] on this.memoryArn
* @returns An IAM Grant object representing the granted permissions
*/
grantAdmin(grantee) {
return this.grant(grantee, ...perms_1.MemoryPerms.ADMIN_PERMS);
}
/**
* Grant the given principal identity permissions to do every action on this memory.
*
* @param grantee - The IAM principal to grant full access permissions to
* @default - Default grant configuration:
* - actions: ['bedrock-agentcore:CreateEvent',
'bedrock-agentcore:GetEvent',
'bedrock-agentcore:DeleteEvent',
'bedrock-agentcore:GetMemoryRecord',
'bedrock-agentcore:RetrieveMemoryRecords',
'bedrock-agentcore:ListMemoryRecords',
'bedrock-agentcore:ListActors',
'bedrock-agentcore:ListSessions',
'bedrock-agentcore:CreateMemory',
'bedrock-agentcore:GetMemory',
'bedrock-agentcore:DeleteMemory',
'bedrock-agentcore:UpdateMemory'] on this.memoryArn
* @returns An IAM Grant object representing the granted permissions
*/
grantFullAccess(grantee) {
return this.grant(grantee, ...perms_1.MemoryPerms.FULL_ACCESS_PERMS);
}
// ------------------------------------------------------
// Metrics
// ------------------------------------------------------
/**
* Return the given named metric for this memory.
*
* By default, the metric will be calculated as a sum over a period of 5 minutes.
* You can customize this by using the `statistic` and `period` properties.
*/
metric(metricName, dimensions, props) {
const metricProps = {
namespace: 'AWS/Bedrock-AgentCore',
metricName,
dimensionsMap: { ...dimensions, Resource: this.memoryArn },
...props,
};
return this.configureMetric(metricProps);
}
/**
* Return the given named metric related to the API operation performed on this memory.
*/
metricForApiOperation(metricName, operation, props) {
return this.metric(metricName, { Operation: operation }, props);
}
/**
* Return a metric measuring the latency of a specific API operation performed on this memory.
*
* The latency metric represents the total time elapsed between receiving the request and sending
* the final response token, measuring complete end-to-end processing time.
*
* For memory creation events specifically, this measures the time from the last CreateEvent
* that met strategy criteria until memory storage is completed.
*
*/
metricLatencyForApiOperation(operation, props) {
return this.metricForApiOperation('Latency', operation, { statistic: aws_cloudwatch_1.Stats.AVERAGE, ...props });
}
/**
* Return a metric containing the total number of API requests made for a specific memory operation like
* `CreateEvent`, `ListEvents`, `RetrieveMemoryRecords` ...
*/
metricInvocationsForApiOperation(operation, props) {
return this.metricForApiOperation('Invocations', operation, {
statistic: aws_cloudwatch_1.Stats.SUM,
...props,
});
}
/**
* Return a metric containing the number of errors for a specific API operation performed on this memory.
*/
metricErrorsForApiOperation(operation, props) {
return this.metricForApiOperation('Errors', operation, { statistic: aws_cloudwatch_1.Stats.SUM, ...props });
}
/**
* Returns the metric containing the number of short-term memory events.
*/
metricEventCreationCount(props) {
return this.metric('CreationCount', { ItemType: 'Event' }, { statistic: aws_cloudwatch_1.Stats.SUM, ...props });
}
/**
* Returns the metric containing the number of long-term memory records
* created by the long-term extraction strategies.
*/
metricMemoryRecordCreationCount(props) {
return this.metric('CreationCount', { ItemType: 'MemoryRecordsExtracted' }, { statistic: aws_cloudwatch_1.Stats.SUM, ...props });
}
/**
* Internal method to create a metric.
*/
configureMetric(props) {
return new aws_cloudwatch_1.Metric({
...props,
region: props?.region ?? this.stack.region,
account: props?.account ?? this.stack.account,
});
}
}
exports.MemoryBase = MemoryBase;
/******************************************************************************
* Class
*****************************************************************************/
/**
* Long-term memory store for extracted insights like user preferences, semantic facts and summaries.
* Enables knowledge retention across sessions by storing user preferences (e.g. coding style),
* semantic facts (e.g. learned info) and interaction summaries for context optimization.
*
* @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/memory.html
* @resource AWS::BedrockAgentCore::Memory
*/
let Memory = (() => {
let _classDecorators = [prop_injectable_1.propertyInjectable];
let _classDescriptor;
let _classExtraInitializers = [];
let _classThis;
let _classSuper = MemoryBase;
let _instanceExtraInitializers = [];
let _addMemoryStrategy_decorators;
var Memory = class extends _classSuper {
static { _classThis = this; }
static {
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
_addMemoryStrategy_decorators = [(0, metadata_resource_1.MethodMetadata)()];
__esDecorate(this, null, _addMemoryStrategy_decorators, { kind: "method", name: "addMemoryStrategy", static: false, private: false, access: { has: obj => "addMemoryStrategy" in obj, get: obj => obj.addMemoryStrategy }, metadata: _metadata }, null, _instanceExtraInitializers);
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
Memory = _classThis = _classDescriptor.value;
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
}
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Memory", version: "2.227.0-alpha.0" };
/** Uniquely identifies this class. */
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.Memory';
/**
* Static Method for importing an existing Bedrock AgentCore Memory.
*/
/**
* Creates an Memory reference from an existing memory's attributes.
*
* @param scope - The construct scope
* @param id - Identifier of the construct
* @param attrs - Attributes of the existing browser custom
* @returns An IBrowserCustom reference to the existing browser
*/
static fromMemoryAttributes(scope, id, attrs) {
try {
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_MemoryAttributes(attrs);
}
catch (error) {
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
Error.captureStackTrace(error, this.fromMemoryAttributes);
}
throw error;
}
class Import extends MemoryBase {
memoryArn = attrs.memoryArn;
memoryId = aws_cdk_lib_1.Arn.split(attrs.memoryArn, aws_cdk_lib_1.ArnFormat.SLASH_RESOURCE_NAME).resourceName;
executionRole = iam.Role.fromRoleArn(scope, `${id}Role`, attrs.roleArn);
kmsKey = attrs.kmsKeyArn ? kms.Key.fromKeyArn(scope, `${id}Key`, attrs.kmsKeyArn) : undefined;
updatedAt = attrs.updatedAt;
grantPrincipal = this.executionRole;
status = attrs.status;
createdAt = attrs.createdAt;
constructor(s, i) {
super(s, i);
this.grantPrincipal = this.executionRole || new iam.UnknownPrincipal({ resource: this });
}
}
// Return new Memory
return new Import(scope, id);
}
// ------------------------------------------------------
// Attributes
// ------------------------------------------------------
/**
* The ARN of the memory resource.
* @attribute
*/
memoryArn = __runInitializers(this, _instanceExtraInitializers);
/**
* The name of the memory.
* @attribute
*/
memoryName;
/**
* The id of the memory.
* @attribute
*/
memoryId;
/**
* The expiration days of the memory.
*/
expirationDuration;
/**
* The failure reason of the browser
* @attribute
*/
failureReason;
/**
* The description of the memory.
*/
description;
/**
* The execution role of the memory.
*/
executionRole;
/**
* The status of the memory.
*/
status;
/**
* The created timestamp of the memory.
*/
createdAt;
/**
* The updated at timestamp of the memory.
*/
updatedAt;
/**
* Tags applied to this browser resource
* A map of key-value pairs for resource tagging
* @default - No tags applied
*/
tags;
/**
* The principal to grant permissions to
*/
grantPrincipal;
/**
* The KMS key used to encrypt the memory.
*/
kmsKey;
/**
* The memory strategies used by the memory.
* @attribute
*/
memoryStrategies = [];
// ------------------------------------------------------
// Internal Only
// ------------------------------------------------------
__resource;
// ------------------------------------------------------
// CONSTRUCTOR
// ------------------------------------------------------
constructor(scope, id, props) {
super(scope, id);
try {
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_MemoryProps(props);
}
catch (error) {
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
Error.captureStackTrace(error, Memory);
}
throw error;
}
// Enhanced CDK Analytics Telemetry
(0, metadata_resource_1.addConstructMetadata)(this, props);
// ------------------------------------------------------
// Set properties and defaults
// ------------------------------------------------------
this.memoryName = props.memoryName;
this.expirationDuration = props.expirationDuration ?? aws_cdk_lib_1.Duration.days(90);
this.description = props.description;
this.kmsKey = props.kmsKey;
this.executionRole = props.executionRole ?? this._createMemoryRole();
this.grantPrincipal = this.executionRole;
this.tags = props.tags;
// ------------------------------------------------------
// Permissions
// ------------------------------------------------------
// For KMS permissions see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/storage-encryption.html
if (this.kmsKey) {
this.kmsKey.grant(this.executionRole, 'kms:CreateGrant', 'kms:Decrypt', 'kms:DescribeKey', 'kms:GenerateDataKey', 'kms:GenerateDataKeyWithoutPlaintext', 'kms:ReEncrypt*');
}
// ------------------------------------------------------
// Validations
// ------------------------------------------------------
// Validate memory name
(0, validation_helpers_1.throwIfInvalid)(this._validateMemoryName, this.memoryName, this);
// Validate expiration duration
(0, validation_helpers_1.throwIfInvalid)(this._validateMemoryExpirationDays, this.expirationDuration.toDays());
// Validate memory tags
(0, validation_helpers_1.throwIfInvalid)(this._validateMemoryTags, this.tags, this);
// Memory strategies are already validated when building them, so no need to validate them here
// ------------------------------------------------------
// CFN Props - With Lazy support
// ------------------------------------------------------
const cfnProps = {
name: this.memoryName,
description: this.description,
eventExpiryDuration: this.expirationDuration.toDays(),
encryptionKeyArn: this.kmsKey?.keyArn,
memoryExecutionRoleArn: this.executionRole?.roleArn,
memoryStrategies: aws_cdk_lib_1.Lazy.any({ produce: () => this._renderMemoryStrategies() }, { omitEmptyArray: true }),
tags: this.tags,
};
// ------------------------------------------------------
// CFN Resource
// ------------------------------------------------------
this.__resource = new aws_bedrockagentcore_1.CfnMemory(this, 'Memory', cfnProps);
this.memoryId = this.__resource.attrMemoryId;
this.memoryArn = this.__resource.attrMemoryArn;
this.status = this.__resource.attrStatus;
this.updatedAt = this.__resource.attrUpdatedAt;
this.createdAt = this.__resource.attrCreatedAt;
this.failureReason = this.__resource.attrFailureReason;
// Add memory strategies to the memory
for (const strategy of props.memoryStrategies ?? []) {
this.addMemoryStrategy(strategy);
}
}
// ------------------------------------------------------
// HELPER METHODS - addX()
// ------------------------------------------------------
/**
* Add memory strategy to the memory.
* @default - No memory strategies.
*/
addMemoryStrategy(memoryStrategy) {
try {
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_IMemoryStrategy(memoryStrategy);
}
catch (error) {
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
Error.captureStackTrace(error, this.addMemoryStrategy);
}
throw error;
}
// Add the memory strategy to the memory
this.memoryStrategies.push(memoryStrategy);
// Grant necessary permissions to the execution role
const grant = memoryStrategy.grant(this.executionRole);
grant?.applyBefore(this.__resource);
}
/**
* Creates execution role needed for the memory to access AWS services
* @returns The created role
* @internal This is an internal core function and should not be called directly.
*/
_createMemoryRole() {
const role = new iam.Role(this, 'ServiceRole', {
assumedBy: new iam.ServicePrincipal('bedrock-agentcore.amazonaws.com'),
});
return role;
}
// ------------------------------------------------------
// VALIDATORS
// ------------------------------------------------------
/**
* Validates the memory tags format
* @param tags The tags object to validate
* @returns Array of validation error messages, empty if valid
*/
_validateMemoryTags = (tags, scope) => {
let errors = [];
if (!tags) {
return errors; // Tags are optional
}
// Validate each tag key and value
for (const [key, value] of Object.entries(tags)) {
errors.push(...(0, validation_helpers_1.validateStringFieldLength)({
value: key,
fieldName: 'Tag key',
minLength: MEMORY_TAG_MIN_LENGTH,
maxLength: MEMORY_TAG_MAX_LENGTH,
}, scope));
// Validate tag key pattern: ^[a-zA-Z0-9\s._:/=+@-]*$
const validKeyPattern = /^[a-zA-Z0-9\s._:/=+@-]*$/;
errors.push(...(0, validation_helpers_1.validateFieldPattern)(key, 'Tag key', validKeyPattern, undefined, scope));
// Validate tag value
errors.push(...(0, validation_helpers_1.validateStringFieldLength)({
value: value,
fieldName: 'Tag value',
minLength: MEMORY_TAG_MIN_LENGTH,
maxLength: MEMORY_TAG_MAX_LENGTH,
}, scope));
// Validate tag value pattern: ^[a-zA-Z0-9\s._:/=+@-]*$
const validValuePattern = /^[a-zA-Z0-9\s._:/=+@-]*$/;
errors.push(...(0, validation_helpers_1.validateFieldPattern)(value, 'Tag value', validValuePattern, undefined, scope));
}
return errors;
};
/**
* Validates the memory name format
* @param name The memory name to validate
* @returns Array of validation error messages, empty if valid
*/
_validateMemoryName = (name, scope) => {
let errors = [];
errors.push(...(0, validation_helpers_1.validateStringFieldLength)({
value: name,
fieldName: 'Memory name',
minLength: MEMORY_NAME_MIN_LENGTH,
maxLength: MEMORY_NAME_MAX_LENGTH,
}, scope));
// Check if name matches the AWS API pattern: [a-zA-Z][a-zA-Z0-9_]{0,47}
// Must start with a letter, followed by up to 47 letters, numbers, or underscores
const validNamePattern = /^[a-zA-Z][a-zA-Z0-9_]{0,47}$/;
errors.push(...(0, validation_helpers_1.validateFieldPattern)(name, 'Memory name', validNamePattern, undefined, scope));
return errors;
};
/**
* Validates the memory expiration days
* @param expirationDays The memory expiration days to validate
* @returns Array of validation error messages, empty if valid
*/
_validateMemoryExpirationDays = (expirationDays) => {
let errors = [];
if (aws_cdk_lib_1.Token.isUnresolved(expirationDays)) {
return errors;
}
if (expirationDays < MEMORY_EXPIRATION_DAYS_MIN || expirationDays > MEMORY_EXPIRATION_DAYS_MAX) {
errors.push(`Memory expiration days must be between ${MEMORY_EXPIRATION_DAYS_MIN} and ${MEMORY_EXPIRATION_DAYS_MAX}`);
}
return errors;
};
// ------------------------------------------------------
// RENDERERS
// ------------------------------------------------------
/**
* Render the memory strategies.
*
* @returns Array of MemoryStrategyProperty objects in CloudFormation format, or undefined if no strategies are defined
* @default - undefined if no strategies are defined or array is empty
* @internal This is an internal core function and should not be called directly.
*/
_renderMemoryStrategies() {
if (!this.memoryStrategies || this.memoryStrategies.length === 0) {
return undefined;
}
return this.memoryStrategies.map(ms => ms.render());
}
static {
__runInitializers(_classThis, _classExtraInitializers);
}
};
return Memory = _classThis;
})();
exports.Memory = Memory;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibWVtb3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBRUgsNkNBQXlGO0FBR3pGLDJFQUE2RTtBQUM3RSwrREFNb0M7QUFDcEMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyw4RUFBOEY7QUFDOUYsMEVBQTBFO0FBRzFFLG1DQUFzQztBQUN0Qyw2REFBdUc7QUFFdkc7OytFQUUrRTtBQUMvRTs7O0dBR0c7QUFDSCxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUVqQzs7O0dBR0c7QUFDSCxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUVsQzs7O0dBR0c7QUFDSCxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQUVoQzs7O0dBR0c7QUFDSCxNQUFNLHFCQUFxQixHQUFHLEdBQUcsQ0FBQztBQUVsQzs7O0dBR0c7QUFDSCxNQUFNLDBCQUEwQixHQUFHLENBQUMsQ0FBQztBQUNyQzs7O0dBR0c7QUFDSCxNQUFNLDBCQUEwQixHQUFHLEdBQUcsQ0FBQztBQWlIdkM7OytFQUUrRTtBQUMvRTs7O0dBR0c7QUFDSCxNQUFzQixVQUFXLFNBQVEsc0JBQVE7O0lBYS9DLFlBQVksS0FBZ0IsRUFBRSxFQUFVO1FBQ3RDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDbEI7SUFDRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxPQUF1QixFQUFFLEdBQUcsT0FBaUI7UUFDakQsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUM5QixPQUFPO1lBQ1AsT0FBTztZQUNQLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDOUIsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDLENBQUM7S0FDSjtJQUNEOzs7Ozs7O09BT0c7SUFDSCxV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QyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQ3JEOztZQTdUVSx1REFBTTs7Ozs7QUFBTix3QkFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEFybiwgQXJuRm9ybWF0LCBEdXJhdGlvbiwgSVJlc291cmNlLCBMYXp5LCBSZXNvdXJjZSwgVG9rZW4gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBJQ29uc3RydWN0LCBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIGJlZHJvY2thZ2VudGNvcmUgZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmUnO1xuaW1wb3J0IHsgQ2ZuTWVtb3J5LCBDZm5NZW1vcnlQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlJztcbmltcG9ydCB7XG4gIERpbWVuc2lvbnNNYXAsXG4gIE1ldHJpYyxcbiAgTWV0cmljT3B0aW9ucyxcbiAgTWV0cmljUHJvcHMsXG4gIFN0YXRzLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBrbXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuLy8gSW50ZXJuYWwgTGlic1xuaW1wb3J0IHsgSU1lbW9yeVN0cmF0ZWd5IH0gZnJvbSAnLi9tZW1vcnktc3RyYXRlZ3knO1xuaW1wb3J0IHsgTWVtb3J5UGVybXMgfSBmcm9tICcuL3Blcm1zJztcbmltcG9ydCB7IHZhbGlkYXRlRmllbGRQYXR0ZXJuLCB2YWxpZGF0ZVN0cmluZ0ZpZWxkTGVuZ3RoLCB0aHJvd0lmSW52YWxpZCB9IGZyb20gJy4vdmFsaWRhdGlvbi1oZWxwZXJzJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVEFOVFNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogTWluaW11bSBsZW5ndGggZm9yIGJyb3dzZXIgbmFtZVxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IE1FTU9SWV9OQU1FX01JTl9MRU5HVEggPSAxO1xuXG4vKipcbiAqIE1heGltdW0gbGVuZ3RoIGZvciBicm93c2VyIG5hbWVcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBNRU1PUllfTkFNRV9NQVhfTEVOR1RIID0gNDg7XG5cbi8qKlxuICogTWluaW11bSBsZW5ndGggZm9yIGJyb3dzZXIgdGFnc1xuICogQGludGVybmFsXG4gKi9cbmNvbnN0IE1FTU9SWV9UQUdfTUlOX0xFTkdUSCA9IDE7XG5cbi8qKlxuICogTWF4aW11bSBsZW5ndGggZm9yIGJyb3dzZXIgdGFnc1xuICogQGludGVybmFsXG4gKi9cbmNvbnN0IE1FTU9SWV9UQUdfTUFYX0xFTkdUSCA9IDI1NjtcblxuLyoqXG4gKiBNaW5pbXVtIGxlbmd0aCBmb3IgbWVtb3J5IGV4cGlyYXRpb24gZGF5c1xuICogQGludGVybmFsXG4gKi9cbmNvbnN0IE1FTU9SWV9FWFBJUkFUSU9OX0RBWVNfTUlOID0gNztcbi8qKlxuICogTWF4aW11bSBsZW5ndGggZm9yIG1lbW9yeSBleHBpcmF0aW9uIGRheXNcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBNRU1PUllfRVhQSVJBVElPTl9EQVlTX01BWCA9IDM2NTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZVxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIE1lbW9yeSByZXNvdXJjZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTWVtb3J5IGV4dGVuZHMgSVJlc291cmNlLCBpYW0uSUdyYW50YWJsZSB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBtZW1vcnkgcmVzb3VyY2VcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5QXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIG1lbW9yeVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBtZW1vcnlJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIElBTSByb2xlIHRoYXQgcHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHRoZSBtZW1vcnkgdG8gYWNjZXNzIEFXUyBzZXJ2aWNlcy5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGU/OiBpYW0uSVJvbGU7XG4gIC8qKlxuICAgKiBDdXN0b20gS01TIGtleSBmb3IgZW5jcnlwdGlvbiAoaWYgcHJvdmlkZWQpXG4gICAqL1xuICByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIG1lbW9yeVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgd2hlbiB0aGUgbWVtb3J5IHdhcyBsYXN0IHVwZGF0ZWRcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIG1lbW9yeSB3YXMgY3JlYXRlZFxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBHcmFudCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGlkZW50aXR5IHBlcm1pc3Npb25zIHRvIHBlcmZvcm0gYWN0aW9ucyBvbiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudDtcbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gd3JpdGUgY29udGVudCB0byB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50V3JpdGUoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG4gIC8qKlxuICAgKiBHcmFudCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGlkZW50aXR5IHBlcm1pc3Npb25zIHRvIHJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoaXMgbWVtb3J5LlxuICAgKiBCb3RoIFNob3J0LVRlcm0gTWVtb3J5IChTVE0pIGFuZCBMb25nLVRlcm0gTWVtb3J5IChMVE0pLlxuICAgKi9cbiAgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIHByaW5jaXBhbCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byByZWFkIHRoZSBTaG9ydC1UZXJtIE1lbW9yeSAoU1RNKSBjb250ZW50cyBvZiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50UmVhZFNob3J0VGVybU1lbW9yeShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gcmVhZCB0aGUgTG9uZy1UZXJtIE1lbW9yeSAoTFRNKSBjb250ZW50cyBvZiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50UmVhZExvbmdUZXJtTWVtb3J5KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIHByaW5jaXBhbCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byBkZWxldGUgY29udGVudCBvbiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50RGVsZXRlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIHByaW5jaXBhbCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byBkZWxldGUgU2hvcnQtVGVybSBNZW1vcnkgKFNUTSkgY29udGVudCBvbiB0aGlzIG1lbW9yeS5cbiAgICovXG4gIGdyYW50RGVsZXRlU2hvcnRUZXJtTWVtb3J5KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIHByaW5jaXBhbCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byBkZWxldGUgTG9uZy1UZXJtIE1lbW9yeSAoTFRNKSBjb250ZW50IG9uIHRoaXMgbWVtb3J5LlxuICAgKi9cbiAgZ3JhbnREZWxldGVMb25nVGVybU1lbW9yeShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBwcmluY2lwYWwgaWRlbnRpdHkgcGVybWlzc2lvbnMgdG8gbWFuYWdlIHRo