@aws-cdk/aws-synthetics

中文文档
1.204.0发布于 2023/06/20Apache-2.0TypeScriptCommonJS近 30 天下载 3474

AWS 的 CDK 构造库: 合成

此软件包已被标记为弃用

AWS CDK v1 has reached End-of-Support on 2023-06-01. This package is no longer being updated, and users should migrate to AWS CDK v2. For more information on how to migrate, see https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html

中文使用文档
文档目录5 节
  1. 加那利语Name
  2. 加那利计划
  3. 配置 Canary 脚本
  4. 在VPC上开金丝雀
  5. 警报

亚马逊云表合成库


End-of-Support

AWS CDK v1在2023-06-01上达到了支持结束. 此软件包不再更新,用户应该迁移到 AWS CDK v2.

关于如何移徙的更多信息,请参见: 移动到 AWS CDK v2 指南。 。 。 .


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_3_1,
  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:

UI Screenshot

加那利代码将在合成人代表您创建的羊肉达函数中被执行. 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()。 。 。 .

配置 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_3_4,
});

// 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_3_4,
});

// To supply the code from a S3 bucket:
import * as s3 from '@aws-cdk/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_3_4,
});

说明: 合成器有指定用于金丝雀的文件夹结构. 对于通过下列方式提供的节点脚本: 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/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_3_4,
  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/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,
});

版本与发布记录

@aws-cdk/aws-synthetics 共发布 193 个版本,首次发布于 2020/05/05;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.204.0latest2023/06/203 年前
1.203.02023/06/013 年前
1.202.02023/05/223 年前
1.201.02023/05/113 年前
1.200.02023/04/273 年前
1.199.02023/04/213 年前

关于 @aws-cdk/aws-synthetics 的常见问题

@aws-cdk/aws-synthetics 是什么?

AWS 的 CDK 构造库: 合成注意:该包已被作者标记为弃用——AWS CDK v1 has reached End-of-Support on 2023-06-01. This package is no longer being updated, and users should migrate to AWS CDK v2. For more information on how to migrate, see https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html

如何安装 @aws-cdk/aws-synthetics?

在项目目录运行 npm install @aws-cdk/aws-synthetics,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@aws-cdk/aws-cloudwatch(1.204.0)、@aws-cdk/aws-ec2(1.204.0)、@aws-cdk/aws-iam(1.204.0)、@aws-cdk/aws-s3(1.204.0)、@aws-cdk/aws-s3-assets(1.204.0)、@aws-cdk/core(1.204.0)、constructs(^3.3.69)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@aws-cdk/aws-synthetics 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@aws-cdk/aws-synthetics 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@aws-cdk/aws-synthetics 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >= 14.15.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@aws-cdk/aws-synthetics 可以商用吗?

@aws-cdk/aws-synthetics 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@aws-cdk/aws-synthetics 的下载量有多少?

根据 npm 官方下载统计,@aws-cdk/aws-synthetics 在 2026/10/08 – 2026/11/06 这 30 天内被下载 3,474 次,日均约 116 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@aws-cdk/aws-synthetics 还在维护吗?

最新版本 1.204.0 发布于 2023/06/20(3 年前);至今共发布 193 个版本,其中过去 12 个月发布了 0 个;首次发布于 2020/05/05。作者已将其标记为弃用,新项目建议寻找替代方案。