我是 DynamoDB 的新手。当我使用 AWS.DynamoDB.DocumentClient 类从表中读取数据时,查询有效,但我得到的结果格式错误。
询问:
{
TableName: "users",
ExpressionAttributeValues: {
":param": event.pathParameters.cityId,
":date": moment().tz("Europe/London").format()
},
FilterExpression: ":date <= endDate",
KeyConditionExpression: "cityId = :param"
}
Run Code Online (Sandbox Code Playgroud)
预期的:
{
"user": "boris",
"phones": ["+23xxxxx999", "+23xxxxx777"]
}
Run Code Online (Sandbox Code Playgroud)
实际的:
{
"user": "boris",
"phones": {
"type": "String",
"values": ["+23xxxxx999", "+23xxxxx777"],
"wrapperName": "Set"
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我正在努力实现我认为非常标准的东西,但我已经碰壁了。我有一堆数据要存储在 DynamoDB 中
const putDataParams = {
TableName: "sensorNodeData2",
Item: {
"deviceId": {"S": event.deviceId},
"timeStamp": {"N": event.time},
"rssi": {"S": event.rssi},
"seq": {"S": event.seqNum},
"payload": {"L": payloadArrayInt16.map(x => x.N)}
}
};
console.log('Data PutItem Params = ' + JSON.stringify(putDataParams));
dynamodb.putItem(putDataParams, function(err, data) {
if (err) {
console.log(err);
context.fail('ERROR: Dynamo failed: ' + err);
}
else {
console.log(data);
context.succeed('SUCCESS');
}
});Run Code Online (Sandbox Code Playgroud)
问题是我一生都无法弄清楚如何让列表部分起作用。我首先将其定义为:
var payloadArrayInt16= new Uint16Array(dataArrayMaxIndex);
Run Code Online (Sandbox Code Playgroud)
错误是:
"errorMessage": "ERROR: Dynamo failed: InvalidParameterType: Expected params.Item[payload].L to be an Array"
Run Code Online (Sandbox Code Playgroud)
然后我试过:
var payloadArrayInt16= [dataArrayMaxIndex];
Run Code Online (Sandbox Code Playgroud)
它通过了,但显然没有做我想要的......当我打印出参数时,它没有取出数组的内容。它看到: …
我有一个 lambda 函数,它返回 base64 字符串,当我从它的代码中调用 lambda 时,它可以工作,但是当我在 ALB 后面调用 lambda 并且 base64 字符串很大时,ALB 给我错误 502 Bad Gateway。注意:对于小字符串 ALB 也有效。
// Lambda function handler
'use strict';
module.exports.handler = async (event, context) => {
// ALB expects following response format
// see: https://docs.aws.amazon.com/lambda/latest/dg/services-alb.html
const response = {
headers: {
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/json',
},
isBase64Encoded: true,
statusCode: 200,
statusDescription: '200 OK',
};
// ALB gives error 502 when buffer size is large
const answer = 'This is my audio buffer'.toString('base64');
response.body = …Run Code Online (Sandbox Code Playgroud) 在我的单元测试中,我aws-sdk用来测试需要一些凭据的 SES,我们在使用 GitHub Actions 访问机密时遇到了问题。
一开始,我试图将值设置为~/.aws/credentials使用 github 工作流中的 run 命令:
# .github/workflows/nodejs.yml
steps:
...
- name: Unit Test
run: |
mkdir -p ~/.aws
touch ~/.aws/credentials
echo "[default]
aws_access_key_id = ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key = ${{ secrets.AWS_SECRET_KEY_ID }}
region = ${AWS_DEFAULT_REGION}
[github]
role_arn = arn:aws:iam::{accountID}:role/{role}
source_profile = default" > ~/.aws/credentials
npm test
env:
AWS_DEFAULT_REGION: us-east-1
CI: true
Run Code Online (Sandbox Code Playgroud)
原来我的测试文件:
# .github/workflows/nodejs.yml
steps:
...
- name: Unit Test
run: |
mkdir -p ~/.aws
touch ~/.aws/credentials
echo "[default]
aws_access_key_id = …Run Code Online (Sandbox Code Playgroud) 我有一个 dynamodb 表,用于存储在我的服务器上运行的进程的历史运行数据,我需要一个可以汇总这些进程并查看其中每个进程的最新数据的地方。每个进程都有它自己的ProcessId,它是 dynamodb 表的分区键。排序键是StartDateTime
{
ProcessId, // Partition Key
StartDateTime, // Sort Key
... // More data
}
Run Code Online (Sandbox Code Playgroud)
本质上,我需要为我提供的每个 ProcessId 检索最新的 StartDateTime。我正在使用带有 aws-sdk 的 nodejs lambda 来检索数据。我已经研究过使用 BatchGetItem,但我的理解是,对于具有分区键和排序键的表,您需要同时提供两者来检索项目。我也研究过使用查询,但我需要为每个分区运行一个单独的查询,这不是理想的。有谁知道我可以在一次调用中发出此请求的方法,而不必为每个分区进行单独调用?
amazon-web-services amazon-dynamodb aws-sdk aws-sdk-nodejs dynamodb-queries
我正在尝试编写一个上传测试。但我并没有低估如何正确使用jest.mock('aws-sdk')
export class S3Service {
private readonly s3: S3;
private readonly bucket: string;
constructor(private readonly configService: ConfigService) {
this.s3 = new S3({
accessKeyId: this.configService.get(''),
secretAccessKey: this.configService.get(''),
region: this.configService.get(''),
});
this.bucket = this.configService.get('');
}
async upload(name: string, contentType: string, buffer: Buffer): Promise<string> {
const upload = await this.s3.upload({params...}).promise();
return upload;
}
}
Run Code Online (Sandbox Code Playgroud) 我已将 angular 应用程序更新到最新版本,并不断收到来自@aws-amplify 的警告消息。我知道 angular 10 不建议使用 commonjs。由于@aws-amplify 就在那里,我该如何删除警告?
我尝试在 angular.json 中添加 allowedCommonJsDependencies
"allowedCommonJsDependencies": [
"crypto-js", "@aws-sdk/eventstream-marshaller", "buffer", "js-cookie",
"@aws-crypto", "zen-observable", "@aws-sdk/util-utf8-node", "@aws-crypto/sha256-js", "@aws-sdk/util-buffer-from",
"@aws-sdk/smithy-client", "@aws-sdk/middleware-serde", "@aws-sdk/middleware-user-agent",
"@aws-sdk/middleware-retry", "@aws-sdk/middleware-signing", "@aws-sdk/middleware-content-length",
"@aws-sdk/middleware-host-header", "@aws-sdk/config-resolver", "@aws-sdk/s3-request-presigner",
"@aws-sdk/util-format-url", "@aws-sdk/util-create-request", "@aws-sdk/property-provider",
"axios", "@aws-sdk/fetch-http-handler", "@aws-sdk/protocol-http", "@aws-sdk/querystring-builder",
"@aws-sdk/util-utf8-browser", "@aws-sdk/url-parser-browser", "@aws-crypto/sha256-browser",
"@aws-sdk/url-parser-node", "@aws-sdk/util-uri-escape", "@aws-sdk/middleware-sdk-s3",
"@aws-sdk/middleware-bucket-endpoint", "@aws-sdk/querystring-parser", "@aws-sdk/middleware-apply-body-checksum",
"@aws-sdk/middleware-ssec", "@aws-sdk/middleware-expect-continue", "fast-xml-parser",
"@aws-sdk/xml-builder", "@aws-sdk/md5-js", "@aws-sdk/hash-blob-browser",
"@aws-sdk/eventstream-serde-browser", "@aws-sdk/middleware-location-constraint", "uuid",
"@aws-sdk/credential-provider-cognito-identity", "@aws-sdk/eventstream-serde-config-resolver",
"@aws-sdk/client-s3","@aws-sdk/client-pinpoint",
"ulid", "zen-push", "lodash", "@aws-amplify/core", "@aws-amplify/analytics","@aws-amplify/ui-components"
]
Run Code Online (Sandbox Code Playgroud)
WARNING in /Users/macbook/Projects/src/app/shared/components/forms/datepicker/datepicker.component.ts depends on 'inputmask'. CommonJS or AMD dependencies can cause …Run Code Online (Sandbox Code Playgroud) aws-sdk-nodejs angular aws-amplify aws-amplify-cli angular10
我正在构建一个网络应用程序,我需要让用户将文档上传到他们的帐户并阅读他们上传的所有文档。此外,我还希望允许用户上传个人资料照片。为了处理文件存储,我选择了 AWS S3。
但是,我在使用 SDK (v3) 时遇到了很多麻烦。请记住,我从未使用过以前的版本 (v2)。我通过 npm 安装了 2 个包,@aws-sdk/client-s3和@aws-sdk/s3-request-presigner
。我无法为我需要的所有功能找到合适的文档。我遇到的文档并不完全适合初学者,也没有详细解释所有功能。例如,在 的情况下GetObjectCommand,我能够得到响应,但我不确定如何实际进入正文并使用内容。
我也不确定是否应该使用GetObjectCommand或getSignedUrl用于我的用例。对于上下文,我使用 Express 来构建我的服务器。
我的问题——
getSignedUrloverGetObjectCommand来读取并呈现 Web 应用程序的存储文件?我将非常感谢任何和所有帮助。
amazon-s3 amazon-web-services node.js aws-sdk aws-sdk-nodejs
我正在尝试使用适用于 NodeJS 的新 AWS SDK V3 在 nodejs 中进行基本的数据库更新操作。
我尝试更新的数据对象如下所示:
{
auth: { BOOL: false },
username: { S: 'siegbert' },
secondsLeft: { N: 49985 },
userid: { S: '123456' }
}
Run Code Online (Sandbox Code Playgroud)
在同一个文件中,我已经成功地使用 SDK V3 完成了 GetItemCommand。
不幸的是,我在使用 AWS SDK v3 时不断收到一个非常奇怪的错误,当使用 SDK v2 时,完全相同的参数似乎有效。我尝试查看文档,但更新操作还没有得到很好的记录。
var params = {
TableName: "tableXYZ",
Key: {
userid: user.userid.S,
},
UpdateExpression: "SET secondsLeft = :newsecondsLeft",
ExpressionAttributeValues: {
":newsecondsLeft": user.secondsLeft.N,
},
ReturnValues: "UPDATED_NEW"
};
try {
const data = await dbclient.send(new UpdateItemCommand(params));
console.log("data:" + JSON.stringify(data)); …Run Code Online (Sandbox Code Playgroud) 特别是对于新的 aws-sdk v3,@aws-sdk/client-s3我不清楚如何将文件从 S3 存储到磁盘。
有以下代码
const { Body } = await s3.send(new GetObjectCommand({
Bucket: 'myBucket',
Key: 'myKey',
}))
Run Code Online (Sandbox Code Playgroud)
的Body可以是类型的Readable | ReadableStream | Blob。
我想将其存储到磁盘上的文件中。由于返回类型完全不同,是否有一种简单的方法可以例如从 aws-sdk获取 aBuffer或Stream.Readable?
在 aws-sdk v2 中.createReadStream(),似乎不再存在的功能很容易。
aws-sdk-nodejs ×10
node.js ×4
amazon-s3 ×3
aws-sdk ×3
aws-lambda ×2
angular ×1
angular10 ×1
aws-alb ×1
aws-amplify ×1
javascript ×1
jestjs ×1
nestjs ×1