标签: aws-sdk-nodejs

如何在node js中使用aws-sdk在s3中存储Excel文件?

    var xls = json2xls(data);
    var bufferdata = new Buffer(xls).toString('base64');
    console.log("inside upload s3 function........", data);
    //var buf = new Buffer(data, 'base64');
    var uploaddata = {
        Key: "exception.xls",
        Body: bufferdata,
        ContentEncoding: 'base64',
        ContentType: 'application/vnd.ms-excel'
    };
Run Code Online (Sandbox Code Playgroud)

我能够通过 s3 保存和检索文件。但格式不匹配的情况即将出现。请帮助我如何解决这个问题。

excel buffer node.js aws-sdk aws-sdk-nodejs

6
推荐指数
1
解决办法
6736
查看次数

如何在 DynamoDB 中过滤嵌套数组对象

我是 AWS DynamoDB 的初学者,我想使用 SENDTO.emailAddress = "first@first.com" 作为 FilterExpression 扫描 DynamoDB。

数据库结构看起来像这样

{
    ID
    NAME
    MESSAGE
    SENDTO[
        {
            name
            emailAddress
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

样本数据

{
    ID: 1,
    NAME: "HELLO",
    MESSAGE: "HELLO WORLD!",
    SENDTO: [
        {
            name: "First",
            emailAddress: "first@first.com"
        },
        {
            name: "Second",
            emailAddress: "second@first.com"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我想检索与 emailAddress 匹配的文档。我尝试使用过滤器表达式进行扫描,这是我检索数据的代码。我正在使用 AWS Javascript SDK。

let params = {
    TableName : "email",
    FilterExpression: "SENDTO.emailAddress = :emailAddress",
    ExpressionAttributeValues: {
        ":emailAddress": "first@first.com",
    }
}

let result = await ctx.docClient.scan(params).promise();
Run Code Online (Sandbox Code Playgroud)

amazon-dynamodb aws-sdk-nodejs aws-sdk-js

6
推荐指数
2
解决办法
9864
查看次数

我可以从 AWS Lambda 创建的最大出站连接是多少?

我正在查看有关Lamba 限制的文档,其中说:

文件描述符数量 1,024

我想知道这是每次调用 lambda 还是所有 lambda 的总数?

我正在处理来自 kinesis 流的大量项目,我正在调用一个 Web 端点,我似乎遇到了大约 1024 个到 API 的并发连接的瓶颈,我不确定瓶颈在哪里。我正在调查我的负载均衡器和实例的限制,但我也想知道 lambda 本身是否不能在所有 lambda 中创建超过 1024 个并发出站连接?

aws-lambda aws-sdk-nodejs

6
推荐指数
1
解决办法
883
查看次数

使用jest模拟aws-sdk S3#putObject实例方法

对于包含以下内容的源代码

 const S3 = require('aws-sdk/s3/clients')
 const s3 = new S3()
 s3.putObject(params, callback)
Run Code Online (Sandbox Code Playgroud)

我基于这篇文章添加了以下模拟:

 jest.mock('aws-sdk/s3/clients')
 const S3 = require('aws-sdk/s3/clients')

 it('has to mock S3#putObject', () => { 
    S3.prototype.putObject.mockImplementation(() => cb()) 
 })
Run Code Online (Sandbox Code Playgroud)

但我无法找到S3.prototype.putObject有/无嘲弄,因为api似乎在这里apiLoader模式中构建不同.但是,这里的定义似乎完全不同

我也尝试过:

  const AWS = require('aws-sdk')
  console.log(AWS.S3.prototype.putObject) // undefined
Run Code Online (Sandbox Code Playgroud)

如果我在原型上找不到它,我怎么能模拟一个方法呢?

在承诺中包装打破了结果

我已将源代码包装在Promise中,如下所示:

new Promise((resolve, reject) => {
    s3.putObject(params, (err, data) => {
        if (err) {
            reject(err)
        } else {
           resolve(data)
       }
    })
})
Run Code Online (Sandbox Code Playgroud)

并使用如下所示的测试:

const mockedPutObject = jest.fn();
jest.mock('aws-sdk/s3/clients', () => …
Run Code Online (Sandbox Code Playgroud)

mocking amazon-s3 node.js jestjs aws-sdk-nodejs

6
推荐指数
1
解决办法
5295
查看次数

如何复制键中带有特殊字符的S3对象

我的 S3 存储桶中有对象,但我无法控制键的名称。其中一些键具有特殊字符,AWS SDK 不喜欢它们。

\n\n

例如,一个对象键是:folder/\xe2\x80\x8dJohnson, Scott to JKL-Discovery.pdf,乍一看可能看起来不错,但如果我对它进行 URL 编码:folder%2F%E2%80%8DJohnson%2C+Scott+to+JKL-Discovery.pdf,您可以看到在之后folder/(或编码时)之前folder%2F有一个随机的字符序列。%E2%80%8DJohnson

\n\n

目前尚不清楚这些字符从何而来,但是,我需要能够处理这个用例。当我尝试使用 Node.js AWS SDK 复制该对象时,

\n\n
const copyParams = {\n    Bucket,\n    CopySource,\n    Key : `folder/\xe2\x80\x8dJohnson, Scott to JKL-Discovery.pdf`\n  };\n  let metadata = await s3.copyObject(copyParams).promise();\n
Run Code Online (Sandbox Code Playgroud)\n\n

它失败并且找不到对象,如果我有encodeURI()钥匙,它也会失败。

\n\n

我该如何处理这个问题?

\n\n

不要建议我更改键名中允许的字符。我无法控制这件事

\n

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

6
推荐指数
1
解决办法
3148
查看次数

使用 Jest 模拟 AWS SES

我尝试在 Jest 中模拟 AWS SES,但仍然收到此超时错误:

Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.Error:
Run Code Online (Sandbox Code Playgroud)

我已经删除了不相关且经验证可以正常工作的代码。下面是使用 SES 的代码:

import SES from 'aws-sdk/clients/ses';

try {
    /** Initialize SES Class */
    const ses = new SES({ apiVersion: '2010-12-01' });

    await ses.sendTemplatedEmail(sesEmailParams).promise();
} catch(err) {
    return next(internalErrorMessage);
}
Run Code Online (Sandbox Code Playgroud)

这是使用 SES 的测试:

import AWS from 'aws-sdk';

test('Should error when ses.sendTemplatedEmail.promise() fails', async (done) => {
    const fakeSesPromise …
Run Code Online (Sandbox Code Playgroud)

unit-testing node.js jestjs aws-sdk aws-sdk-nodejs

6
推荐指数
1
解决办法
6281
查看次数

如何在 AWS-SDK JS 版本 3 中获取签名的 S3 Url?

我正在遵循Trivikr提出的解决方案,以添加对s3.getSignedUrlapi 的支持,该支持目前在较新的 v3 中不可用。我正在尝试创建一个签名的 url 以从存储桶中获取一个对象。

为方便起见,代码添加如下:

const { S3, GetObjectCommand } = require("@aws-sdk/client-s3"); // 1.0.0-gamma.2 version
const { S3RequestPresigner } = require("@aws-sdk/s3-request-presigner"); // 0.1.0-preview.2 version
const { createRequest } = require("@aws-sdk/util-create-request"); // 0.1.0-preview.2 version
const { formatUrl } = require("@aws-sdk/util-format-url"); // 0.1.0-preview.1 //version
const fetch = require("node-fetch");

(async () => {
 try {

  const region = "us-east-1";
  const Bucket = `SOME_BUCKET_NAME`;
  const Key = `SOME_KEY_VALUE`;
  const credentials = {
      accessKeyId: ACCESS_KEY_HERE,
      secretAccessKey: SECRET_KEY_HERE,
      sessionToken: SESSION_TOKEN_HERE …
Run Code Online (Sandbox Code Playgroud)

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

6
推荐指数
2
解决办法
1546
查看次数

从 AWS Lambda 调用 AWS API Gateway

场景是:

  1. 我有一个 Rest api 网关,触发时会调用 lambda 来处理请求并返回响应。
  2. 此 api 端点是公共的。
  3. 我有另一个 lambda,它将调用此 API 网关/端点并从中获取响应。

现在的查询:

  1. 我直接调用 api 的调用 url,就像任何其他 api 一样。那么这是正确的做法吗?
  2. 当我将调用 url 放入浏览器地址栏中时,它给出了缺少的身份验证令牌。
  3. 如何在调用lambda时实际调用url,我的意思是如何传递令牌;在 Node.js 中?

谢谢

aws-lambda aws-api-gateway aws-sdk-nodejs

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

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

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

我遇到了这样的问题

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

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

amazon-dynamodb aws-sdk-nodejs

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

如何在无服务器中将 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
查看次数