我正在尝试通过 AWS Lambda 从现有应用程序运行特定函数,使用 JS SDK 从我的 node.js 应用程序调用 Lambda。由于我要覆盖现有函数,因此我必须保留其基本结构,即:
overwrittenFunction = function(params) {
//get some data
return dataArray;
}
Run Code Online (Sandbox Code Playgroud)
..所以我需要得到一个我可以返回的数组,如果我想保留我使用的库的底层结构。现在,据我所知,LAMBDA调用是异步的,因此它不能够做这样的事情:
overwrittenFunction = function(params) {
lambda.invoke(params, callback);
function callback(err,data) {
var dataArray = data;
}
return dataArray;
}
Run Code Online (Sandbox Code Playgroud)
(我也尝试过类似的承诺和异步/等待)。
afaik 我现在有两个选择:以某种方式弄清楚如何进行同步 Lambda 调用,或者修改我的库/现有应用程序(如果可能,我宁愿不这样做)。
有没有办法做这样的事情并以某种方式返回我期望的值?
(我正在使用节点 v8.9.4)
asynchronous amazon-web-services node.js aws-lambda aws-sdk-js
Tye AWS.S3.ManagedUpload 对象允许您上传指定“标签”的对象,但我没有看到任何用于在上传的对象上指定元数据的文档。这可能吗?如果是这样,如何?
我正在遵循Trivikr提出的解决方案,以添加对s3.getSignedUrlapi 的支持,该支持目前在较新的 v3 中不可用。我正在尝试创建一个签名的 url 以从存储桶中获取一个对象。
为方便起见,代码添加如下:
const { S3, GetObjectCommand } = require("@aws-sdk/client-s3"); // 1.0.0-gamma.2 version
const { S3RequestPresigner } = require("@aws-sdk/s3-request-presigner"); // 0.1.0-preview.2 version
const { createRequest } = require("@aws-sdk/util-create-request"); // 0.1.0-preview.2 version
const { formatUrl } = require("@aws-sdk/util-format-url"); // 0.1.0-preview.1 //version
const fetch = require("node-fetch");
(async () => {
try {
const region = "us-east-1";
const Bucket = `SOME_BUCKET_NAME`;
const Key = `SOME_KEY_VALUE`;
const credentials = {
accessKeyId: ACCESS_KEY_HERE,
secretAccessKey: SECRET_KEY_HERE,
sessionToken: SESSION_TOKEN_HERE …Run Code Online (Sandbox Code Playgroud) 为了完成 SES 域验证,我需要做两件事:
一切都可以像往常一样通过 API 完成(我通过CloudFormation 自定义资源使用 SES API )。
我正在尝试使用AWS.SESV2 (2019)验证域并创建 DKIM 。
问题在于AWS.SESV2.createEmailIdentity创建域验证码和 DKIM。
但是我无法从 API 响应中取回域验证码...我可以在 API 响应中找到 3 个 DKIM 令牌,但我无法获取验证令牌,尽管它已创建并且在 AWS 控制台中可见.
我需要从 API 调用中获取域验证令牌,因为我正在执行 IaaC。我不希望从 AWS 控制台进行任何手动复制/粘贴。
我可以在下面的文档中看到 DKIM 令牌,但已创建的域验证令牌在哪里?
我也很难理解AWS.SES (2010) 和AWS.SESV2 (2019)之间的区别。使用这 2 个 API 可以完成所有事情吗?哪一个用于什么用例?
看起来域验证可以使用AWS.SES.verifyDomainIdentity完成,但AWS.SESV2中没有类似的内容。
但是 DKIM 可以使用AWS.SES.verifyDomainDkim和AWS.SESV2使用这两个接口来完成。创建电子邮件身份。
我正在尝试使用这两个 API …
在 React Native 中使用适用于 JavaScript v3 的 AWS 开发工具包中的 SNS 服务
当我尝试创建端点(或通过 AWS 执行任何命令)时,出现此错误URL.hostname is not implemented
region在创建客户端时从参数中删除。Region is missing然后它在同一个地方出错。但值得注意的是,如果我只是asdf123为区域传递无意义的 (),它会产生相同的 URL.hostname 错误import { CognitoIdentityClient } from "@aws-sdk/client-cognito-identity";
import { fromCognitoIdentityPool } from "@aws-sdk/credential-provider-cognito-identity";
import { SNSClient, CreatePlatformEndpointCommand } from "@aws-sdk/client-sns";
const region = 'us-west-2'
const sns = new SNSClient({
region: region,
credentials: fromCognitoIdentityPool({
client: new CognitoIdentityClient({ region }),
identityPoolId: identityPoolId,
}) /// doesn't matter whether I pass credentials or not, …Run Code Online (Sandbox Code Playgroud) 我正在将使用 AWS S3 SDK v2 的库转换为 v3。
我的库是另一个库的接口的实现。另一个库提供抽象文件存储的接口(例如,在本地文件系统或云中存储)。
目前我有这个功能(v2 SDK):
public async getFileStream(filename: string): Promise<Readable> {
return this.s3.getObject({
Bucket: this.bucket,
Key: filename,
})
.createReadStream();
}
Run Code Online (Sandbox Code Playgroud)
新的 v3 SDK 不再有createReadStream。我检查了互联网上的各个网站,他们都建议使用.Body.transformToWebStream().pipe. 我不能这样做,因为我需要返回Readable.
我尝试这样做(v3 SDK):
import { Readable } from 'node:stream';
public async getFileStream(filename: string): Promise<Readable> {
return Readable.fromWeb(
(await this.s3.getObject({
Bucket: this.bucket,
Key: filename,
})
).Body.transformToWebStream()
);
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Argument of type 'ReadableStream<any>' is not assignable to parameter of type 'import("stream/web").ReadableStream<any>'.
Type 'ReadableStream<any>' is missing the …Run Code Online (Sandbox Code Playgroud) 我使用 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 设置超时?
在旧版本的 javascript 中,我使用 ManagedUpload 函数将大文件上传到 s3,它将进行排队并管理文件的多部分。但在 V3 中,这个函数在文档中没有任何地方,是被删除了吗?或者还有其他选择吗?请帮忙...
我无法使用 aws4fetch 调用 AWS Api。
有人能给我一个如何使用 cloudflare 工作人员调用 S3 putobject 的示例吗?
aws-sdk-js ×10
aws-sdk ×4
amazon-s3 ×3
node.js ×2
amazon-ses ×1
asynchronous ×1
aws-lambda ×1
node-streams ×1
react-native ×1
typescript ×1