You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AWS CDK栈中配置MSK凭证遇部署错误求助

问题:AWS CDK部署Lambda MSK触发器失败,报错Secret未关联集群

报错信息

10:55:25 AM | CREATE_FAILED        | AWS::Lambda::EventSourceMapping | QFDSKafkaEventSour...iltynotifyEFE73996
Resource handler returned message: "Invalid request provided: The secret provided in 'sourceAccessConfigurations' is not associated with cluster some-valid-an. Please provide a secret associated with the cluster. (Service: Lambda, Status Code: 400, Request ID: some-uuid )" (RequestToken: some-uuid, HandlerErrorCode: InvalidRequest)

问题背景

通过CDK搭建栈,已实现Lambda、Lambda层及基础触发器部署,但生产环境MSK集群需SCRAM凭证。Secrets Manager中已创建路径为integrations/msk/creds的scram-sha-512密钥,无法正确关联MSK集群,同时不清楚Secret()构造函数第二个参数的用途,导致部署失败。

现有CDK代码

#!/usr/bin/env python3
from aws_cdk import (
    aws_lambda as lambda_,
    App, Duration, Stack
)
from aws_cdk.aws_lambda_event_sources import ManagedKafkaEventSource
from aws_cdk.aws_secretsmanager import Secret

class ExternalRestEndpoint(Stack):

    def __init__(self, app: App, id: str) -> None:
        super().__init__(app, id)

        secret = Secret(self, "Secret", secret_name="integrations/msk/creds")

        msk_arn = "some valid and confirmed arn"

        # Lambda layer.
        lambdaLayer = lambda_.LayerVersion(self, 'lambda-layer',
            code = lambda_.AssetCode('utils/lambda-deployment-packages/lambda-layer.zip'),
            compatible_runtimes = [lambda_.Runtime.PYTHON_3_7],
        )  

        # Source for the lambda.
        with open("src/path/to/sourcefile.py", encoding="utf8") as fp:
            mysource_code = fp.read()

        # Config for it.
        lambdaFn = lambda_.Function(
            self, "QFDS",
            code=lambda_.InlineCode(mysource_code),
            handler="lambda_handler",
            timeout=Duration.seconds(300),
            runtime=lambda_.Runtime.PYTHON_3_7,
            layers=[lambdaLayer],
        )

        # Set up the event (managed Kafka). 
        lambdaFn.add_event_source(ManagedKafkaEventSource(
            cluster_arn=prototype_mks,
            topic="foreign.endpoint.availabilty.notify", 
            secret=secret,
            batch_size=100,                # default
            starting_position=lambda_.StartingPosition.TRIM_HORIZON
        ))

解决方案

1. 关联Secret与MSK集群

创建Secret后必须将其关联到目标MSK集群,这是报错的核心原因:

  • 控制台操作:进入MSK集群详情页 → 「安全」标签 → 「SCRAM凭证」→ 「添加凭证」,选择integrations/msk/creds密钥。
  • AWS CLI操作:执行以下命令直接关联:
    aws kafka associate-scram-secret --cluster-arn <你的MSK集群ARN> --secret-arns <你的Secret ARN>
    
  • 验证关联:执行命令确认密钥已关联:
    aws kafka list-scram-secrets --cluster-arn <你的MSK集群ARN>
    

2. 修正CDK代码中的笔误

代码中存在变量引用错误:

  • 将ManagedKafkaEventSource中的cluster_arn=prototype_mks替换为cluster_arn=msk_arn,因为prototype_mks未定义,实际已声明的MSK集群ARN变量是msk_arn。

3. 理解Secret()构造函数参数

Secret(self, "Secret", secret_name="integrations/msk/creds")中:

  • 第二个参数"Secret"是CDK栈内的资源逻辑ID,仅用于CDK内部标识该资源,与Secrets Manager中的密钥名称无关。
  • secret_name参数才是指定Secrets Manager中密钥的实际路径/名称。

4. 确认Lambda权限(可选)

CDK的ManagedKafkaEventSource会自动为Lambda执行角色添加访问该Secret的secretsmanager:GetSecretValue权限,若存在自定义权限策略,需确保该权限未被移除。


内容的提问来源于stack exchange,提问作者John O

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 12:45:24