【发布时间】:2023-02-26 04:43:42
【问题描述】:
const dependencies: AmplifyDependentResourcesAttributes =
AmplifyHelpers.addResourceDependency(
this,
amplifyResourceProps.category,
amplifyResourceProps.resourceName,
[
{
category: 'function',
resourceName: 'usersimulation',
},
{
category: 'function',
resourceName: 'marketprocessor',
}
]
)
const userSimulationLambdaArn = cdk.Fn.ref(
dependencies.function.usersimulation.Arn
)
const marketMessageProcessorArn = cdk.Fn.ref(
dependencies.function.marketprocessor.Arn
)
let sqs = new cdk.aws_sqs.Queue(this, 'sqs', {
queueName: 'sqs_queue_' + cdk.Fn.ref('env'),
})
let sqs_evensource = new cdk.aws_lambda_event_sources.SqsEventSource(sqs, {
batchSize: 5,
})
const userSimulationlambda = Function.fromFunctionAttributes(
this,
'userssimulationlambda',
{
functionArn: userSimulationLambdaArn,
role: new cdk.aws_iam.Role(this, 'role1', {
assumedBy: new cdk.aws_iam.ServicePrincipal('sqs.amazonaws.com'),
}),
}
)
const marketMessageProcessorLambda = Function.fromFunctionAttributes(
this,
'marketmessageprocessor',
{ functionArn: marketMessageProcessorArn, sameEnvironment: true }
)
userSimulationlambda.env['SQS_URL'] = sqs.queueUrl
我这里基本上是 2 个 lambda。
一个名为 usersimulation 的 lambda 将消息发送到 SQS 队列,marketmessageprocessor lambda 处理这些消息。
这里的问题是:
我实际上如何从 lambda usersimulation 发送消息?
我尝试将 QueueUrl 作为环境变量传递,但这不起作用。
我有尝试:
await sqs
.sendMessageBatch({
Entries: xmls.map((x, i) => ({
Id: `id_${i}_${Date.now()}`,
MessageBody: JSON.stringify(x),
})),
QueueUrl: process.env['SQS_URL']!,
})
.promise()
它未定义,它说:
MissingRequiredParameter:参数中缺少必需的键“QueueUrl”
将消息从 lambda 发送到 sqs 队列的最佳方式是什么?
我在这里使用 aws amplify,这两个函数都是用
amplify function add创建的
【问题讨论】:
标签: aws-lambda aws-cloudformation aws-amplify amazon-sqs aws-cdk