如何在上传之前计算aws lambda部署包的CodeSha256

adi*_*gar 19 amazon-web-services aws-lambda

当你打电话时aws lambda get-function --function-name FunctionName,你会看到一把CodeSha256钥匙.不过,我不知道它是什么Sha256.它不匹配shasum -a 256 FunctionName.zip,FunctionName.zip我上传的包裹在哪里.

对于现有的lambda,我希望能够做的是从我即将上传的代码中生成sha256,该代码将与亚马逊重新提供的sha256相匹配get-function.任何帮助都表示赞赏,因为我无法在任何地方找到任何信息,除了亚马逊说它是"部署包的SHA256哈希"

小智 17

如上所述,需要在base64中进行编码.这是一个bash one-liner:
openssl dgst -sha256 -binary _your_file_path_ | openssl enc -base64


adi*_*gar 15

好的,我明白了.生成sha 256哈希的所有方法都以十六进制输出,但亚马逊在base64中返回它.

所以,要完全回答我自己的问题,这里是如何(使用节点),检查你是否要上传相同的zip.

#!/usr/bin/env node
var crypto = require('crypto');
var fs = require('fs');
var path = require('path');
var AWS = require('aws-sdk');
var lambda = new AWS.Lambda({
    region: 'us-west-2'
});

var lambdaName = 'CreatePost';
var filePath = path.resolve(__dirname, 'tmp/create-post.zip');

lambda.getFunction({
    FunctionName: lambdaName
}, function (error, data) {
    if (error) {
        console.error(error);
        return process.exit(1);
    }
    var lambdaSha256 = data.Configuration.CodeSha256;

    var shasum = crypto.createHash('sha256');
    fs.createReadStream(filePath)
    .on("data", function (chunk) {
        shasum.update(chunk);
    })
    .on("end", function () {
        var sha256 = shasum.digest('base64');
        if (sha256 === lambdaSha256) {
            console.log("No need to upload, sha hashes are the same");
        } else {
            console.log("That needs to be uploaded again son.")
        }
        process.exit();
    });
});
Run Code Online (Sandbox Code Playgroud)


nob*_*bar 14

以下是在 GNU/Linux 上使用基本实用程序的方法:

cat function.zip |sha256sum |cut -d' ' -f1 |xxd -r -p |base64
Run Code Online (Sandbox Code Playgroud)

这些组件可能很熟悉:

  • cut隔离校验和值
  • xxd将 base16 转换为二进制(反向十六进制转储)
  • base64将二进制转换为 base64