我正在將許多圖像存儲在AWS S3中。如何從s3存儲和檢索dynamodb中的照片網址?
我需要從S3中檢索URL並將其存儲在DynamoDB中。
我不清楚如何通過NodeJS來做到這一點。有人可以解釋它如何與Lambda函數一起工作嗎?
我正在將許多圖像存儲在AWS S3中。如何從s3存儲和檢索dynamodb中的照片網址?
我需要從S3中檢索URL並將其存儲在DynamoDB中。
我不清楚如何通過NodeJS來做到這一點。有人可以解釋它如何與Lambda函數一起工作嗎?
您需要創建一個將由S3 put event調用的Lambda函數。 Lambda函數抓取了具有event
細節的JSON(和相應的var
。問題是對象的URL不會出現在JSON中,但是您可以使用JSON參數來構建url,url將如下所示:
https://s3-region.amazonaws.com/bucket/key
還可以再插入此網址到DynamoDB與AWSSDK for NodeJS,URL格式將在弗吉尼亞州(美國標準)的區域不同。總之,HERE你有聯繫以獲取更多信息。
,創建在S3控制檯中的存儲桶中或直接在Lambda控制檯中上傳文件,然後瞧瞧。
個問候
不是特別詳細,但是。這是初學者用戶,需要完整的步驟 – iSkore
(必須至少有基本DynamoDB執行權限)現在它會負載用於第二,當其完成 - 糊在此代碼
const
AWS = require('aws-sdk');
AWS.config.region = 'us-east-1';
exports.handler = function(event, context) {
var ddb = new AWS.DynamoDB(),
bucket = event.Records[ 0 ].s3.bucket.name,
key = event.Records[ 0 ].s3.object.key,
params = {
TableName: '[table]',
Item: {
hash: '[hash]',
range: '[range]',
s3key: 'https://s3.amazonaws.com/' + bucket + '/' + key
}
};
console.log('\n\n{\n Bucket: ' + bucket + ',\n Key: ' + key + ',\n URL: ' + params.Item.s3key + '\n}\n');
ddb.put(params, function(err, data) {
// respond with whatever you want
context.succeed((err) ? JSON.stringify(err, null, 2) : JSON.stringify(data, null, 2));
});
};
實施例: - https://s3.amazonaws.com/cerenity/SOResources/favicon.ico
更新:@agl提醒我,如果你不使用「美國標準」區域,指定區域將是:https://s3-[here].amazonaws.com/
轉到Actions
=>Configure test event
=>Sample event template
=>S3 Put
,你應該看到:
{
"Records": [
{
"eventVersion": "2.0",
"eventTime": "1970-01-01T00:00:00.000Z",
"requestParameters": {
"sourceIPAddress": "127.0.0.1"
},
"s3": {
"configurationId": "testConfigRule",
"object": {
"eTag": "abcdefabcdef",
"sequencer": "0A1B2C3D4E5F678901",
"key": "HappyFace.jpg",
"size": 1024
},
"bucket": {
"arn": "arn:aws:s3:::mybucket",
"name": "sourcebucket",
"ownerIdentity": {
"principalId": "EXAMPLE"
}
},
"s3SchemaVersion": "1.0"
},
"responseElements": {
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "EXAMPLE123456789"
},
"awsRegion": "us-east-1",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "EXAMPLE"
},
"eventSource": "aws:s3"
}
]
}
現在運行測試,你應該看到你的數據庫中的記錄 - 如果沒有,繼續編輯您的數據庫參數,直到您得到它們正確
Event sources
標籤的頂部和選擇+ Add event source
=>Event source type
=>S3
Event type
=>Object Created
,要麼(All)
或上市
的方法之一https://snowulf.com/2015/08/05/tutorial-aws -api-gateway-to-lambda-to-dynamodb/ – BMW
是的。研究人員,在論壇上提問之前閱讀文檔! – iSkore
對於一個問題,您必須發佈您已經採取的步驟,您嘗試過的代碼以及您遇到的錯誤。 – iSkore