CDK 混音器
说明: 核心混合机制现已存在GA并可在
constructs财务报告和审定财务报表aws-cdk-lib(单位:千美元)Mixins, (中文(简体) ),Mixin, (中文(简体) ),IMixin, (中文(简体) ),MixinApplicator, (中文(简体) ),ConstructSelector) (中文(简体) ). 所有的服务Mixins现在都可以在aws-cdk-lib。 。 。 . 请更新您的进口 .这个一揽子方案继续提供 日志发送混合 财务报告和审定财务报表 事件布里奇事件,这些仍然是实验性的.
本单元中更高层次的构件的API是实验性的并正在积极开发中. 在今后任何版本中,它们都须作非背向相容的修改或去除。 这些是 不适用 语义版本 模型和断开的更改 在发行笔记中宣布. 这意味着虽然你可能使用它们,但可能需要更新 当更新到此软件包的更新版本时,您的源代码.
CDK Mixins提供了一种新的,高级的方法来通过可相容抽象来添加功能. 与将所有特性捆绑在一起的传统L2构造不同,Mixins允许您选择并精确选择所需的构造能力. 在施工期间或施工后可以应用混合剂. 混音是一个 添加数, (中文(简体) ), 没有 a 取代构造属性. 它们本身不能改变属性的可选性或改变违约.
使用和文件
见 cDK Mixins 文档 内 aws-cdk-lib。 。 。 .
内建混音
日志发送
配置用于支持资源到不同目的地的已修改日志:
import * as cloudfrontMixins from '@aws-cdk/mixins-preview/aws-cloudfront/mixins';
// Create CloudFront distribution
declare const origin: s3.IBucket;
const distribution = new cloudfront.Distribution(scope, 'Distribution', {
defaultBehavior: {
origin: origins.S3BucketOrigin.withOriginAccessControl(origin),
},
});
// Create log destination
const logGroup = new logs.LogGroup(scope, 'DeliveryLogGroup');
// Configure log delivery using the mixin
distribution
.with(cloudfrontMixins.CfnDistributionLogsMixin.CONNECTION_LOGS.toLogGroup(logGroup, {
outputFormat: cloudfrontMixins.CfnDistributionConnectionLogsOutputFormat.LogGroup.JSON,
recordFields: [
cloudfrontMixins.CfnDistributionConnectionLogsRecordFields.CONNECTIONSTATUS,
cloudfrontMixins.CfnDistributionConnectionLogsRecordFields.CLIENTIP,
cloudfrontMixins.CfnDistributionConnectionLogsRecordFields.SERVERIP,
cloudfrontMixins.CfnDistributionConnectionLogsRecordFields.TLSPROTOCOL,
],
}));
当提供预创建的目的地时, 配置支持资源的 vended 日志发送 :
import * as cloudfrontMixins from '@aws-cdk/mixins-preview/aws-cloudfront/mixins';
// Create CloudFront distribution
declare const origin: s3.IBucket;
const distribution = new cloudfront.Distribution(scope, 'Distribution', {
defaultBehavior: {
origin: origins.S3BucketOrigin.withOriginAccessControl(origin),
},
});
// Create destination bucket
const destBucket = new s3.Bucket(scope, 'DeliveryBucket');
// Add permissions to bucket to facilitate log delivery
const bucketPolicy = new s3.BucketPolicy(scope, 'DeliveryBucketPolicy', {
bucket: destBucket,
document: new iam.PolicyDocument(),
});
// Create S3 delivery destination for logs
const destination = new logs.CfnDeliveryDestination(scope, 'Destination', {
destinationResourceArn: destBucket.bucketArn,
name: 'unique-destination-name',
deliveryDestinationType: 'S3',
});
distribution
.with(cloudfrontMixins.CfnDistributionLogsMixin.CONNECTION_LOGS.toDestination(destination));
用于交叉账户交付的已修改日志配置(仅支持 S3 和 Firehose 目的地)
import * as logDestinations from '@aws-cdk/mixins-preview/aws-logs';
import * as cloudfrontMixins from '@aws-cdk/mixins-preview/aws-cloudfront/mixins';
const destinationAccount = '123456789012';
const sourceAccount = '234567890123';
const region = 'us-east-1';
const app = new App();
const destStack = new Stack(app, 'destination-stack', {
env: {
account: destinationAccount,
region,
},
});
// Create destination bucket
const destBucket = new s3.Bucket(destStack, 'DeliveryBucket');
new logDestinations.S3DeliveryDestination(destStack, 'Destination', {
bucket: destBucket,
sourceAccountId: sourceAccount,
});
const sourceStack = new Stack(app, 'source-stack', {
env: {
account: sourceAccount,
region,
},
});
// Create CloudFront distribution
declare const origin: s3.IBucket;
const distribution = new cloudfront.Distribution(sourceStack, 'Distribution', {
defaultBehavior: {
origin: origins.S3BucketOrigin.withOriginAccessControl(origin),
},
});
const destination = logs.CfnDeliveryDestination.fromDeliveryDestinationArn(sourceStack, 'Destination', `arn of Delivery Destination in destinationAccount`);
distribution
.with(cloudfrontMixins.CfnDistributionLogsMixin.CONNECTION_LOGS.toDestination(destination));
事件桥事件模式
CDK Mixins为AWS资源自动生成已打出的事件Bridge事件模式. 这些图案有两种口味: 特定资源 财务报告和审定财务报表 独立。 。 。 .
特定资源事件模式
特定资源模式是通过附加资源参考(如S3桶)来创建的. 资源标识符被自动注入到事件模式中,因此调用一个没有参数的模式方法仍然过滤出事件到该特定资源. 例如,一个S3 objectCreatedPattern() 将自动将桶名包含在图案中, 这意味着它只匹配来自该特定桶的事件 .
事件模式基本用途
import { BucketEvents } from '@aws-cdk/mixins-preview/aws-s3/events';
import * as events from 'aws-cdk-lib/aws-events';
import * as targets from 'aws-cdk-lib/aws-events-targets';
// Works with L2 constructs
const myBucket = new s3.Bucket(scope, 'Bucket');
const bucketEvents = BucketEvents.fromBucket(myBucket);
declare const fn: lambda.Function;
new events.Rule(scope, 'Rule', {
eventPattern: bucketEvents.objectCreatedPattern({
object: { key: events.Match.wildcard('uploads/*') },
}),
targets: [new targets.LambdaFunction(fn)]
});
// Also works with L1 constructs
const cfnBucket = new s3.CfnBucket(scope, 'CfnBucket');
const cfnBucketEvents = BucketEvents.fromBucket(cfnBucket);
new events.CfnRule(scope, 'CfnRule', {
state: 'ENABLED',
eventPattern: cfnBucketEvents.objectCreatedPattern({
object: { key: events.Match.wildcard('uploads/*') },
}),
targets: [{ arn: fn.functionArn, id: 'L1' }]
});
事件模式特征
import { BucketEvents } from '@aws-cdk/mixins-preview/aws-s3/events';
const bucketEvents = BucketEvents.fromBucket(bucket);
// Bucket name is automatically injected from the bucket reference
const pattern = bucketEvents.objectCreatedPattern();
// pattern.detail.bucket.name === bucket.bucketName
事件元数据支持: 控制事件Bridge模式元数据
import { BucketEvents } from '@aws-cdk/mixins-preview/aws-s3/events';
import * as events from 'aws-cdk-lib/aws-events';
const bucketEvents = BucketEvents.fromBucket(bucket);
const pattern = bucketEvents.objectCreatedPattern({
eventMetadata: {
region: events.Match.prefix('us-'),
version: ['0']
}
});
独立事件模式
独立模式不与任何特定资源挂钩。 它们与所有此类资源的活动相匹配。 例如,一个独立的 AWSAPICallViaCloudTrail.eventPattern() 与CloudTrail API的通话一致 账户里所有的S3桶 不只是一个特定的.
事件模式基本用途
import { AWSAPICallViaCloudTrail, ObjectCreated, ObjectDeleted } from '@aws-cdk/mixins-preview/aws-s3/events';
import * as events from 'aws-cdk-lib/aws-events';
import * as targets from 'aws-cdk-lib/aws-events-targets';
declare const fn: lambda.Function;
// Works with L2 Rule
new events.Rule(scope, 'Rule', {
eventPattern: AWSAPICallViaCloudTrail.eventPattern({
tlsDetails: { tlsVersion: ['TLSv1.3'] },
eventMetadata: { region: ['us-east-1'] },
}),
targets: [new targets.LambdaFunction(fn)]
});
// Also works with L1 CfnRule
new events.CfnRule(scope, 'CfnRule', {
state: 'ENABLED',
eventPattern: AWSAPICallViaCloudTrail.eventPattern({
tlsDetails: { tlsVersion: ['TLSv1.3'] },
eventMetadata: { region: ['us-east-1'] },
}),
targets: [{ arn: fn.functionArn, id: 'L1' }]
});
事件模式特征
import { AWSAPICallViaCloudTrail } from '@aws-cdk/mixins-preview/aws-s3/events';
// Matches CloudTrail API calls across ALL S3 buckets
const pattern = AWSAPICallViaCloudTrail.eventPattern();
事件元数据支持: 控制事件Bridge模式元数据
import { AWSAPICallViaCloudTrail } from '@aws-cdk/mixins-preview/aws-s3/events';
import * as events from 'aws-cdk-lib/aws-events';
const pattern = AWSAPICallViaCloudTrail.eventPattern({
eventMetadata: {
region: events.Match.prefix('us-'),
version: ['0']
}
});
可用事件
AWS Event Schema 登记簿中提供的EventBridge事件事件模式。 常见的例子:
S3事件数字 :
ObjectCreated.eventPattern()- 对象创建事件ObjectDeleted.eventPattern()- 对象删除事件ObjectTagsAdded.eventPattern()- 对象标记事件AWSAPICallViaCloudTrail.eventPattern()- 云轨API电话
从服务特定模块导入事件 :
// Resource-specific (filters to a specific bucket)
import { BucketEvents } from '@aws-cdk/mixins-preview/aws-s3/events';
// Standalone (matches across all buckets)
import { AWSAPICallViaCloudTrail, ObjectCreated, ObjectDeleted } from '@aws-cdk/mixins-preview/aws-s3/events';