1

我正在將許多圖像存儲在AWS S3中。如何從s3存儲和檢索dynamodb中的照片網址?

我需要從S3中檢索URL並將其存儲在DynamoDB中。

我不清楚如何通過NodeJS來做到這一點。有人可以解釋它如何與Lambda函數一起工作嗎?

+0

的方法之一https://snowulf.com/2015/08/05/tutorial-aws -api-gateway-to-lambda-to-dynamodb/ – BMW

+0

是的。研究人員,在論壇上提問之前閱讀文檔! – iSkore

+0

對於一個問題,您必須發佈您已經採取的步驟,您嘗試過的代碼以及您遇到的錯誤。 – iSkore

回答

0

您需要創建一個將由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控制檯中上傳文件,然後瞧瞧。

問候

+0

不是特別詳細,但是。這是初學者用戶,需要完整的步驟 – iSkore

3
  1. 一定有你的S3存儲所有的設置與任何你需要的。不知道爲什麼你想要這個,但我會假設你已經設置爲私人或公共。
    • 如果你有靜態主機啓用,網址在這會很
  2. 導航到Lambda和設置您的功能。投入名稱,說明等,但沒有在代碼字段(我們將到達那裏)
  3. 設置您的RAM和權限
  4. (必須至少有基本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)); 
    
        }); 
    
    }; 
    

實施例:icon - 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" 
         } 
        ] 
    } 
    
  • 現在運行測試,你應該看到你的數據庫中的記錄 - 如果沒有,繼續編輯您的數據庫參數,直到您得到它們正確

    • 請確保您爲分配給此Lambda函數的角色設置了所有權限
  • 一旦它的工作原理,轉到Event sources標籤的頂部和選擇+ Add event source =>Event source type =>S3
  • 一個請求S3樣的信息應該出現菜單。把你想要的水桶,前綴,後綴,不管是誰 - 然後選擇Event type =>Object Created,要麼(All)或上市