2015-11-20 44 views
9

當您撥打aws lambda get-function --function-name FunctionName時,您會看到一個CodeSha256密鑰。不過,我不知道這是什麼Sha256'ing。它不符合shasum -a 256 FunctionName.zip,其中FunctionName.zip是我上傳的包。如何在上傳之前計算aws lambda部署包的CodeSha256

對於現有的lambda,我希望能夠做的是從我即將上傳的代碼中生成sha256,以匹配sha326亞馬遜給出的get-function。任何幫助表示讚賞,因爲我無法在任何地方找到任何信息,除了亞馬遜說它是「部署包的SHA256哈希」

回答

12

好吧,我想通了。所有用於生成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(); 
    }); 
}); 
5

如上所述,需要使用base64進行編碼。這裏是一個bash單線程:
openssl dgst -sha256 -binary _your_file_path_ | openssl enc -base64