亚马逊云表合成库
此API 可能会发出警告 。 后向兼容性没有保证 .
所有构造都被移动到aws-cdk-lib/aws-synthetics.
Amazon Cloud Watch 合成器允许您通过生成来监视您的应用程序 合成 堵车 交通是由一个 金丝雀:一个按时间表运行的可配置的脚本. 您配置了金丝雀脚本以遵循相同的路径, 并进行与用户相同的动作, 这使得您可以不断验证您的用户体验, 即使您的应用程序没有任何流量 .
加那利语Name
为了说明如何使用金丝雀,假设您的应用定义了以下终点:
% curl "https://api.example.com/user/books/topbook/"
The Hitchhikers Guide to the Galaxy
下面的代码定义了一只金丝雀,它会击中 books/topbook 每5分钟结束点 :
const canary = new synthetics.Canary(this, 'MyCanary', {
schedule: synthetics.Schedule.rate(Duration.minutes(5)),
test: synthetics.Test.custom({
code: synthetics.Code.fromAsset(path.join(__dirname, 'canary')),
handler: 'index.handler',
}),
runtime: synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_4_0,
environmentVariables: {
stage: 'prod',
},
});
以下是一个实例: index.js 用于导出 handler 函数 :
const synthetics = require('Synthetics');
const log = require('SyntheticsLogger');
const pageLoadBlueprint = async function () {
// Configure the stage of the API using environment variables
const url = `https://api.example.com/${process.env.stage}/user/books/topbook/`;
const page = await synthetics.getPage();
const response = await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 });
// Wait for page to render. Increase or decrease wait time based on endpoint being monitored.
await page.waitFor(15000);
// This will take a screenshot that will be included in test output artifacts.
await synthetics.takeScreenshot('loaded', 'loaded');
const pageTitle = await page.title();
log.info('Page title: ' + pageTitle);
if (response.status() !== 200) {
throw 'Failed to load page!';
}
};
exports.handler = async () => {
return await pageLoadBlueprint();
};
说明: 职能 必须 调用
handler。 。 。 .
金丝雀会自动生产出"云表"Dashboard:

加那利代码将在合成人代表您创建的羊肉达函数中被执行. Lambda 函数包括一个自定义 运行时间 由合成人提供。 所提供的运行时间包括各种工具,例如: 傀儡 (对于以节点为基础的一个)和铬.
为了更多地了解合成能力,请检查 文档。 。 。 .
加那利计划
您可以指定一个金丝雀运行的时间表 提供一个
Schedule
对象 schedule 属性.
配置最多60分钟的运行速度 Schedule.rate数字 :
const schedule = synthetics.Schedule.rate(Duration.minutes(5)); // Runs every 5 minutes.
您也可以指定 cron 表达式 与 Schedule.cron数字 :
const schedule = synthetics.Schedule.cron({
hour: '0,8,16', // Run at 12am, 8am, 4pm UTC every day
});
如果你想让金丝雀在部署时运行一次 你可以使用 Schedule.once()。 。 。 .
删除金丝雀上的相关资源
当您删除一个 lambda 时, 您的 AWS 账户中将隔离以下基本资源 :
- 运行您金丝雀脚本的 Lambda 函数
- 用于保存文物的S3桶
- IAM的作用和政策
- 云表日志中的日志组 .
要更多地了解这些基本资源,见: 合成动画。 。 。 .
在 CCDK 中,您可以配置您的金丝雀来删除金丝雀被删除时隐藏的羊肉达函数.
这可以通过设置来提供 cleanup: Cleanup.LAMBDA。注意这一点
将会在引擎盖下创建自定义资源, 为您处理 lambda 删除 .
const canary = new synthetics.Canary(this, 'Canary', {
test: synthetics.Test.custom({
handler: 'index.handler',
code: synthetics.Code.fromInline('/* Synthetics handler code'),
}),
cleanup: synthetics.Cleanup.LAMBDA,
runtime: synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_4_0,
});
注意: 要正确清理删除时的金丝雀, 您仍需要手动删除其他资源 像S3桶和云表记录.
配置 Canary 脚本
要配置金丝雀执行的脚本,请使用 test 属性。 这个 test 属性接受 a Test 可初始化的示例 Test 类静态方法. 目前,唯一采用的方法是 Test.custom(),它允许你带来自己的代码。 将来会增加其他方法. Test.custom() 接受 code 财务报告和审定财务报表 handler 属性 - 两者都被合成器要求为您创建羊肉达函数.
这个 synthetics.Code 班级会暴露静态方法 来捆绑您的密码文物:
code.fromInline(code)- 指定内在脚本.code.fromAsset(path)- 指定 .zip 文件或本地文件系统中的目录,在部署时将其拉链并上传到 S3 。 关于目录结构,见上文注释.code.fromBucket(bucket, key[, objectVersion])- 指定包含您运行时代码的.zip文件的 S3 对象 。 关于目录结构,见上文注释.
使用 Code 类静态初始器 :
// To supply the code inline:
new synthetics.Canary(this, 'Inline Canary', {
test: synthetics.Test.custom({
code: synthetics.Code.fromInline('/* Synthetics handler code */'),
handler: 'index.handler', // must be 'index.handler'
}),
runtime: synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_4_0,
});
// To supply the code from your local filesystem:
new synthetics.Canary(this, 'Asset Canary', {
test: synthetics.Test.custom({
code: synthetics.Code.fromAsset(path.join(__dirname, 'canary')),
handler: 'index.handler', // must end with '.handler'
}),
runtime: synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_4_0,
});
// To supply the code from a S3 bucket:
import * as s3 from 'aws-cdk-lib/aws-s3';
const bucket = new s3.Bucket(this, 'Code Bucket');
new synthetics.Canary(this, 'Bucket Canary', {
test: synthetics.Test.custom({
code: synthetics.Code.fromBucket(bucket, 'canary.zip'),
handler: 'index.handler', // must end with '.handler'
}),
runtime: synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_4_0,
});
说明: 合成器有指定用于金丝雀的文件夹结构. 对于通过下列方式提供的节点脚本:
code.fromAsset()或者说code.fromBucket(),金丝雀资源需要以下文件夹结构:canary/ ├── nodejs/ ├── node_modules/ ├── <filename>.js对于通过 Python 脚本提供
code.fromAsset()或者说code.fromBucket(),金丝雀资源需要以下文件夹结构:canary/ ├── python/ ├── <filename>.py见合成 文档。 。 。 .
在VPC上开金丝雀
您可以指定什么 VPC 一个金丝雀在。 。 。 .
这可以使监测服务成为具体的《维也纳公约》的一部分。 要在VPC内放置金丝雀,您可以指定 vpc 有理想财产 VPC 把金丝雀放进去.
这将自动附加相应的IAM权限,附入VPC. 这将创建一个安全小组,并附加到VPC的默认子网上,除非通过 vpcSubnets 财务报告和审定财务报表 securityGroups。 。 。 .
import * as ec2 from 'aws-cdk-lib/aws-ec2';
declare const vpc: ec2.IVpc;
new synthetics.Canary(this, 'Vpc Canary', {
test: synthetics.Test.custom({
code: synthetics.Code.fromAsset(path.join(__dirname, 'canary')),
handler: 'index.handler',
}),
runtime: synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_4_0,
vpc,
});
说明: 默认情况下,Synthetics运行时间需要访问S3和Cloud Watch API,在没有启用互联网接入的私人子网(如被隔离的子网)中会失败.
确保加那利号安装在具有互联网连接的VPC或与S3和Cloud Watch的VPC端点进行启用和配置.
见 合成 VPC 文件。 。 。 .
警报
您可以在金丝雀上配置 Cloud Watch 提醒 。 度量衡由Cloud Watch自动发布,以下API可以访问:
canary.metricSuccessPercent()- 成功金丝雀在一定时间内运行的百分比canary.metricDuration()每只金丝雀运行需要多少时间,几秒钟.canary.metricFailed()- 失败的金丝雀数量在某一时间运行
创建一个跟踪金丝雀度量的提醒 :
import * as cloudwatch from 'aws-cdk-lib/aws-cloudwatch';
declare const canary: synthetics.Canary;
new cloudwatch.Alarm(this, 'CanaryAlarm', {
metric: canary.metricSuccessPercent(),
evaluationPeriods: 2,
threshold: 90,
comparisonOperator: cloudwatch.ComparisonOperator.LESS_THAN_THRESHOLD,
});
艺术品
你可以通过一个S3桶 从金丝雀跑道储存文物。 如果你没有, 当金丝雀创建时,它会自动生成。 您可以添加 生命周期规则 到自动生成的桶.
const canary = new synthetics.Canary(this, 'MyCanary', {
schedule: synthetics.Schedule.rate(Duration.minutes(5)),
test: synthetics.Test.custom({
code: synthetics.Code.fromAsset(path.join(__dirname, 'canary')),
handler: 'index.handler',
}),
runtime: synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_4_0,
artifactsBucketLifecycleRules: [{
expiration: Duration.days(30),
}],
});