标签: aws-sdk-nodejs

DynamoDB DocumentClient 将字符串集 (SS) 属性作为对象返回

我是 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)

谢谢!

amazon-dynamodb aws-lambda aws-sdk-nodejs

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

PutItem 和 DynamoDB 使用列表/数组

我正在努力实现我认为非常标准的东西,但我已经碰壁了。我有一堆数据要存储在 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)

它通过了,但显然没有做我想要的......当我打印出参数时,它没有取出数组的内容。它看到: …

amazon-web-services amazon-dynamodb aws-sdk-nodejs

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

AWS ALB 从 lambda 返回 502 Bad Gateway

我有一个 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)

node.js aws-lambda aws-sdk-nodejs nodejs-stream aws-alb

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

AWS 凭证如何在 GitHub Actions 中工作?

在我的单元测试中,我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)

amazon-web-services node.js aws-sdk-nodejs github-actions

5
推荐指数
3
解决办法
5517
查看次数

DynamoDb:如何为每个给定的分区键列表检索第一项(按排序键)

我有一个 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

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

如何用玩笑来模拟 S3?

我正在尝试编写一个上传测试。但我并没有低估如何正确使用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)

javascript amazon-s3 jestjs aws-sdk-nodejs nestjs

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

将 Angular 应用程序更新到最新版本 10.0 后出现 aws-amplify 警告

我已将 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

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

适用于 Node.js 的 AWS S3 SDK V3 - GetObjectCommand v/s getSignedUrl

我正在构建一个网络应用程序,我需要让用户将文档上传到他们的帐户并阅读他们上传的所有文档。此外,我还希望允许用户上传个人资料照片。为了处理文件存储,我选择了 AWS S3。

但是,我在使用 SDK (v3) 时遇到了很多麻烦。请记住,我从未使用过以前的版本 (v2)。我通过 npm 安装了 2 个包,@aws-sdk/client-s3@aws-sdk/s3-request-presigner 。我无法为我需要的所有功能找到合适的文档。我遇到的文档并不完全适合初学者,也没有详细解释所有功能。例如,在 的情况下GetObjectCommand,我能够得到响应,但我不确定如何实际进入正文并使用内容。

我也不确定是否应该使用GetObjectCommandgetSignedUrl用于我的用例。对于上下文,我使用 Express 来构建我的服务器。

我的问题——

  1. 有没有比使用 SDK 更简单的方法来与 S3 进行交互?更容易我只是指正确记录。
  2. 我在看错误的文档吗?是否有其他资源可以使这更简单?
  3. 在什么情况下,人们会使用getSignedUrloverGetObjectCommand来读取并呈现 Web 应用程序的存储文件?

我将非常感谢任何和所有帮助。

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

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

AWS NodeJS SDK V3 DynamoDB UpdateItem - TypeError:无法读取未定义的属性“0”

我正在尝试使用适用于 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)

amazon-web-services amazon-dynamodb aws-sdk-nodejs

5
推荐指数
3
解决办法
1278
查看次数

如何使用 aws-sdk v3 从 S3 保存文件

特别是对于新的 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获取 aBufferStream.Readable

在 aws-sdk v2 中.createReadStream(),似乎不再存在的功能很容易。

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

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