[英]Cannot put object to S3 using aws lambda running on Greengrass
[英]How to "change the object key or version in the template" for AWS Lambda or S3
我有 14 個 AWS Lambda,每個都引用已編譯到 .jar 文件中的相同代碼。 每當我更新 .jar 時,我不想更新每個 Lambda 並再次上傳 .jar。 出於這個原因,我決定將 .jar 上傳到 S3 存儲桶,然后從 Lambda 中引用該代碼。
這看起來不錯,但我剛剛了解到將新代碼上傳到.jar 不會自動更新Lambda。參考文檔時,它說如下:
在堆棧更新期間,不會自動檢測到對 Amazon S3 中部署 package 的更改。 要更新 function 代碼,請更改模板中的 object 密鑰或版本。
更改“模板中的對象鍵或版本”是什么意思,如何完成?
我嘗試過的一件事是創建一個單獨的 Lambda來更新我的所有其他 Lambda,當我的 jar S3 存儲桶發生更改時觸發,但這似乎也不起作用:
console.log('Loading function');
var AWS = require('aws-sdk');
var lambda = new AWS.Lambda();
exports.handler = function(event, context) {
let key = event.Records[0].s3.object.key
let bucket = event.Records[0].s3.bucket.name
let version = event.Records[0].s3.object.versionId
let functionNames = [
"cs_340_tweeter_follow",
"cs_340_tweeter_get_followers",
"cs_340_tweeter_get_feed",
"cs_340_tweeter_is_follower",
"cs_340_tweeter_log_in",
"cs_340_tweeter_register",
"cs_340_tweeter_logout",
"cs_340_tweeter_get_follower_count",
"cs_340_tweeter_get_following",
"cs_340_tweeter_get_following_count",
"cs_340_tweeter_get_user",
"cs_340_tweeter_unfollow",
"cs_340_tweeter_post_status",
"cs_340_tweeter_get_story"
]
if (bucket == "cs340tweeterserverjar" && key == "server-all.jar" && version) {
for (let i = 0; i < functionNames.length; i++) {
var functionName = functionNames[i];
console.log("uploaded to lambda function: " + functionName);
var params = {
FunctionName: functionName,
S3Key: key,
S3Bucket: bucket,
S3ObjectVersion: version
};
lambda.updateFunctionCode(params, function(err, data) {
if (err) {
console.log(err, err.stack);
context.fail(err);
} else {
console.log(data);
context.succeed(data);
}
});
}
} else {
context.succeed("skipping zip " + key + " in bucket " + bucket + " with version " + version);
}
};
謝謝!
S3 中的對象可以進行版本控制。 它建議您指定不同的 object 版本,它假設:
從那里,您可以在定義 Lambda 函數的 CloudFormation 模板中使用該版本 ID 。
或者,您可以在每個版本的不同密鑰下上傳 JAR - app-1.0.0.jar
、 app-1.0.1.jar
等等。 然后,再次在您的 CloudFormation 模板中,引用新的 S3 路徑來觸發部署。
如果您的問題是在不為 X Lambdas 手動更改它的情況下將該 S3 路徑或版本獲取到您的 CloudFormation 模板中, 您可以使用參數。 然后,您將能夠傳遞一次該值,並在所有 Lambda 中引用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.