我在 TS 项目中为 AWS CDK 编写了一些单元测试。
我在堆栈中使用 AWS::Lambda::Function
。
我的单元测试如下:我试图查看编译代码的目录位置是否已正确配置,没有错误。
test('is lambda code location correct',()=>{
template.hasResourceProperties("AWS::Lambda::Function",{
Code:{
S3Key:"d3c2479c6eb03922101251992e353c5e3f631cf5a055030bbf6cc6cab81e5198.zip"
}})
});
我正在使用 aws-cdk-lib/assertions
模板来测试我的堆栈。
在编写此测试之前,我尝试进行了一些挖掘,以确保此 s3Key 哈希不会更改。有些主题表明此 s3Key 是代码目录路径的 md5 哈希值,不会更改。 问题是一段时间后它确实发生了变化。我假设它取决于其他一些方面而不仅仅是路径。
我如何断言我的 lambda 函数的位置将保持不变?
我的 lambda 配置如下:
const lambdaFunction = new lambda.Function(this, 'alb-request', {
codeSigningConfig,
runtime: lambda.Runtime.NODEJS_16_X,
handler: 'index.handler',
code: lambda.Code.fromAsset(path.join(__dirname, '../src/lambdas/alb-request/dist')),
});
最佳答案
您当前正在做出类似快照的断言,表明代码未更改*。
Docs: The AWS CDK generates a source hash for assets. This can be used at construction time to determine whether the contents of an asset have changed.
要断言函数资源的代码来自给定目录,请将模板 S3Key
与 AssetStaging 生成的 DIY 哈希进行比较。构造:
test("The function's code comes from dist", () => {
const staging = new AssetStaging(app, "Staging", {
sourcePath: path.join(__dirname, "../src/lambdas/alb-request/dist"),
});
template.hasResourceProperties("AWS::Lambda::Function", {
Code: { S3Key: staging.assetHash + ".zip" },
});
});
要更普遍地断言 Lambda 资源具有任何代码包,请使用 stringLikeRegexp
Matcher ,它匹配任何 .zip
文件:
template.hasResourceProperties("AWS::Lambda::Function", {
Code: { S3Key: Match.stringLikeRegexp(".*.zip$") },
});
* 哈希计算中不考虑代码目录路径:两个路径中的相同代码将产生相同的 .zip
文件名。
关于typescript - 由于 s3key 哈希值更改,为 AWS CDK 编写的单元测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74765888/