这是 AWS CDK v2 开发者指南。旧版 CDK v1 于 2022 年 6 月 1 日进入维护阶段,并于 2023 年 6 月 1 日终止支持。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
什么是 CDK 使用情况数据报告?
AWS Cloud Development Kit (AWS CDK) 应用程序配置为收集和报告使用情况数据,以深入了解 AWS CDK 其使用情况。CDK 团队使用这些数据来执行以下操作:
-
与客户沟通 — 使用存在已知安全性或可靠性问题的结构识别堆栈,并就影响客户的话题进行沟通。
-
为 CDK 开发提供信息 — 深入了解 CDK 的使用情况,更好地为 CDK 开发提供信息。
-
调查 CDK 问题 — 当报告错误时,使用情况数据可为 CDK 团队进行故障排除提供宝贵的见解。
收集了哪些使用数据?
CDK 收集的使用数据分为两类:
-
一般使用数据
-
其他使用数据
一般使用数据收集
CDK 从您的 CDK 应用程序中收集以下类型的常规使用数据:
-
所使用的 CDK 库的版本。
-
来自以下
NPM
模块的构造名称:-
AWS CDK 核心模块
-
AWS 构造库模块
-
AWS 解决方案构造模块
-
AWS 渲染农场部署套件模块
-
注意
在 1.93.0 版本之前, AWS CDK 报告的是合成期间加载的模块的名称和版本,而不是堆栈中使用的构造。
其他使用情况数据收集
从 CDK 版本 2.178.0 开始,使用情况数据收集扩展到包括以下其他使用情况数据:
-
CDK-定义的属性键-当您使用 L2 构造的内置属性时,将收集属性密钥。这包括嵌套在字典对象中的内置属性键。
-
来@@ 自 CDK 的布尔和枚举属性值——定义的属性键 ——对于 CDK 定义的属性键,将仅收集布尔和枚举类型的属性值。所有其他类型,例如字符串值或构造引用,都将被删除。
-
布尔和枚举类型的方法名称、键和属性值 — 当您使用 L2 构造方法时,我们将收集布尔和枚举类型的方法名称、属性键以及属性值。
对于您唯一创建的属性键和值,将对整个对象进行密文处理。例如,如果你InlineApiDefinition
用定义一个 OpenAPI 规范并将其传递到RestApi
构造中,整个InlineApiDefinition
对象将被编辑。
有关其他使用情况数据收集的更多信息,包括其好处和潜在问题,请参阅 aws- cdk 存储库中的 CDK 收集其他元数据(在功能标志下)#33198
CDK 如何收集使用数据
合成时,CDK 会从您的应用程序收集使用情况数据并将其存储在AWS::CDK::Metadata
资源中。以下是合成 AWS CloudFormation 模板上的一个示例:
CDKMetadata:
Type: "AWS::CDK::Metadata"
Properties:
Analytics: "v2:deflate64:H4sIAND9SGAAAzXKSw5AMBAA0L1b2PdzBYnEAdio3RglglY60zQi7u6TWL/XKmNUlxeQSOKwaPTBqrNhwEWU3hGHiCzK0dWWfAxoL/Fd8mvk+QkS/0X6BdjnCdgmOOQKWz+AqqLDt2Y3YMnLYWwAAAA="
Analytics
属性是堆栈中构造的 gzip、base64 编码、前缀编码列表。
如何选择退出或选择加入使用情况数据报告
您选择退出或选择加入一般使用情况数据报告和其他使用情况数据报告的选项取决于您最初创建应用程序时使用的 CDK 版本。
默认情况下,CDK 应用程序配置为自动选择使用情况数据报告,如下所示:
-
所有 CDK 应用程序 — 选择了常规使用情况数据报告。
-
使用低@@ 于 v2.178.0 的版本创建的 CDK 应用程序 — 不会自动选择加入其他使用情况数据报告。
-
使用 v2.178.0 或更高版本创建的 CDK 应用程序-选择了其他使用情况数据报告。
警告
如果您选择退出,CDK 将无法识别您是否受到安全问题的影响,也不会向您发送安全问题通知。
选择退出所有使用情况数据报告
要选择退出所有使用情况数据报告,您可以使用 AWS Cloud Development Kit (AWS CDK) 命令行界面 (CLI) 或配置项目的cdk.json
文件。
选择退出使用 CDK 报告所有使用情况数据 CLI
-
将该
--no-version-reporting
选项与任何 CDK 配合使用 CLI 命令选择退出单个命令。以下是模板合成期间选择退出的示例:$
cdk synth --no-version-reporting
由于 CDK 在您运行时会自动合成模板
cdk deploy
,因此您还应该--no-version-reporting
使用该cdk deploy
命令。
通过配置cdk.json
文件选择退出所有使用情况数据报告
-
在
./cdk.json
或~/.cdk.json
中将versionReporting
设置为false
默认情况下,这会让您选择退出。以下是示例:{ "app": "...", "versionReporting": false }
-
配置完成后,您可以覆盖这一行为,通过在单个命令中指定
--version-reporting
来选择加入。
仅选择退出其他使用情况数据报告
如果您的 CDK 应用程序是使用低于 2.178.0 的 CDK 版本创建的,那么即使您选择了常规使用情况数据报告,您也会自动选择退出其他使用情况数据报告。您无需执行任何操作即可选择退出其他使用情况数据报告。
如果您的 CDK 应用程序是使用 CDK 版本 2.178.0 或更高版本创建的,则必须选择退出所有使用情况数据报告。您不能只选择退出额外的使用数据报告。
选择使用情况数据报告
如果您的 CDK 应用程序是使用 CDK 版本 2.178.0 或更高版本创建的,则可以通过将设置为来选择加入所有使用情况数据报告。versionReporting
true
这是 CDK 应用程序的默认行为。
如果您的 CDK 应用程序是使用低于 2.178.0 的 CDK 版本创建的,则可以通过将设置为来选择常规使用情况数据报告。versionReporting
true
要选择加入其他使用情况数据报告,您必须启用功能标记。
选择加入其他使用情况数据报告
注意
这些步骤适用于最初使用低于 2.178.0 的版本创建的 CDK 应用程序
-
确认您现在使用的是 CDK 版本 2.178.0 或更高版本。
-
在您的 CDK 配置文件中,指定
@aws-cdk/core:enableAdditionalMetadataCollection
为。true
以下是示例:{ "context": { "@aws-cdk/core:enableAdditionalMetadataCollection": "true" } }
-
您也可以在
FeatureFlags
类中使用该ENABLE_ADDITIONAL_METADATA_COLLECTION
值。以下是示例:import * as cdk from 'aws-cdk-lib'; import { FeatureFlags } from 'aws-cdk-lib'; import * as cx_api from 'aws-cdk-lib/cx-api'; import { Construct } from 'constructs'; export class MyStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Set the feature flag ENABLE_ADDITIONAL_METADATA_COLLECTION to true FeatureFlags.of(this).add(cx_api.ENABLE_ADDITIONAL_METADATA_COLLECTION, true); // Your stack resources go here new cdk.aws_s3.Bucket(this, 'MyBucket'); } } const app = new cdk.App(); new MyStack(app, 'MyStack');
示例
从 CDK 应用程序收集的一般和其他使用数据
以下是 CDK 应用程序的示例:
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
class MyStack extends cdk.Stack {
constructor(scope, id, props) {
super(scope, id, props);
// Create an S3 bucket (L2 construct)
const myBucket = new s3.Bucket(this, 'MyBucket', {
bucketName: 'my-cdk-example-bucket', // String type
versioned: true, // Boolean type
removalPolicy: cdk.RemovalPolicy.DESTROY, // ENUM type
lifecycleRules: [{ // Array of object type
expirationDate: new Date('2019-10-01'),
objectSizeLessThan: 600,
objectSizeGreaterThan: 500,
}],
});
// Use a method of the L2 construct to define additional properties
myBucket.addLifecycleRule({
id: 'ExpireOldObjects',
enabled: true, // Boolean
expiration: cdk.Duration.days(90), // Expire objects after 90 days
});
}
}
// Define the CDK app and stack
const app = new cdk.App();
new MyStack(app, 'MyStack');
app.synth();
合成时,使用数据会被收集、压缩并存储在AWS::CDK::Metadata
资源中。
以下是使用低于 2.178.0 的 CDK 版本收集的一般使用数据示例:
{
"fqn": "aws-cdk-lib.aws-s3.Bucket",
"version": "v2.170.0"
}
以下是收集的使用数据示例,包括 CDK 版本 2.178.0 中引入的其他使用情况数据:
{
"fqn": "aws-cdk-lib.aws_s3.Bucket",
"version": "2.170.0",
"metadata": [
{
"type": "aws:cdk:analytics:construct",
"data": {
"bucketName": "*",
"versioned": true,
"removalPolicy": "cdk.RemovalPolicy.DESTROY",
"lifecycleRules": [
{
"expirationDate": "*",
"objectSizeLessThan": "*",
"objectSizeGreaterThan": "*"
}
]
}
},
{
"type": "aws:cdk:analytics:method",
"data": {
"name": "addLifecycleRule",
"prop": {
"id": "*",
"enabled": true,
"expiration": "*",
}
}
}
]
}