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 保存和检索文件。但格式不匹配的情况即将出现。请帮助我如何解决这个问题。
我是 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) 我正在查看有关Lamba 限制的文档,其中说:
文件描述符数量 1,024
我想知道这是每次调用 lambda 还是所有 lambda 的总数?
我正在处理来自 kinesis 流的大量项目,我正在调用一个 Web 端点,我似乎遇到了大约 1024 个到 API 的并发连接的瓶颈,我不确定瓶颈在哪里。我正在调查我的负载均衡器和实例的限制,但我也想知道 lambda 本身是否不能在所有 lambda 中创建超过 1024 个并发出站连接?
对于包含以下内容的源代码
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) 我的 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
目前尚不清楚这些字符从何而来,但是,我需要能够处理这个用例。当我尝试使用 Node.js AWS SDK 复制该对象时,
\n\nconst 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();\nRun Code Online (Sandbox Code Playgroud)\n\n它失败并且找不到对象,如果我有encodeURI()钥匙,它也会失败。
我该如何处理这个问题?
\n\n不要建议我更改键名中允许的字符。我无法控制这件事
\n我尝试在 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) 我正在遵循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) 场景是:
现在的查询:
谢谢
我正在尝试将数据从节点 JS 代码推送到 Dynamodb。
我遇到了这样的问题
DynamoDB.DocumentClient 应支持空字符串属性
有谁知道如何在 DynamoDB 中禁用验证?
我在没有 nat 网关/互联网访问的 vpc 中部署了功能。目标:从此函数通过 SES 发送电子邮件(在 vpc 中)
我尝试过使用公共私有子网和 nat 网关来发送电子邮件,效果很好。但我正在尝试通过 VPC 端点使用它。我已经创建了一个电子邮件 vpc 端点,但不确定如何在 serverless.yml 中配置它。已尝试按照https://www.serverless.com/framework/docs/providers/aws/guide/serverless.yml/中所述设置配置
但没有任何作用,因为没有提到 ses。
aws-sdk-nodejs ×10
node.js ×4
amazon-s3 ×3
aws-lambda ×2
aws-sdk ×2
aws-sdk-js ×2
jestjs ×2
amazon-ses ×1
buffer ×1
excel ×1
mocking ×1
serverless ×1
unit-testing ×1