标签: aws-sdk-js

如何接收来自 AWS S3 触发的 lambda 函数的响应?

我目前有一个设置,我的移动前端执行图像的 AWS s3 上传。s3 上传触发 AWS lambda 函数,该函数启动执行各种作业和操作的 AWS 步进函数(状态机)。

我正在寻找最好的(也是最省时的)方法来将步进函数结束时的输出返回到移动设备。

一种方法是监视executionARN状态机的 ,并在完成时获取数据。此处的awslabs lambda-refarch-imagerecognition 实现似乎就是这种情况。但是,我的前端在移动设备上,我宁愿不必发送和接收许多请求来检查状态机是否已完成。

另一种可能的解决方案是重构流程,使 s3 上传成为一个独立事件,一旦成功,就向触发 step-function 的 AWS API 网关发出 API 请求。然后 API POST 请求将返回响应。这里的问题是应用程序必须等待 s3 响应才能继续启动状态机。

是否有更好的方法来执行此序列并接收响应。理想情况下,s3 上传将从状态机返回完整响应。这样就有一个请求(图像上传)和一个响应。

lambda amazon-s3 amazon-web-services aws-step-functions aws-sdk-js

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

aws-sdk NodeJS 从环境变量中读取凭证

我正在运行一个使用该aws-sdk库的 NodeJS 应用程序。我导出了以下环境变量:

AWS_ACCESS_KEY_ID=XXXXXXXXXXXXX
AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXX
Run Code Online (Sandbox Code Playgroud)

env我可以通过运行命令以及console.log(process.env)在我的节点代码中运行来验证它们是否设置正确。

运行我的应用程序时,出现以下错误:

Error: ENOENT: no such file or directory, open '/root/.aws/credentials'
    at Object.fs.openSync (fs.js:577:3)
    at Object.fs.readFileSync (fs.js:483:33)
    at Object.readFileSync (/app/node_modules/aws-sdk/lib/util.js:97:26)
    at SharedIniFile.loadFile [as ensureFileLoaded] (/app/node_modules/aws-sdk/lib/shared_ini.js:19:18)
    at SharedIniFile.loadProfile [as getProfile] (/app/node_modules/aws-sdk/lib/shared_ini.js:52:10)
    at Config.region (/app/node_modules/aws-sdk/lib/node_loader.js:88:34)
    at Config.set (/app/node_modules/aws-sdk/lib/config.js:448:39)
    at Config.<anonymous> (/app/node_modules/aws-sdk/lib/config.js:283:12)
    at Config.each (/app/node_modules/aws-sdk/lib/util.js:485:32)
    at new Config (/app/node_modules/aws-sdk/lib/config.js:282:19)
    at Object.<anonymous> (/app/node_modules/aws-sdk/lib/node_loader.js:99:14)
    at Module._compile (internal/modules/cjs/loader.js:702:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:713:10)
    at Module.load (internal/modules/cjs/loader.js:612:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
    at Function.Module._load (internal/modules/cjs/loader.js:543:3)
npm ERR! code ELIFECYCLE
npm ERR! …
Run Code Online (Sandbox Code Playgroud)

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

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

在 angular5 中订阅 SNS 并获取通知

我正在 Angular5 中做简单的测试应用程序,它将读取来自 Amazon SNS 主题的通知并将其显示在 UI 上。

我将手动将消息发布到主题中。但问题是我如何使用 aws-sdk 从 Angular 应用程序订阅它。

谢谢!

amazon-sns aws-sdk-js angular

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

react-native - 致命错误:接近堆限制的无效标记压缩分配失败 - JavaScript 堆内存不足

我在React Nativeaws-sdk. 我使用aws-sdk而不是的原因aws-amplify是因为:

aws-amplify 不支持使用预先签名的 URL 上传文件

我的项目在aws-sdk安装npmaws-sdk-react-native导入之前工作正常(当aws-sdk版本为“2.369.0”时,此文件为 4.3MB )。

添加这行代码后:

const AWS = require("aws-sdk/dist/aws-sdk-react-native");
Run Code Online (Sandbox Code Playgroud)

应用程序崩溃并显示错误消息:

transform[stdout]: <--- Last few GCs --->
transform[stdout]:
transform[stdout]: [5433:0x103800000]    59176 ms: Mark-sweep 1256.2 (1442.0) -> 1236.2 (1434.5) MB, 3855.9 / 0.0 ms  (average mu = 0.239, current mu = 0.130) allocation failure scavenge might not succeed
transform[stdout]: [5433:0x103800000]    63390 ms: Mark-sweep 1259.8 (1442.5) -> 1243.1 (1438.5) MB, 3924.9 …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 node.js aws-sdk react-native aws-sdk-js

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

如何通过 cli 或 sdk 设置 Cognito 用户池应用程序客户端的允许自定义范围?

TL;DR:有没有办法通过 cli 或 sdk 设置应用程序客户端自定义范围?

我正在尝试使用 CloudFormation 自动化我的 Cognito 部署。我已经制作了一些自定义资源,因为并非所有内容都受支持。为此,我使用 AWS JS SDK。我想为特定用户池中的应用程序客户端设置“允许的自定义范围”。但是,我无法在 AWS 提供的任何文档中找到如何执行此操作。CLI 文档仅在Cognito-user-identity docs 的文档中说明了这一点:

AllowedOAuthScopes
A list of allowed OAuth scopes. Currently supported values are "phone", "email", "openid", and "Cognito".
Run Code Online (Sandbox Code Playgroud)

提到的范围有在用户池中始终可用的默认范围。但我也使用由我定义的自定义资源服务器提供的自定义范围。那些看起来像:resourceServer.com/scope。我找不到任何关于设置这些范围的文档。

那么,有没有办法通过 cli 或 sdk 设置自定义范围?

aws-cli aws-sdk-js

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

AWS S3:MaxPostPreDataLengthExceeded 上传文件之前的 POST 请求字段太大

我正在尝试使用 AWS Javascript SDK 的 createPresignedPost 方法将文件上传到 AWS S3,
我使用以下代码生成用于上传的签名凭证 -

let AWS = require('aws-sdk');
let util = require('util');

let s3Client = new AWS.S3({
    region: 'us-east-1'
});

let postSignedUrl = async () => {

    try {
        let postSigningParams = {
            Expires: 60,
            Bucket: "some-bucket-name,
            Conditions: [["content-length-range", 100, 10000000]],
            Fields: {
                key: 'test/image.jpg'
            }
        }

        let s3createPresignedPost = util.promisify(s3Client.createPresignedPost).bind(s3Client);
        let postSignedUrl = await s3createPresignedPost(postSigningParams);

        console.log('postSigningParams => ', postSignedUrl);
    } catch (error) {
        console.error(error);
    }
}

postSignedUrl();
Run Code Online (Sandbox Code Playgroud)

我收到如下凭据 -

{
            "url": "https://s3.amazonaws.com/some-bucket-name", …
Run Code Online (Sandbox Code Playgroud)

javascript file-upload amazon-s3 amazon-web-services aws-sdk-js

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

仅导入所需客户端时如何使用 CognitoIdentityCredentials?

由于aws-sdk在浏览器端使用起来很大,而且我正在使用 Webpack,因此仅包含我正在使用的客户端(例如 )更有意义import S3 from 'aws-sdk/clients/s3'。但是,我无法为客户端配置凭据,就像我可以在AWS导入中执行的操作一样:

AWS.config.update({
  region: '<a-region>',
  credentials: new AWS.CognitoIdentityCredentials({
    IdentityPoolId: '<an-identifier>',
  }),
});
Run Code Online (Sandbox Code Playgroud)

在 中aws-sdk,虽然(TypeScript 的)类型显示 可以CognitoIdentityCredentials直接从 导出aws-sdk/lib/credentials/cognito_identity_credentials,但实际上不是。我无法找到另一种CognitoIdentityCredentials直接导入到我的项目中的方法。

aws-sdk aws-sdk-js

5
推荐指数
0
解决办法
210
查看次数

opentelemetry https 插件导致错误的 aws 请求签名

在 NodeJS 应用程序中一起使用@opentelemetry/plugin-https和时aws-sdk,opentelemetry 插件会将traceparent标头添加到每个 AWS 请求中。如果不需要在aws-sdk. 当 aws-sdk 重试请求时,可能会发生以下错误:

  • InvalidSignatureException: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.
  • SignatureDoesNotMatch: The request signature we calculated does not match the signature you provided. Check your key and signing method.

第一个 AWS 请求包含以下标头:

  • traceparent: '00-32c9b7adee1da37fad593ee38e9e479b-875169606368a166-01'
  • Authorization: 'AWS4-HMAC-SHA256 Credential=<credential>, SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-security-token;x-amz-target, Signature=<signature>'

请注意,SignedHeaders 包括traceparent. …

amazon-web-services node.js aws-sdk-js open-telemetry

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

由 client-s3 Typescript 库上传时公开 S3 对象

我使用 Typescript 代码将文件上传到 S3,如下所示:

    import {PutObjectCommand, PutObjectCommandInput, S3Client} from "@aws-sdk/client-s3";
    const s3 = new S3Client(config);
    const uploadParams: PutObjectCommandInput = {
        Bucket: bucketName,
        Key: filename,
        Body: fileData
    };
 
    await s3.send(new PutObjectCommand(uploadParams));
Run Code Online (Sandbox Code Playgroud)

但是,我需要在上传后将对象公开,以便将其作为静态网站的一部分进行访问,并将其作为私有上传。我如何告诉 s3 客户端也将其公开?

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

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

如何为 AWS V3 Dynamo 客户端设置超时

我已经开始在我的一些服务中使用新的 AWS 版本 3 sdk。不幸的是,并不总是清楚如何使用版本 2 sdk 中提供的模块化版本 3 代码中的某些功能。

要为非模块化 sdk 设置超时,您可以执行以下操作:

AWS.config.update({
     httpOptions: {
        connectTimeout: 10000,
        timeout: 10000
    }
 });
Run Code Online (Sandbox Code Playgroud)

但是,当我想使用版本 3 sdk 并使用 Dynamo 客户端时,我明确尝试不使用全局 AWS 对象。据我所知,DynamoDBClient 的配置输入不接受 httpOptions,这通常是设置超时的地方。

import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
const REGION = process.env.AWS_REGION;
const v3DynamoClient: DynamoDBClient = new DynamoDBClient({ region: REGION });
Run Code Online (Sandbox Code Playgroud)

如何为 AWS V3 sdk 中的 DynamoDBClient 设置超时?

amazon-dynamodb aws-sdk-js

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