我目前有一个设置,我的移动前端执行图像的 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
我正在运行一个使用该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) 我正在 Angular5 中做简单的测试应用程序,它将读取来自 Amazon SNS 主题的通知并将其显示在 UI 上。
我将手动将消息发布到主题中。但问题是我如何使用 aws-sdk 从 Angular 应用程序订阅它。
谢谢!
我在React Native和aws-sdk. 我使用aws-sdk而不是的原因aws-amplify是因为:
aws-amplify 不支持使用预先签名的 URL 上传文件
我的项目在aws-sdk安装npm并aws-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) 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 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
由于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直接导入到我的项目中的方法。
在 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. …
我使用 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 客户端也将其公开?
我已经开始在我的一些服务中使用新的 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 设置超时?
aws-sdk-js ×10
amazon-s3 ×4
aws-sdk ×4
node.js ×3
amazon-sns ×1
angular ×1
aws-cli ×1
file-upload ×1
javascript ×1
lambda ×1
react-native ×1
typescript ×1