ElastiCache CDK 构造库
本单元中更高层次的构件的API是实验性的并正在积极开发中. 在今后任何版本中,它们都须作非背向相容的修改或去除。 这些是 不适用 语义版本 模型和断开的更改 在发行笔记中宣布. 这意味着虽然你可能使用它们,但可能需要更新 当更新到此软件包的更新版本时,您的源代码.
本模块的构造用于 亚马逊快递。 。 。 .
- 这个
ServerlessCache构造有利于创建和管理无服务器缓存. - 这个
User财务报告和审定财务报表UserGroup构造有利于创建和管理缓存用户.
无服务器缓存
Amazon ElastiCache Serverles是一个无服务器选项,根据应用程序流量模式自动缩放缓存容量. 您可以使用 ServerlessCache 构造 :
const vpc = new ec2.Vpc(this, 'VPC');
const cache = new elasticache.ServerlessCache(this, 'ServerlessCache', {
vpc,
});
连接到无服务器缓存
要控制安全小组能访问无服务器缓存的人,请使用 .connections 属性.
无服务器缓存有一个默认端口 6379。 。 。 .
此示例允许 EC2 实例连接到无服务器缓存 :
declare const serverlessCache: elasticache.ServerlessCache;
declare const instance: ec2.Instance;
// allow the EC2 instance to connect to serverless cache on default port 6379
serverlessCache.connections.allowDefaultPortFrom(instance);
使用自定义引擎版本
这个名字 CacheEngine 财务报告和审定财务报表 UserEngine 固定成员覆盖现有版本
在最近CDK发布时。 如果 ElastiCache 发布新引擎
在添加为指定成员之前,请使用 .of(...) 工厂改为目标
它没有等待 CDK 更新 :
declare const vpc: ec2.Vpc;
new elasticache.ServerlessCache(this, 'ServerlessCache', {
// Use any engine/version combination supported by ElastiCache:
engine: elasticache.CacheEngine.of('valkey', '9'),
vpc,
});
同样的模式适用于 UserEngine.of(engineType) 用于用户和用户组.
缓存使用限制
您可以在缓存数据存储和ECPU/second上配置使用限制,用于控制成本并确保可预测的性能.
配置选项 :
- 最大限度:确保您的缓存使用量不超过所配置的最大值
- 最低限额: 为连贯一致的业绩保留资源基线水平
- 两者: 定义您的缓存使用将运行的区域
关于更多的信息,见 为管理费用设定比例限制。 。 。 .
declare const vpc: ec2.Vpc;
const serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {
engine: elasticache.CacheEngine.VALKEY_LATEST,
vpc,
cacheUsageLimits: {
// cache data storage limits (GB)
dataStorageMinimumSize: Size.gibibytes(2), // minimum: 1GB
dataStorageMaximumSize: Size.gibibytes(3), // maximum: 5000GB
// rate limits (ECPU/second)
requestRateLimitMinimum: 1000, // minimum: 1000
requestRateLimitMaximum: 10000, // maximum: 15000000
},
});
备份和恢复
您可以启用无服务器缓存的自动备份 . 当自动备份被启用后,ElastiCache每天创建缓存的备份.
也可以在最方便的时候随时设置备用窗口. 如果您不指定备份窗口, ElastiCache 将自动指定一个 .
更多信息见 安排自动备份。 。 。 .
要启用自动备份,请设置 backupRetentionLimit 属性。 您也可以通过设置指定快照创建时间 backupTime 属性 :
declare const vpc: ec2.Vpc;
const serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {
backup: {
// enable automatic backups and set the retention period to 6 days
backupRetentionLimit: 6,
// set the backup window to 9:00 AM UTC
backupTime: events.Schedule.cron({
hour: '9',
minute: '0',
}),
},
vpc,
});
您可以通过设置创建最后备份 backupNameBeforeDeletion 属性.
declare const vpc: ec2.Vpc;
const serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {
engine: elasticache.CacheEngine.VALKEY_LATEST,
backup: {
// set a backup name before deleting a cache
backupNameBeforeDeletion: "my-final-backup-name",
},
vpc,
});
通过将快照ARNs设置为 backupArnsToRestore 属性 :
declare const vpc: ec2.Vpc;
const serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {
engine: elasticache.CacheEngine.VALKEY_LATEST,
backup: {
// set the backup(s) to restore
backupArnsToRestore: ['arn:aws:elasticache:us-east-1:123456789012:serverlesscachesnapshot:my-final-backup-name'],
},
vpc,
});
休息时加密
At-rest 加密总是对无服务器缓存启用. 有两个加密选项:
- 默认: 当无
kmsKey指定(左起为undefined),自动使用 AWS 拥有的 KMS 密钥 - 客户管理密钥:首先创建 KMS 密钥,然后通过
kmsKey属性
休息时加密的客户管理密钥
ElastiCache支持对称的客户管理密钥(CMK)在休息时进行加密.
更多信息见 使用 AWS KMS 的客户管理密钥。 。 。 .
要使用CMK, 请设置您的CMK 到 kmsKey 属性 :
import { Key } from 'aws-cdk-lib/aws-kms';
declare const kmsKey: Key;
declare const vpc: ec2.Vpc;
const serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {
engine: elasticache.CacheEngine.VALKEY_LATEST,
serverlessCacheName: 'my-serverless-cache',
vpc,
// set Customer Managed Key
kmsKey,
});
计量和监测
您可以使用 Cloud Watch Metrics 通过 metric 方法.
关于无服务器缓存计量的更多信息,见 Valkey 和 Redis 开放源码软件的无服务器参数和事件 财务报告和审定财务报表 无服务器参数和事件。 。 。 .
declare const serverlessCache: elasticache.ServerlessCache;
// The 5 minutes average of the total number of successful read-only key lookups in the cache.
const cacheHits = serverlessCache.metricCacheHitCount();
// The 5 minutes average of the total number of bytes used by the data stored in the cache.
const bytesUsedForCache = serverlessCache.metricDataStored();
// The 5 minutes average of the total number of ElastiCacheProcessingUnits (ECPUs) consumed by the requests executed on the cache.
const elastiCacheProcessingUnits = serverlessCache.metricProcessingUnitsConsumed();
// Create an alarm for ECPUs.
elastiCacheProcessingUnits.createAlarm(this, 'ElastiCacheProcessingUnitsAlarm', {
threshold: 50,
evaluationPeriods: 1,
});
导入已存在的无服务器缓存
要导入已有的无服务器缓存, 请使用 ServerlessCache.fromServerlessCacheAttributes 方法 :
declare const securityGroup: ec2.SecurityGroup;
const importedServerlessCache = elasticache.ServerlessCache.fromServerlessCacheAttributes(this, 'ImportedServerlessCache', {
serverlessCacheName: 'my-serverless-cache',
securityGroups: [securityGroup],
});
用户和用户组
设置需要属性并创建 :
const newDefaultUser = new elasticache.NoPasswordUser(this, 'NoPasswordUser', {
userId: 'default',
accessControl: elasticache.AccessControl.fromAccessString("on ~* +@all"),
})
const userGroup = new elasticache.UserGroup(this, 'UserGroup', {
users: [newDefaultUser],
});
非洲区域局
在 Valkey 7.2 及 上行 和 Redis OSS 6.0 上行,您可以使用一个功能,即基于角色的存取控制(RBAC). RBAC也是控制无服务器缓存访问的唯一方法.
RBAC允许您通过用户组控制缓存访问. 这些用户组被设计为组织访问缓存的一种方式.
更多信息见 角色接入控制。 。 。 .
为使RBAC能够使用Valkey或Redis OSS进行ElastiCache,请采取以下步骤:
- 创建用户.
- 创建用户组并添加用户到用户组.
- 指定用户组为缓存 .
创建用户
首先,您需要通过使用 IamUser, (中文(简体) ), PasswordUser 或者说 NoPasswordUser 构造.
使用 RBAC 创建用户,并通过使用 accessString 属性.
更多信息见 使用访问字符串指定权限。 。 。 .
您可以通过使用 IamUser 构造 :
const user = new elasticache.IamUser(this, 'User', {
// set user engine
engine: elasticache.UserEngine.REDIS,
// set user id
userId: 'my-user',
// set username
userName: 'my-user',
// set access string
accessControl: elasticache.AccessControl.fromAccessString("on ~* +@all"),
});
注:IAM启用的用户必须具有匹配的用户名和用户名. 更多信息见 限制。构造可以自动设置用户名,使其与用户代号相同.
如果您想要创建密码认证用户, 请使用 PasswordUser 构造 :
const user = new elasticache.PasswordUser(this, 'User', {
// set user engine
engine: elasticache.UserEngine.VALKEY,
// set user id
userId: 'my-user-id',
// set access string
accessControl: elasticache.AccessControl.fromAccessString("on ~* +@all"),
// set username
userName: 'my-user-name',
// set up to two passwords
passwords: [
// "SecretIdForPassword" is the secret id for the password
SecretValue.secretsManager('SecretIdForPassword'),
// "AnotherSecretIdForPassword" is the secret id for the password
SecretValue.secretsManager('AnotherSecretIdForPassword'),
],
});
您也可以通过使用 NoPasswordUser 构造 :
const user = new elasticache.NoPasswordUser(this, 'User', {
// set user engine
engine: elasticache.UserEngine.REDIS,
// set user id
userId: 'my-user-id',
// set access string
accessControl: elasticache.AccessControl.fromAccessString("on ~* +@all"),
// set username
userName: 'my-user-name',
});
注:
NoPasswordUser只能用于 Redis 快取 .
默认用户
ElastiCache 自动创建默认用户,同时设置用户ID和用户名 default。该默认用户不能被修改或删除。 用户被创建为无密码认证用户.
这个用户旨在与之前的 Redis OSS 版本的默认行为相兼容,并且有一个访问字符串,允许它调用所有命令并访问所有密钥.
要在 CDK 中使用此自动创建的默认用户, 您可以使用 NoPasswordUser.fromUserAttributes 方法。 关于进口方法的更多信息,请参见: 导入现有用户组 节.
要将适当的访问控制添加到缓存中, 请设置 accessString 改为 off -@all 或用很强的口令.
要更改默认用户,请创建新的默认用户,用户名设置为 default。然后可以与原默认用户互换.
更多信息见 用 Valkey 或 Redis OSS 将 RBAC 应用到缓存中。 。 。 .
如果你想创建新的默认用户, userName 必须是 default 财务报告和审定财务报表 userId 绝对不是 default 通过使用 NoPasswordUser 或者说 PasswordUser数字 :
// use the original `default` user by using import method
const defaultUser = elasticache.NoPasswordUser.fromUserAttributes(this, 'DefaultUser', {
// userId and userName must be 'default'
userId: 'default',
});
// create a new default user
const newDefaultUser = new elasticache.NoPasswordUser(this, 'NewDefaultUser', {
// new default user id must not be 'default'
userId: 'new-default',
// new default username must be 'default'
userName: 'default',
// set access string
accessControl: elasticache.AccessControl.fromAccessString("on ~* +@all"),
});
注意: 您无法使用
IamUser因为一个IAM启用的用户的用户名和用户ID不能不同.
添加用户到用户组
下一个,使用 UserGroup 构造以创建用户组并添加用户.
确保您包括原默认用户或新默认用户:
declare const newDefaultUser: elasticache.IUser;
declare const user: elasticache.IUser;
declare const anotherUser: elasticache.IUser;
const userGroup = new elasticache.UserGroup(this, 'UserGroup', {
// add users including default user
users: [newDefaultUser, user],
});
// you can also add a user by using addUser method
userGroup.addUser(anotherUser);
指定用户组
最后,指定一个用户组以缓存 :
declare const vpc: ec2.Vpc;
declare const userGroup: elasticache.UserGroup;
const serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {
engine: elasticache.CacheEngine.VALKEY_LATEST,
serverlessCacheName: 'my-serverless-cache',
vpc,
// assign User Group
userGroup,
});
授予IAM用户权限
如果你创建IAM用户, "elasticache:Connect" 必须允许对用户和缓存采取行动.
注:不需要任何密码用户或密码认证用户的许可.
更多信息见 正在使用 IAM 认证。 。 。 .
为了获得许可,您可以使用 grantConnect 方法输入 IamUser 财务报告和审定财务报表 ServerlessCache 构造 :
declare const user: elasticache.IamUser;
declare const serverlessCache: elasticache.ServerlessCache;
declare const role: iam.Role;
// grant "elasticache:Connect" action permissions to role
user.grantConnect(role);
serverlessCache.grants.connect(role);
导入现有用户组
您可以通过导入方法导入已有的用户组 :
const stack = new Stack();
const importedIamUser = elasticache.IamUser.fromUserId(this, 'ImportedIamUser', 'my-iam-user-id');
const importedPasswordUser = elasticache.PasswordUser.fromUserAttributes(stack, 'ImportedPasswordUser', {
userId: 'my-password-user-id',
});
const importedNoPasswordUser = elasticache.NoPasswordUser.fromUserAttributes(stack, 'ImportedNoPasswordUser', {
userId: 'my-no-password-user-id',
});
const importedUserGroup = elasticache.UserGroup.fromUserGroupAttributes(this, 'ImportedUserGroup', {
userGroupName: 'my-user-group-name'
});