标签: aws-sdk-js

在 NodeJS Lambda 函数中列出 AWS.CognitoIdentityServiceProvider.listUsers 中的用户及其组?

因此,我需要在客户端的自定义管理屏幕中显示用户列表及其各个组。我正在 Lambda 函数中返回结果AWS.CognitoIdentityServiceProvider.listUsers,并且可以很好地列出用户,但我不确定为每个用户获取组并将其添加到响应中的最佳方法。

对我来说,他们没有提供类似 listUsers 的方法来包含该信息,就个人而言,这似乎有点令人惊讶,因为这似乎是一个常见的用例。以前有人解决过这个问题吗?我有一个可行的解决方案,但它看起来很老套,而且可能性能不高,所以我正在寻找更有效的解决方案。

看来我的选择是要么获取用户池中的每个组并调用AWS.CognitoIdentityServiceProvider.listUsersInGroup每个组,然后循环遍历所有用户listUsers并检查他们是否属于这些组中的任何一个,或者循环遍历响应中的每个用户listUsersAWS.CognitoIdentityServiceProvider.adminListGroupsForUser调用他们每个人。这些是我唯一的选择吗?第一个选项似乎效率稍高,因为组数少于用户数,因此 API 调用也会减少,但看起来这仍然非常低效。

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

3
推荐指数
1
解决办法
8654
查看次数

如何在 SDK v3 中获取 AWS kms 加密响应作为 Base64 字符串。获取 Uint8Array 作为响应

我用来@aws-sdk/client-kms加密数据。我得到了 base64 字符串作为响应。现在我得到了Uint8Array

 const encryptedBlob = await kms.encrypt({
    KeyId: kmsKey,
    Plaintext: Buffer.from(JSON.stringify('data to encrypt')),
  });
Run Code Online (Sandbox Code Playgroud)

加密的明文。当您使用 HTTP API 或 AWS CLI 时,该值是 Base64 编码的。否则,它不是 Base64 编码的。AWS文档中提到

有没有办法在nodeJs中获取base64作为响应。

amazon-web-services amazon-kms aws-sdk-js aws-sdk-js-v3

3
推荐指数
1
解决办法
2779
查看次数

无法编译 Typescript:s3client 上不存在发送属性

我在 typescript/nodejs 环境中使用适用于 javascript 的 AWS SDK v3,但是当我使用 ts-node 运行它时,它抱怨无法在 s3client 上找到发送函数。我的代码:

\n
const client = new S3Client({\n  credentialDefaultProvider: this.getCredentialDefaultProvider\n  region: "us-west-2",\n});\nconst command = new ListObjectsCommand({\n  Bucket: bucket,\n  Prefix: prefix,\n});\nconst result = await client.send(command);\n
Run Code Online (Sandbox Code Playgroud)\n

启动服务器时出现的错误是这样的:

\n
/server/node_modules/ts-node/src/index.ts:230\n  return new TSError(diagnosticText, diagnosticCodes)\n\nTSError: \xe2\xa8\xaf Unable to compile TypeScript:\nsrc/controllers/aws.controller.ts(56,37): error TS2339: Property \'send\' does not exist on type \'S3Client\'.\n
Run Code Online (Sandbox Code Playgroud)\n

这与官方文档中的代码示例基本相同。但我已经安装了正确的包(甚至清除了我的node_modules文件夹并重新安装了它)并且node_modules中的代码看起来是正确的。我究竟做错了什么?

\n

对于上下文,这是一个在 docker-compose 容器中的 ts-node 中运行的 nodeJS 脚本。其他代码工作正常,包括使用相同客户端对象获取签名 URL 的命令。

\n

javascript node.js aws-sdk-js

3
推荐指数
1
解决办法
3998
查看次数

使用 aws-sdk-v3 中的 KMS 客户端解密 cognito 代码

我按照此说明在 Cognito 中实现自定义消息发送器https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-custom-sms-sender.html

所有这些都适用于类似的代码(我在 AWS Lambda 上使用 Typescript):

import {buildClient, CommitmentPolicy, KmsKeyringNode} from '@aws-crypto/client-node';
import b64 from 'base64-js';

const {decrypt} = buildClient(CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT);
const keyring = new KmsKeyringNode({keyIds: ["my-key-arn"]});

...
const {plaintext} = await decrypt(keyring, b64.toByteArray(event.request.code));
console.log(plainttext.toString()) // prints plain text exactly as I need
Run Code Online (Sandbox Code Playgroud)

然而,这个库@aws-crypto/client-node让我的包变得非常巨大,几乎有 20MB!可能是因为它依赖于一些较旧的 AWS 库......

我曾经使用模块化库,这样的库@aws-sdk/xxx确实提供了更小的包。

我发现对于加密/解密我可以使用@aws-sdk/client-kms. 但这不起作用!

我正在尝试以下代码:

import {KMSClient, DecryptCommand} from "@aws-sdk/client-kms";
import b64 from 'base64-js';

const client = new KMSClient;
await client.send(new DecryptCommand({CiphertextBlob: b64.toByteArray(event.request.code), KeyId: 'my-key-arn'}))
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误: …

amazon-cognito amazon-kms aws-sdk-js aws-sdk-js-v3

3
推荐指数
1
解决办法
979
查看次数

为什么 AWS Bedrock Cohere 模型的 InvokeModelCommand 返回数字而不是文本?

我有一个在 AWS Lambda 中调用的文件,bedrock.mjs其中包含以下代码:

import {
    BedrockRuntimeClient,
    InvokeModelCommand,
} from "@aws-sdk/client-bedrock-runtime"

export const callBedrock = async (prompt, max_tokens, temperature) => {
    const client = new BedrockRuntimeClient()

    const input = {
        modelId: "cohere.command-text-v14",
        contentType: "application/json",
        accept: "application/json",
        body: JSON.stringify({
            prompt,
            max_tokens,
            temperature
        })
    }

    const command = new InvokeModelCommand(input)

    const response = await client.send(command)

    return response
}
Run Code Online (Sandbox Code Playgroud)

当我打电话时callBedrock("Respond with a nice greeting", 100, 0.2)body回复是:

{\"0\":123,\"1\":34,\"2\":103,\"3\":101,\"4\":110,\"5\":101,\"6\":114,\"7\":97,\"8\":116,\"9\":105,\"10\":111,\"11\":110,\"12\":115,\"13\":34,\"14\":58,\"15\":91,\"16\":123,\"17\":34,\"18\":105,\"19\":100,\"20\":34,\"21\":58,\"22\":34,\"23\":98,\"24\":98,\"25\":101,\"26\":54,\"27\":56,\"28\":49,\"29\":54,\"30\":101,\"31\":45,\"32\":48,\"33\":99,\"34\":49,\"35\":50,\"36\":45,\"37\":52,\"38\":50,\"39\":53,\"40\":99,\"41\":45,\"42\":56,\"43\":56,\"44\":101,\"45\":52,\"46\":45,\"47\":98,\"48\":102,\"49\":49,\"50\":51,\"51\":49,\"52\":101,\"53\":98,\"54\":56,\"55\":49,\"56\":49,\"57\":100,\"58\":50,\"59\":34,\"60\":44,\"61\":34,\"62\":116,\"63\":101,\"64\":120,\"65\":116,\"66\":34,\"67\":58,\"68\":34,\"69\":32,\"70\":72,\"71\":101,\"72\":108,\"73\":108,\"74\":111,\"75\":33,\"76\":32,\"77\":72,\"78\":111,\"79\":119,\"80\":32,\"81\":99,\"82\":97,\"83\":110,\"84\":32,\"85\":73,\"86\":32,\"87\":104,\"88\":101,\"89\":108,\"90\":112,\"91\":32,\"92\":121,\"93\":111,\"94\":117,\"95\":32,\"96\":116,\"97\":111,\"98\":100,\"99\":97,\"100\":121,\"101\":63,\"102\":34,\"103\":125,\"104\":93,\"105\":44,\"106\":34,\"107\":105,\"108\":100,\"109\":34,\"110\":58,\"111\":34,\"112\":99,\"113\":97,\"114\":100,\"115\":99,\"116\":57,\"117\":50,\"118\":102,\"119\":51,\"120\":45,\"121\":53,\"122\":50,\"123\":102,\"124\":97,\"125\":45,\"126\":52,\"127\":56,\"128\":101,\"129\":56,\"130\":45,\"131\":98,\"132\":100,\"133\":57,\"134\":54,\"135\":45,\"136\":48,\"137\":57,\"138\":57,\"139\":57,\"140\":102,\"141\":98,\"142\":55,\"143\":56,\"144\":53,\"145\":97,\"146\":101,\"147\":101,\"148\":34,\"149\":44,\"150\":34,\"151\":112,\"152\":114,\"153\":111,\"154\":109,\"155\":112,\"156\":116,\"157\":34,\"158\":58,\"159\":34,\"160\":82,\"161\":101,\"162\":115,\"163\":112,\"164\":111,\"165\":110,\"166\":100,\"167\":32,\"168\":119,\"169\":105,\"170\":116,\"171\":104,\"172\":32,\"173\":97,\"174\":32,\"175\":110,\"176\":105,\"177\":99,\"178\":101,\"179\":32,\"180\":103,\"181\":114,\"182\":101,\"183\":101,\"184\":116,\"185\":105,\"186\":110,\"187\":103,\"188\":34,\"189\":125}
Run Code Online (Sandbox Code Playgroud)

这应该如何解释或使用?

amazon-web-services aws-lambda aws-sdk-js amazon-bedrock

3
推荐指数
1
解决办法
767
查看次数

AWS S3使用URL获取对象

我收集了可能属于或不属于特定存储桶的URL。这些不是公开的。

我正在使用nodejs aws-sdk来获取它们。

但是,该getObject函数需要参数Bucket和参数Key,这些参数已经存在于我的URL中。

有什么办法可以使用URL?

我尝试通过使用拆分URL来提取密钥,/并通过拆分来获取存储桶.。但是问题是存储桶名称也可以有.,我不确定键名称是否也可以有/

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

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

如何在AWS js SDK中配置区域?

我的问题

我正在编写一个简单的js函数,该函数从AWS CloudWatch Logs中读取一些信息。

遵循Node.js AWS开发工具包中的配置区域中的答案以及AWS nodejs SDK文档中的内容,我提出了以下内容:

var AWS = require('aws-sdk');

var cloudwatchlogs = new AWS.CloudWatchLogs();

console.log(AWS.config.region)              // Undefined

AWS.config.region = 'eu-central-1'          // Define the region with dot notation
console.log(AWS.config.region) .            // eu-central-1

AWS.config.update({region:'eu-central-1'}); // Another way to update
console.log(AWS.config.region) .            // eu-central-1


var params = {
  limit: 0,
//   logGroupNamePrefix: 'STRING_VALUE',
//   nextToken: 'STRING_VALUE'
};

// This call is failing
cloudwatchlogs.describeLogGroups(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error …
Run Code Online (Sandbox Code Playgroud)

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

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

如何在 aws-sdk DocumentClient 构造函数中传递 httpOptions?

当我将应用程序部署到 AWS 时,我在使用 aws-sdk 时遇到了严重的性能问题。我正在使用它,如下所示:

wrapper = {
    accessKeyId: "YOURACCESSKEY",
    secretAccessKey: "YOURSECRETKEY",
    region: "us-east-1",
    endpoint: new AWS.Endpoint('http://localhost:8000')
};

AWS.config.update(wrapper);

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

module.exports ={"docClient":docClient};
Run Code Online (Sandbox Code Playgroud)

我研究并发现 - https://github.com/aws/aws-sdk-js/issues/900 - 我们可以在 aws 中指定 httpOptions 以便启用 keepAlive。

我的问题是,如何在上面的 AWS-sdk 构造函数中指定 httpOptions:

var dynamo = new AWS.DynamoDB({
  region: "ap-southeast-2",
  httpOptions: {
  agent: new https.Agent({
  rejectUnauthorized: true,
  keepAlive: true
  })
}
Run Code Online (Sandbox Code Playgroud)

});

如何将其添加到包装器配置中。它不接受 AWS.config.update 中的任何额外的 httpOptions 键

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

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

等待AWS SNS发布回调以将值返回给调用方法

我试图在用户请求重置密码时发送短信.我想等待发送消息以提醒用户是否成功.我目前正在尝试如下操作:

async function sendResetPasswordTextMessage(req, res) {
    let result = {};

    let phoneNumber = req.body.phoneNumber;                

    if (phoneNumber === undefined) {                       
        return sendInvalidParametersMessage(res);          
    }                                                      

    phoneNumber = phoneNumber.toString();                  

    const userProfile = await models.UserProfile.findOne({ 
        where: {                                           
            phoneNumber: phoneNumber                       
        }                                                  
    });                                                    
    ************************** RELEVANT CODE TO ISSUE *************************
    if (userProfile) {
        const message = "Your username is:\n" + userProfile.username;
        const sent = await AWSSNSClient.sendMessage(message, phoneNumber);

        if (!sent) {
            result.error = setTitleAndMessage("Error", "An error occurred");
        } else {
            result.success = setTitleAndMessage("Success", "Message sent"); 
        }
    }
    return res.send(result); …
Run Code Online (Sandbox Code Playgroud)

javascript node.js amazon-sns async-await aws-sdk-js

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

超出预配置吞吐量时应该怎么做?

我正在使用AWS SDK for Javascript(Node.js)从DynamoDB表中读取数据.自动缩放功能在大多数时间内都能很好地工作,并且消耗的读取容量单位(RCU)在一天中的大部分时间都非常低.但是,有一个编程的作业在午夜左右执行,耗费约为配置RCU的10倍,并且由于自动缩放需要一些时间来调整容量,因此存在大量限制读取请求.此外,我怀疑我的请求没有完成(虽然我在错误日志中找不到任何异常).

为了处理这种情况,我考虑使用AWS API(updateTable)增加配置的RCU,但计算我的应用程序所需的RCU数量可能并不简单.

所以我的第二个猜测是重试失败的请求,只是等待自动扩展配置的RCU.正如AWS文档和一些Stack Overflow答案所指出的那样(特别是关于ProvisionedThroughputExceededException):

适用于Amazon DynamoDB的AWS开发工具包会自动重试接收此异常的请求.因此,您的请求最终会成功,除非请求太大或您的重试队列太大而无法完成.

我已经阅读了类似的问题(这一个,这一个这一个),但我仍然感到困惑:如果请求太大或重试队列太大而无法完成(因此在自动重试之后)或实际上在重试之前?

最重要的是:我应该在我的背景下期待的例外吗?(所以我可以抓住它并重试直到自动缩放增加RCU?)

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

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