【问题标题】:How to pass sqs queue URL to an lambda with cdk如何使用 cdk 将 sqs 队列 URL 传递给 lambda
【发布时间】: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


    【解决方案1】:

    看起来 lambda 代码是正确的,但我怀疑 SQS_URL 环境变量未定义。你可以登录它来验证。

    尝试对您的 CDK 代码进行此更改:

      userSimulationlambda.addEnvironment('SQS_URL', sqs.queueUrl);
    

    编辑好的,我是 CDK 的新手。看起来你在 userssimulationlambda 中多了一个 s。如果不是错误,它与您使用该术语的其他地方不一致。我仍然怀疑 ENV var 在 lambda 中未定义。记录它(在 lambda 中)以确定。如果您获得对 lambda 的“引用”(通过 Function.fromFunctionAttributes),您可以像您一样设置它的 env var,还是需要在实际创建函数的地方这样做?

    【讨论】:

    猜你喜欢
    • 2023-01-04
    • 2021-06-24
    • 2018-02-13
    • 2021-08-04
    • 2019-06-21
    • 1970-01-01
    • 2017-02-03
    • 2016-12-07
    • 2022-01-07
    相关资源
    最近更新 更多