标签: aws-sdk-nodejs

使用 jest 模拟 AWS.DynamoDB.DocumentClient 的构造函数

我有一个如下所示的函数:

function connect() {
   const secret = 'secret';
   const key = 'key';
   const region = 'region';
   const client = new AWS.DynamoDB({
      secret,
      key,
      region
   });'
   return new AWS.DynamoDB.DocumentClient({ service: client })
}
Run Code Online (Sandbox Code Playgroud)

我想测试一下连接功能。我像这样嘲笑了 DynamoDB 构造函数:

// See /sf/ask/3332458181/
jest.mock('aws-sdk', () => {
  const DynamoDB = jest.fn().mockImplementation(() => {
    return {};
  });
  return {
    DynamoDB,
  };
});
Run Code Online (Sandbox Code Playgroud)

然而,这意味着DocumentClient构造函数失败。我又该如何嘲笑呢?

amazon-dynamodb typescript jestjs aws-sdk-nodejs ts-jest

9
推荐指数
3
解决办法
2万
查看次数

使用 Javascript 'aws-sdk' v3 获取上传的对象 URL

目前我们使用的是aws-sdkv2,通过这种方式提取上传的文件URL

  const res = await S3Client
    .upload({
      Body: body,
      Bucket: bucket,
      Key: key,
      ContentType: contentType,
    })
    .promise();

  return res.Location;
Run Code Online (Sandbox Code Playgroud)

现在我们要升级到aws-sdkv3,新的文件上传方式如下所示

const command = new PutObjectCommand({
  Body: body,
  Bucket: bucket,
  Key: key,
  ContentType: contentType,
});

const res = await S3Client.send(command);
Run Code Online (Sandbox Code Playgroud)

不幸的是,res对象现在不包含Location属性。

getSignedUrlSDK功能看起来不太合适,因为它只是生成一个带有到期日期的URL(可能可以将其设置为一些额外的巨大持续时间,但无论如何,我们仍然需要有可能分析URL路径)

对我来说,手动构建 URL 看起来不是一个好主意,也不是一个稳定的解决方案。

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

9
推荐指数
1
解决办法
4347
查看次数

AWS JS SDK 突然抛出“访问密钥 ID 或安全令牌无效”。

最近是否有人注意到 AWS JS SDK 的行为发生了变化?

因为我在 Github Actions 中有一个 CI 管道,其中使用以下 docClient 设置启动本地 DynamoDB 并将其写入 DyanmoDB:

const docClient = new AWS.DynamoDB.DocumentClient({
  region: 'localhost',
  endpoint: 'http://localhost:8000',
  accessKeyId: 'DEFAULTACCESSKEY',
  secretAccessKey: 'DEFAULTSECRETKEY',
  convertEmptyValues: true,
});
Run Code Online (Sandbox Code Playgroud)

到目前为止,这也非常有效,只是从今天中午开始,这个错误就失败了。

我没有更改源代码中的任何内容,只是再次运行 CI 作业。

 UnrecognizedClientException: The Access Key ID or security token is invalid.
281
      at Request.extractError (node_modules/aws-sdk/lib/protocol/json.js:80:27)
282
      at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:106:20)
283
      at Request.emit (node_modules/aws-sdk/lib/sequential_executor.js:78:10)
284
      at Request.emit (node_modules/aws-sdk/lib/request.js:686:14)
Run Code Online (Sandbox Code Playgroud)

我在今天发布的 aws-sdk 包 (2.1409.0) 中找不到任何可以表明这一点的内容。

amazon-dynamodb aws-sdk aws-sdk-nodejs aws-sdk-js github-actions

9
推荐指数
2
解决办法
4209
查看次数

当注入的机密和参数有更新时,需要重新启动 AWS ECS Fargate 容器

我有一个场景,我们在 Fargate 上有一些 AWS ECS 集群,并且 Secrets 从 Secrets Manager 和 AWS SSM 参数存储注入到这些任务定义中。现在,我们想要创建一个 Lambda 函数,以便在机密或参数更新时自动重新启动特定任务定义。我们创建了 AWS CloudWatch Log 组来创建日志(如果有更新),请删除本文档后面的密钥和参数: https://upstart.chrishic.com/updating-container-secrets-using-cloudwatch-events-lambda/

现在我们要实现一个 Lambda 函数,它将响应此 LogGroup 并验证密钥或参数的 ARN,并重新启动(执行强制部署)相应的 ECS 服务

amazon-ecs boto3 aws-lambda aws-sdk-nodejs

8
推荐指数
1
解决办法
1397
查看次数

切换到 18.x 后,Lambda 函数无法加载 AWS sdk

我将 Lambda 函数从 node12.x 升级到了 node18.x

该代码在 12.x 上运行得很好,切换到 18.x 后,我无法再包含 AWS sdk:

我曾经通过简单地输入以下内容来包含它:

var AWS = require('aws-sdk');
Run Code Online (Sandbox Code Playgroud)

我现在收到这个错误

"Error: Cannot find module 'aws-sdk'
Run Code Online (Sandbox Code Playgroud)

我想如果我能让AWS sdk正确加载该功能应该没问题,有什么想法吗?

谢谢

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

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

如何在AWS API Getaway中为使用计划添加API密钥

我在创建与AWS API Getaway中的使用计划相关联的API密钥时遇到问题(使用AWS SDK for node.js).

在AWS Console中,您可以通过此按钮将API密钥附加到使用计划: 在此输入图像描述

但是我在AWS SDK文档中找不到类似的功能

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

7
推荐指数
1
解决办法
816
查看次数

AWS Textract StartDocumentAnalysis 函数未向 SNS 主题发布消息

我正在使用 AWS Textract 并且我想分析一个多页文档,因此我必须使用异步选项,所以我首先使用了startDocumentAnalysis函数,我得到了一个 JobId 作为返回,但它需要触发一个我设置为的函数当 SNS 主题收到消息时触发。

这些是我的无服务器文件和处理程序文件。

provider:
  name: aws
  runtime: nodejs8.10
  stage: dev
  region: us-east-1
  iamRoleStatements:
    - Effect: "Allow"
      Action:
       - "s3:*"
      Resource: { "Fn::Join": ["", ["arn:aws:s3:::${self:custom.secrets.IMAGE_BUCKET_NAME}", "/*" ] ] }
    - Effect: "Allow"
      Action:
        - "sts:AssumeRole"
        - "SNS:Publish"
        - "lambda:InvokeFunction"
        - "textract:DetectDocumentText"
        - "textract:AnalyzeDocument"
        - "textract:StartDocumentAnalysis"
        - "textract:GetDocumentAnalysis"
      Resource: "*"

custom:
  secrets: ${file(secrets.${opt:stage, self:provider.stage}.yml)}

functions:
  routes:
    handler: src/functions/routes/handler.run
    events:
      - s3:
          bucket: ${self:custom.secrets.IMAGE_BUCKET_NAME}
          event: s3:ObjectCreated:*

  textract:
    handler: src/functions/routes/handler.detectTextAnalysis
    events:
      - sns: "TextractTopic"

resources:
  Resources: …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-sdk aws-lambda aws-sdk-nodejs amazon-textract

7
推荐指数
3
解决办法
1868
查看次数

AWS:无法使用 sso 凭证登录 aws-sdk

我正在尝试使用 Node.js 应用程序中的 SSO 凭证通过 AWS-SDK 访问 AWS 资源。为此,我首先从 AWS CLI 创建了我的 SSO 配置文件,然后尝试在我尝试使用以下方法的应用程序中使用相同的配置文件:

Option1:
const AWS = require("aws-sdk");
const { defaultProvider } = require("@aws-sdk/credential-provider-node");
const route53 = new AWS.Route53({ credentials: defaultProvider({ profile: "my-sso-profile" })});

Option2:
const AWS = require("aws-sdk");
const { fromSSO } = require("@aws-sdk/credential-provider-sso");
const route53 = new AWS.Route53({ credentials: fromSSO ({ profile: "my-sso-profile" })});
Run Code Online (Sandbox Code Playgroud)

我运行时出现以下错误:

Error [CredentialsError]: Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1
Run Code Online (Sandbox Code Playgroud)

即使我已经使用(setx AWS_SDK_LOAD_CONFIG 1)将环境变量AWS_SDK_LOAD_CONFIG设置为1。我仍然面临同样的问题

我的配置文件位于 users/user/.aws/config ,如下所示:

[profile my-sso-profile]
sso_start_url = https://*******.awsapps.com/start …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services single-sign-on aws-sdk-nodejs aws-sdk-js

7
推荐指数
1
解决办法
8434
查看次数

aws-sdk 与 @aws-sdk 之间的区别

我遇到过两个不同的nodejs sdk库aws-sdk以及. 两者有什么区别,我应该使用哪一个?@aws-sdk/

aws-sdk aws-sdk-nodejs

7
推荐指数
1
解决办法
3578
查看次数

从 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万
查看次数