标签: aws-sdk-js

Nodejs AWS SDK S3生成预签名URL

我正在使用NodeJS AWS SDK生成预先签名的S3 URL.文档提供了生成预签名URL示例.

这是我的确切代码(省略了敏感信息):

const AWS = require('aws-sdk')

const s3 = new AWS.S3()
AWS.config.update({accessKeyId: 'id-omitted', secretAccessKey: 'key-omitted'})

// Tried with and without this. Since s3 is not region-specific, I don't
// think it should be necessary.
// AWS.config.update({region: 'us-west-2'})

const myBucket = 'bucket-name'
const myKey = 'file-name.pdf'
const signedUrlExpireSeconds = 60 * 5

const url = s3.getSignedUrl('getObject', {
    Bucket: myBucket,
    Key: myKey,
    Expires: signedUrlExpireSeconds
})

console.log(url)
Run Code Online (Sandbox Code Playgroud)

生成的URL如下所示:

https://bucket-name.s3-us-west-2.amazonaws.com/file-name.pdf?AWSAccessKeyId=[access-key-omitted]&Expires=1470666057&Signature=[signature-omitted]
Run Code Online (Sandbox Code Playgroud)

我正在将该URL复制到我的浏览器中并获得以下响应:

<Error>
  <Code>NoSuchBucket</Code>
  <Message>The specified bucket does …
Run Code Online (Sandbox Code Playgroud)

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

75
推荐指数
3
解决办法
4万
查看次数

如何在 AWS SDK v3 JavaScript 中设置凭证?

我正在搜索文档,它只提供了 v3 凭证的伪代码(例如const client = new S3Client(clientParams)

如何使用存储桶和凭据初始化 S3Client 以执行 getSignedUrl 请求?任何为我指明正确方向的资源都会非常有帮助。我什至搜索了 YouTube、SO 等,但找不到有关 v3 的任何具体信息。即使文档和示例也没有提供使用凭据的实际代码。谢谢!

顺便说一句,我是否必须在文件名中包含假文件夹结构,或者我可以只使用实际的文件名吗?例如:bucket/folder1/folder2/uniqueFilename.zip 或 uniqueFilename.zip

这是我到目前为止的代码:(请记住,我正在返回以wasabiObjKey确保我获得正确的文件名。我是。我遇到问题的是客户端、GetObjectCommand 和 getSignedUrl。

exports.getPresignedUrl = functions.https.onCall(async (data, ctx) => {
  const wasabiObjKey = `${data.bucket_prefix ? `${data.bucket_prefix}/` : ''}${data.uid.replace(/-/g, '_').toLowerCase()}${data.variation ? `_${data.variation.replace(/\./g, '').toLowerCase()}` : ''}.zip`
  const { S3Client, GetObjectCommand } = require('@aws-sdk/client-s3')
  const s3 = new S3Client({
    bucketEndpoint: functions.config().s3_bucket.name,
    region: functions.config().s3_bucket.region,
    credentials: {
      secretAccessKey: functions.config().s3.secret,
      accessKeyId: functions.config().s3.access_key
    }
  })
  const command = new GetObjectCommand({
    Bucket: functions.config().s3_bucket.name,
    Key: wasabiObjKey,
  }) …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services aws-sdk-js

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

禁止 AWS 开发工具包 v2 弃用消息

我看到了很多这样的消息:

注意:AWS SDK for JavaScript (v2) 将于 2023 年进入维护模式。

请迁移您的代码以使用适用于 JavaScript 的 AWS 开发工具包 (v3)。有关更多信息,请查看迁移指南:https://a.co/7PzMCcy (用于node --trace-warnings ...显示创建警告的位置)

能抑制住吗?

(这不是我的代码库,所以升级到 v3 是我无法控制的)。

node.js aws-sdk aws-sdk-js

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

AWS Lambda 是否支持 aws-sdk v3?

我在cdk 研讨会上创建了一个小型 lambda 函数。我正在打字稿中编写 lambda 函数,通过管道进行部署,该管道创建包含 lambda 函数的云形成堆栈。

我正在尝试在 lambda 中使用 sdk v3,如此处演示的那样但后来我在这里看到了相互矛盾的文档。

这些错误是因为我尝试使用 V3 而我不应该使用,还是因为其他原因?处理程序设置正确,函数运行但失败并出现错误:

{
    "errorType": "Runtime.ImportModuleError",
    "errorMessage": "Error: Cannot find module '@aws-sdk/client-sns'\nRequire stack:\n- /var/task/ReceiveMessageLoraThing.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js",
    "stack": [
        "Runtime.ImportModuleError: Error: Cannot find module '@aws-sdk/client-sns'",
        "Require stack:",
        "- /var/task/ReceiveMessageLoraThing.js",
        "- /var/runtime/UserFunction.js",
        "- /var/runtime/index.js",
        "    at _loadUserApp (/var/runtime/UserFunction.js:100:13)",
        "    at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)",
        "    at Object.<anonymous> (/var/runtime/index.js:43:30)",
        "    at Module._compile (internal/modules/cjs/loader.js:999:30)",
        "    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)",
        "    at Module.load (internal/modules/cjs/loader.js:863:32)",
        "    at Function.Module._load (internal/modules/cjs/loader.js:708:14)",
        "    at …
Run Code Online (Sandbox Code Playgroud)

aws-lambda aws-sdk-js

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

与基本版本 SES 相比,SESv2 的 aws-sdk 是否缺少某些功能?

我对 SES 和 SESV2 之间 javascript aws-sdk 的差异感到困惑。我的默认假设是 V2 是升级/更新,应该涵盖基本 SES 模块具有的所有功能,但似乎存在很多差距,至少那些处理收据规则集的功能似乎缺失。或者我错过了什么?

例如,“listReceiptRuleSets”位于 aws-sdk SES 中,但不在 SESv2 中。V2中有类似的动作吗?

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SES.html#listReceiptRuleSets-property

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SESV2.html

javascript amazon-web-services amazon-ses aws-sdk-js

22
推荐指数
1
解决办法
5683
查看次数

dynamodb.put().promise() 不返回放置对象

我正在尝试使用有关 aws 和 dynamo db 的 async/await 功能。下面是一个如何在异步等待前放置对象的示例,正​​如您在回调中看到的,您可以访问包含放置对象的数据。但是,在使用 async 和 promise 的第二个代码块中,结果是一个空对象,有什么想法吗?

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.NodeJs.03.html

非承诺版本

var docClient = new AWS.DynamoDB.DocumentClient();

var table = "Movies";

var year = 2015;
var title = "The Big New Movie";

var params = {
    TableName:table,
    Item:{
        "year": year,
        "title": title,
        "info":{
            "plot": "Nothing happens at all.",
            "rating": 0
        }
    }
};

console.log("Adding a new item...");
docClient.put(params, function(err, data) {
    if (err) {
        console.error("Unable to add item. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        console.log("Added item:", …
Run Code Online (Sandbox Code Playgroud)

javascript amazon-web-services node.js amazon-dynamodb aws-sdk-js

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

使用 AWS Amplify 创建 process.env 变量?

使用无服务器,我们可以process.env通过创建这样的配置文件条目来添加变量:

environment:
    STRIPE_SECRET_KEY: ${self:custom.secrets.stripeSecretKey} # Stripe secret API key
Run Code Online (Sandbox Code Playgroud)

我们可以像这样在 lambda 函数中访问它:

const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);
Run Code Online (Sandbox Code Playgroud)

我们如何使用 AWS Amplify 做到这一点?

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

16
推荐指数
1
解决办法
8541
查看次数

如何使用 v3 sdk 通过 jest 模拟 AWS S3 GetObjectCommand?

测试 s3 上传?测试的方法是

export class ProcessData {
  constructor() {}

  async process(): Promise<void> {
     const data = await s3Client.send(new GetObjectCommand(bucket));
     await parseCsvData(data.Body)
}
Run Code Online (Sandbox Code Playgroud)

这是我对测试用例的尝试。

import {S3Client} from '@aws-sdk/client-s3';
jest.mock("aws-sdk/clients/s3", () => {
  return {
    S3Client: jest.fn(() => {
        send: jest.fn().mockImplementation(() => {
            data:  Buffer.from(require("fs").readFileSync(path.resolve(__dirname, "test.csv")));
        })
    })
  }
});

describe("@aws-sdk/client-s3 mock", () => {
  test('CSV Happy path', async () => {
    const processData = new ProcessData()
    await processData.process()
  }
}
Run Code Online (Sandbox Code Playgroud)

该进程进入解析方法并抛出错误“您尝试访问的存储桶必须使用特定端点进行寻址”

amazon-s3 amazon-web-services typescript aws-sdk-js ts-jest

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

如何以编程方式在 Cognito 用户池中创建用户?

AWS 文档表明管理员可以使用 API 在 AWS Cognito 中创建用户池用户。

这是我所指的文档:https : //docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html

然而,文档提供的细节很少,甚至没有提供如何完成的示例。它没有提及要调用的端点、要使用的 SDK 功能或任何有关身份验证的内容等。

有没有人有直接从您的代码创建新用户的经验?

javascript amazon-web-services amazon-cognito aws-sdk-js

11
推荐指数
2
解决办法
9089
查看次数

AWS Cognito 响应 New_Password_Required 质询返回“无法修改已提供的电子邮件”

每当尝试使用 AWS Cognito 响应 NEW_PASSWORD_REQUIRED 质询时,已经成功运行了几年的应用程序就会开始抛出以下错误:

{"__type":"NotAuthorizedException","message":"无法修改已提供的电子邮件"}

我正在发送以下内容,这些内容似乎都与文档相符。

{
    "ChallengeName": "NEW_PASSWORD_REQUIRED",
    "ClientId": <client_id>,
    "ChallengeResponses": {
        "userAttributes.email": "test@example.com",
        "NEW_PASSWORD": "testP@55w0rd",
        "USERNAME": "testfake"
    },
    "Session": <session_id>
}
Run Code Online (Sandbox Code Playgroud)

前端没有任何改变;我们在 Cognito/AWS 端所做的配置更改是否可能导致此错误?

amazon-cognito aws-sdk-js

11
推荐指数
1
解决办法
4866
查看次数