由 Lambda 函数支持的 AWS CDK 自定义资源
AWS CDK custom resource backed by a Lambda Function
CloudFormation 本身支持由 lambda 或 ec2 支持的自定义资源。
但是,我在 AWS CDK 上找不到类似的东西。看起来您可以定义自定义资源的唯一方法现在是通过指定资源、操作和参数。
这是否意味着使用当前的 CDK 我可以选择是调用 lambda 函数还是特定的 "CLI" 命令?谁能解释一下 AWS CDK 中自定义资源背后的基本逻辑?
P.S。我完全知道如何在 CloudFormation 上操作自定义资源。
您引用的自定义资源位于 @aws-cdk/aws-cloudformation
.
包中
您可以在 documentation:
中找到 TypeScript 示例
interface CopyOperationProps {
sourceBucket: IBucket;
targetBucket: IBucket;
}
class CopyOperation extends Construct {
constructor(parent: Construct, name: string, props: CopyOperationProps) {
super(parent, name);
const lambdaProvider = new lambda.SingletonFunction(this, 'Provider', {
uuid: 'f7d4f730-4ee1-11e8-9c2d-fa7ae01bbebc',
runtime: lambda.Runtime.PYTHON_3_7,
code: lambda.Code.fromAsset('../copy-handler'),
handler: 'index.handler',
timeout: Duration.seconds(60),
});
new CustomResource(this, 'Resource', {
provider: CustomResourceProvider.lambda(lambdaProvider),
properties: {
sourceBucketArn: props.sourceBucket.bucketArn,
targetBucketArn: props.targetBucket.bucketArn,
}
});
}
}
CloudFormation 本身支持由 lambda 或 ec2 支持的自定义资源。
但是,我在 AWS CDK 上找不到类似的东西。看起来您可以定义自定义资源的唯一方法现在是通过指定资源、操作和参数。
这是否意味着使用当前的 CDK 我可以选择是调用 lambda 函数还是特定的 "CLI" 命令?谁能解释一下 AWS CDK 中自定义资源背后的基本逻辑?
P.S。我完全知道如何在 CloudFormation 上操作自定义资源。
您引用的自定义资源位于 @aws-cdk/aws-cloudformation
.
您可以在 documentation:
中找到 TypeScript 示例interface CopyOperationProps {
sourceBucket: IBucket;
targetBucket: IBucket;
}
class CopyOperation extends Construct {
constructor(parent: Construct, name: string, props: CopyOperationProps) {
super(parent, name);
const lambdaProvider = new lambda.SingletonFunction(this, 'Provider', {
uuid: 'f7d4f730-4ee1-11e8-9c2d-fa7ae01bbebc',
runtime: lambda.Runtime.PYTHON_3_7,
code: lambda.Code.fromAsset('../copy-handler'),
handler: 'index.handler',
timeout: Duration.seconds(60),
});
new CustomResource(this, 'Resource', {
provider: CustomResourceProvider.lambda(lambdaProvider),
properties: {
sourceBucketArn: props.sourceBucket.bucketArn,
targetBucketArn: props.targetBucket.bucketArn,
}
});
}
}