2015-11-20 17 views
9

aws lambda get-function --function-name FunctionNameに電話すると、CodeSha256というキーが表示されます。私はそれが何であるか分からない。一致しませんshasum -a 256 FunctionName.zipFunctionName.zipは、私がアップロードしたパッケージです。アップロードする前にaws lambda展開パッケージのCodeSha256を計算する方法

私は、既存のラムダのためにできるようにしたいのは、sha256と一致するコードをアップロードするコードからsha256を生成することです。アマゾンはget-functionを返します。 Amazonが「展開パッケージのSHA256ハッシュ」と言っている以外はどこの情報も見つけられなかったので、どんな助力もありがたいです。

答えて

12

私はそれを理解しました。 sha 256のハッシュを生成するためのすべてのメソッドは16進数で出力しますが、amazonはそれを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の1ライナーがあります:
openssl dgst -sha256 -binary _your_file_path_ | openssl enc -base64

関連する問題