我有一个如下所示的函数:
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构造函数失败。我又该如何嘲笑呢?
目前我们使用的是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 看起来不是一个好主意,也不是一个稳定的解决方案。
最近是否有人注意到 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
我有一个场景,我们在 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 服务
我将 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正确加载该功能应该没问题,有什么想法吗?
谢谢
我在创建与AWS API Getaway中的使用计划相关联的API密钥时遇到问题(使用AWS SDK for node.js).
在AWS Console中,您可以通过此按钮将API密钥附加到使用计划:

但是我在AWS SDK文档中找不到类似的功能
我正在使用 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
我正在尝试使用 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
场景是:
现在的查询:
谢谢
aws-sdk-nodejs ×10
aws-sdk ×5
aws-lambda ×4
aws-sdk-js ×3
amazon-ecs ×1
amazon-s3 ×1
boto3 ×1
jestjs ×1
node.js ×1
ts-jest ×1
typescript ×1