2015-11-20 18 views
9

Khi bạn gọi aws lambda get-function --function-name FunctionName, bạn sẽ thấy khóa CodeSha256. Tôi không biết đó là Sha256'ing. Nó không khớp với shasum -a 256 FunctionName.zip, trong đó FunctionName.zip là gói tôi đã tải lên.Cách tính toán CodeSha256 gói triển khai aws lambda trước khi tải lên

Điều tôi muốn có thể làm, đối với lambda hiện có, tạo sha256 từ mã tôi sắp tải lên khớp với sha256 amazon trả lại trong get-function. Bất kỳ trợ giúp nào được đánh giá cao, vì tôi không thể tìm thấy bất kỳ thông tin nào về điều này ở bất kỳ nơi nào, ngoại trừ Amazon cho biết đó là "băm SHA256 của gói triển khai"

Trả lời

12

OK, tôi đã tìm ra. Tất cả các phương thức để tạo ra một giá trị băm sha 256 nó trong hex, nhưng amazon trả về nó trong base64.

Vì vậy, để trả lời hoàn toàn câu hỏi của riêng tôi, dưới đây là cách (với nút), hãy kiểm tra xem bạn sắp tải lên cùng một tệp zip hay chưa.

#!/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

Như đã nêu ở trên, cần mã hóa trong base64. Đây là bash one-liner:
openssl dgst -sha256 -binary _your_file_path_ | openssl enc -base64

Các vấn đề liên quan