标签: aws-sdk-nodejs

从AWS Lambda Node.JS流式传输并压缩到S3

我的目标是创建一个较大的压缩文本文件并将其放入S3。

文件内容由我从另一个源中循环读取的块组成。

由于该文件的大小,我无法在内存中保存所有数据,因此我需要以某种方式直接将其同时流式传输到S3和ZIP。

我了解如何使用fsNode.JS中的常规代码执行此技巧,但是我对于使用AWS Lambda的S3是否可以执行相同的技巧感到困惑?我知道s3.putObject 可以消耗 streamObject,但是在我看来,执行putObject操作时该流应该已经完成,这可能导致超出允许的内存。

amazon-s3 amazon-web-services node.js aws-lambda aws-sdk-nodejs

5
推荐指数
1
解决办法
1783
查看次数

如何从 AWS S3“ObjectRemoved:Delete”事件获取文件大小

背景

我正在 S3 存储桶中存储一些文件(对象)。每当从 S3 存储桶中删除任何文件时,我的 Lambda 函数就会被触发。lambda 函数需要从 DynamoDB 中减去对象大小。

问题: S3 deleteObject 事件不发送对象大小

S3 删除对象事件示例

{
  "Records": [
    {
      "eventVersion": "2.0",
      "eventTime": "1970-01-01T00:00:00.000Z",
      "requestParameters": {
        "sourceIPAddress": "127.0.0.1"
      },
      "s3": {
        "configurationId": "testConfigRule",
        "object": {
          "sequencer": "0A1B2C3D4E5F678901",
          "key": "HappyFace.jpg"
        },
        "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": "ObjectRemoved:Delete",
      "userIdentity": {
        "principalId": "EXAMPLE"
      },
      "eventSource": "aws:s3"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

请帮助我找到适合我的用例的解决方案。

amazon-s3 amazon-web-services aws-sdk aws-sdk-nodejs

5
推荐指数
1
解决办法
2507
查看次数

如何在 Dynamo-db 中针对空/空字符串修复禁用验证?

我正在尝试将数据从节点 JS 代码推送到 Dynamodb。

我遇到了这样的问题

DynamoDB.DocumentClient 应支持空字符串属性

有谁知道如何在 DynamoDB 中禁用验证?

amazon-dynamodb aws-sdk-nodejs

5
推荐指数
1
解决办法
2191
查看次数

如何在不使用Node-js中的Scan的情况下从Dynamo-Db中读取单个列?

我的Dynamo Db中有450万条记录。

我想批量读取每个记录的ID。

我期望像偏移和限制之类的东西,例如我们如何在Mongo Db中阅读。

有没有在Node-JS中没有扫描方法的建议。

我已经进行了足够的研究,我只能找到一种扫描方法,该方法可以缓冲Dynamo Db的完整记录,并且它开始扫描记录,这在性能方面无效。

请给我建议。

node.js amazon-dynamodb aws-sdk-nodejs

5
推荐指数
1
解决办法
799
查看次数

上传到 S3 存储桶,ECS 实例拒绝访问

我一直在尝试为在 ECS 中运行的 web 应用程序设置简单的 S3 图像上传功能。ECS 集群是由系统管理员设置的,我不再获得帮助,但每个上传请求都会返回此错误:

{ AccessDenied: Access Denied
at Request.extractError (/www/node_modules/aws-sdk/lib/services/s3.js:585:35)
at Request.callListeners (/www/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
at Request.emit (/www/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
at Request.emit (/www/node_modules/aws-sdk/lib/request.js:683:14)
at Request.transition (/www/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/www/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /www/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/www/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (/www/node_modules/aws-sdk/lib/request.js:685:12)
at Request.callListeners (/www/node_modules/aws-sdk/lib/sequential_executor.js:116:18)
at Request.emit (/www/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
at Request.emit (/www/node_modules/aws-sdk/lib/request.js:683:14)
at Request.transition (/www/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/www/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /www/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/www/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (/www/node_modules/aws-sdk/lib/request.js:685:12)
at Request.callListeners (/www/node_modules/aws-sdk/lib/sequential_executor.js:116:18)
at callNextListener (/www/node_modules/aws-sdk/lib/sequential_executor.js:96:12)
at IncomingMessage.onEnd (/www/node_modules/aws-sdk/lib/event_listeners.js:299:13)
at ZoneDelegate.invokeTask (/www/node_modules/zone.js/dist/zone-node.js:423:31)
at Zone.runTask (/www/node_modules/zone.js/dist/zone-node.js:195:47)
message: 'Access Denied',
code: …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services amazon-ecs amazon-vpc aws-sdk-nodejs

5
推荐指数
1
解决办法
5482
查看次数

如何在无服务器中将 vpc 端点与 ses 一起使用

我在没有 nat 网关/互联网访问的 vpc 中部署了功能。目标:从此函数通过 SES 发送电子邮件(在 vpc 中)

我尝试过使用公共私有子网和 nat 网关来发送电子邮件,效果很好。但我正在尝试通过 VPC 端点使用它。我已经创建了一个电子邮件 vpc 端点,但不确定如何在 serverless.yml 中配置它。已尝试按照https://www.serverless.com/framework/docs/providers/aws/guide/serverless.yml/中所述设置配置

但没有任何作用,因为没有提到 ses。

amazon-ses aws-sdk-nodejs serverless

5
推荐指数
2
解决办法
5668
查看次数

AWS S3 - 我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法

我正在尝试使用从 aws sdk 生成的预签名 url 将图像上传到 s3。

router.get('/upload-url', async(req, res) => {
    try {

        AWS.config.update({
            secretAccessKey: process.env.AWS_SECRET_ACCESS,
            accessKeyId: process.env.AWS_ACCESS_KEY,
            region: 'ap-southeast-1'

        });

        const s3 = new AWS.S3();
        var params = { Bucket: process.env.bucket_name, Key: 'products', ContentType: 'image/jpeg' };
        s3.getSignedUrl('putObject', params, function(err, url) {
            if (err) {
                throw (err)
            }
            res.status(200).send({ link: url })
        })

    } catch (err) {
        res.status(400).send({ message: err.message })
    }
})
Run Code Online (Sandbox Code Playgroud)

使用上面的返回 url,当我尝试访问它时会出错

<Error>
<script class="__REQUESTLY__SCRIPT">(function(namespace) { window[namespace] = window[namespace] || {}; window[namespace].responseRules = {}; let open …
Run Code Online (Sandbox Code Playgroud)

javascript amazon-s3 amazon-web-services node.js aws-sdk-nodejs

5
推荐指数
1
解决办法
1万
查看次数

由 client-s3 Typescript 库上传时公开 S3 对象

我使用 Typescript 代码将文件上传到 S3,如下所示:

    import {PutObjectCommand, PutObjectCommandInput, S3Client} from "@aws-sdk/client-s3";
    const s3 = new S3Client(config);
    const uploadParams: PutObjectCommandInput = {
        Bucket: bucketName,
        Key: filename,
        Body: fileData
    };
 
    await s3.send(new PutObjectCommand(uploadParams));
Run Code Online (Sandbox Code Playgroud)

但是,我需要在上传后将对象公开,以便将其作为静态网站的一部分进行访问,并将其作为私有上传。我如何告诉 s3 客户端也将其公开?

amazon-s3 typescript aws-sdk aws-sdk-nodejs aws-sdk-js

5
推荐指数
1
解决办法
4040
查看次数

Nodejs 模块化 aws-sdk v3 大小不断增加

我正在尝试减小使用 aws-sdk 的 nodejs lambda 包的大小。这是原始的 lambda package.json 文件:

{
  "name": "lambdanodejs",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "aws-sdk": "^2.784.0",
    "bluebird": "^3.7.2",
    "ioredis": "^4.19.2",
    "redis": "^3.0.2",
    "redis-clustr": "^1.7.0"
  }
}
Run Code Online (Sandbox Code Playgroud)

整体大小为57MB,其中54属于aws-sdk。

为了减小大小,我尝试使用特定的客户端服务(v3 sdk)。关注: https: //github.com/aws/aws-sdk-js-v3/blob/main/clients/client-secrets-manager/package.json

{
  "name": "lambdanodejs",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": { …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js aws-lambda aws-sdk-nodejs

5
推荐指数
1
解决办法
2278
查看次数

S3 使用 aws-sdk v3 为 PutObject 命令预签名 url 提供 SignatureDoesNotMatch 错误

我的 Amazon S3 存储桶工作正常,直到我决定将我的 aws sdk 从版本 v2 更新到模块化 v3。

我可以使用 sdk 以编程方式上传文件,但无法使用它生成的预签名 URL 上传文件。

      const { getSignedUrl } = require('@aws-sdk/s3-request-presigner');
      const { S3Client, , PutObjectCommand } = require('@aws-sdk/client-s3');
      const s3Client = S3Client({ region: 'us-east-2'});
      const params = {
        Bucket: '<bucket>',
        Key: '1234567890.jpg',
        ACL: 'private',
        ContentType: 'image/jpg',
        // Body: '<base64 encoded image content>'
      };
      const command = new PutObjectCommand(params);
      // await s3Client.send(command); // works fine
      const signedUrl = await getSignedUrl(s3Client, command); // generated signed url fails to upload image
Run Code Online (Sandbox Code Playgroud)

当我尝试使用生成的预签名 …

javascript amazon-s3 node.js aws-sdk aws-sdk-nodejs

5
推荐指数
0
解决办法
4408
查看次数