View a markdown version of this page

SelfManagedKafka - Amazon Serverless Application Model
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

SelfManagedKafka

描述 SelfManagedKafka 事件源类型的对象。有关更多信息,请参阅《开发人员指南》中的Amazon Lambda 与自行管理的 Apache Kafka 配合使用。Amazon Lambda

Amazon Serverless Application Model (Amazon SAM) 在设置此事件类型时生成AWS::Lambda::EventSourceMapping资源。

要使用架构注册表,您需要为函数定义特定的 IAM 角色权限。有关所需配置的示例,请参阅使用 IAM 角色完成设置。

语法

要在 Amazon SAM 模板中声明此实体,请使用以下语法。

Properties

BatchSize

Lambda 从流中提取并发送到函数的每个批处理中的最大记录数。

类型:整数

必需:否

默认值:100

Amazon CloudFormation 兼容性:此属性直接传递给AWS::Lambda::EventSourceMapping资源的BatchSize属性。

最小值:1

最大值:10000

BisectBatchOnFunctionError

如果函数返回错误,则将批次拆分为两批并重试。

类型:布尔值

必需:否

Amazon CloudFormation 兼容性:此属性直接传递给AWS::Lambda::EventSourceMapping资源的BisectBatchOnFunctionError属性。

ConsumerGroupId

用于配置如何从 Kafka 主题中读取事件的字符串。

类型:字符串

必需:否

Amazon CloudFormation 兼容性:此属性直接传递给AWS::Lambda::EventSourceMapping资源的SelfManagedKafkaEventSourceConfig属性。

DestinationConfig

一个配置对象,用于在 Lambda 处理事件后指定事件目的地。

使用此属性指定来自管理 Kafka 事件源的失败调用的目的地。

类型:DestinationConfig

必需:否

Amazon CloudFormation 兼容性:此属性直接传递给AWS::Lambda::EventSourceMapping资源的 DestinationConfig属性。

Enabled

禁用事件源映射以暂停轮询和调用。

类型:布尔值

必需:否

Amazon CloudFormation 兼容性:此属性直接传递给AWS::Lambda::EventSourceMapping资源的Enabled属性。

FilterCriteria

定义用于确定 Lambda 是否应处理事件的条件的对象。有关更多信息,请参阅《Amazon Lambda 开发人员指南》中的 Amazon Lambda 事件筛选。

类型:FilterCriteria

必需:否

Amazon CloudFormation 兼容性:此属性直接传递给AWS::Lambda::EventSourceMapping资源的FilterCriteria属性。

KafkaBootstrapServers

Kafka 代理的引导服务器列表。包括端口,例如 broker.example.com:xxxx

类型:列表

必需:否

Amazon CloudFormation 兼容性:此属性是独有的 Amazon SAM ,没有 Amazon CloudFormation 等效属性。

FunctionResponseTypes

当前应用于事件源映射的响应类型的列表。有关详细信息,请参阅《Amazon Lambda 开发人员指南》中的报告批处理项目失败。

有效值:ReportBatchItemFailures

类型:列表

必需:否

Amazon CloudFormation 兼容性:此属性直接传递给AWS::Lambda::EventSourceMapping资源的FunctionResponseTypes属性。

KmsKeyArn

用于加密与此事件相关信息的密钥的 Amazon 资源名称(ARN)。

类型:字符串

必需:否

Amazon CloudFormation 兼容性:此属性直接传递给AWS::Lambda::EventSourceMapping资源的KmsKeyArn属性。

LoggingConfig

您的事件源的日志配置。

类型:LoggingConfig

必需:否

Amazon CloudFormation 兼容性:此属性直接传递给AWS::Lambda::EventSourceMapping资源的LoggingConfig属性。

MaximumRecordAgeInSeconds

Lambda 发送到函数以进行处理的记录的最长期限。

类型:整数

必需:否

Amazon CloudFormation 兼容性:此属性直接传递给AWS::Lambda::EventSourceMapping资源的MaximumRecordAgeInSeconds属性。

MetricsConfig

您的事件源的指标配置。

类型:MetricsConfig

必需:否

Amazon CloudFormation 兼容性:此属性直接传递给AWS::Lambda::EventSourceMapping资源的MetricsConfig属性。

MaximumRetryAttempts

在函数返回错误时重试的最大次数。

类型:整数

必需:否

Amazon CloudFormation 兼容性:此属性直接传递给AWS::Lambda::EventSourceMapping资源的MaximumRetryAttempts属性。

ProvisionedPollerConfig

用于增加计算事件源映射所使用的轮询器数量的配置。此配置允许最少 1 个轮询器和最多 2000 个轮询器。有关具体示例,请参阅 ProvisionedPollerConfig 示例。

类型:ProvisionedPollerConfig

必需:否

Amazon CloudFormation 兼容性:此属性直接传递给AWS::Lambda::EventSourceMapping资源的ProvisionedPollerConfig属性。

SchemaRegistryConfig

将架构注册表与自托管 Kafka 事件源配合使用的配置。

注意

此功能需要配置 ProvisionedPollerConfig。

类型:SchemaRegistryConfig

必需:否

Amazon CloudFormation 兼容性:此属性直接传递给AWS::Lambda::EventSourceMapping资源的SelfManagedKafkaEventSourceConfig属性。

SourceAccessConfigurations

一系列身份验证协议、VPC 组件和 OAuth 2.0 元数据,用于保护和定义您的事件源。每个条目都是一个带有Type字段的对象,对于大多数类型,还有一个URI字段。有关类型的完整列表以及每种类型的URI值,请参阅SourceAccessConfiguration《Amazon CloudFormation 用户指南》。

Amazon SAM 在将此属性传递给 Lambda 之前应用以下验证:

  • 您只能指定一种身份验证类型。 Amazon SAM 如果指定多个错误,则返回错误。

  • 必须VPC_SECURITY_GROUP同时指定 VPC_SUBNET and。 Amazon SAM 如果指定一个而不指定另一个,则返回错误。

  • 必须为除IAM_AUTH和之外的每种类型指定一个URI值IAM_OAUTHBEARER_AUTH,后者使用 no URI。 Amazon SAM 仅检查该值是否存在,并在不对其进行解释的情况下将其传递。Lambda 会在您部署时验证值和类型组合。

Amazon SAM 为您指定的每个秘密 ARN 添加secretsmanager:GetSecretValue权限,包括密钥以及 Lambda 在SERVER_ROOT_CA_CERTIFICATE指定 VPC 条目时所需的 Amazon EC2 网络接口权限。对于IAM_AUTH和IAM_OAUTHBEARER_AUTH,不 Amazon SAM 添加任何集群或令牌权限。自己将这些权限授予函数的执行角色。当这些都IAM_AUTH不适用时(例如没有 VPC 条目),则不会向执行角色 Amazon SAM 添加任何内联策略。有关所需权限,请参阅Amazon Lambda 开发人员指南中的在 Lambda 中配置集群身份验证方法。

有效值:BASIC_AUTH | CLIENT_CERTIFICATE_TLS_AUTH | IAM_AUTH | IAM_OAUTHBEARER_AUTH | OAUTHBEARER_AUDIENCE | OAUTHBEARER_AUTH | OAUTHBEARER_IDENTITY_POOL | OAUTHBEARER_LOGICAL_CLUSTER | OAUTHBEARER_SCOPE | SASL_SCRAM_256_AUTH | SASL_SCRAM_512_AUTH | SERVER_ROOT_CA_CERTIFICATE | VPC_SECURITY_GROUP | VPC_SUBNET

类型:SourceAccessConfiguration 列表

是否必需:是

Amazon CloudFormation 兼容性:此属性直接传递给AWS::Lambda::EventSourceMapping资源的SourceAccessConfigurations属性。

StartingPosition

在流中开始读取数据的位置。

  • AT_TIMESTAMP – 指定开始读取记录的时间。

  • LATEST - 仅读取新记录。

  • TRIM_HORIZON - 处理所有可用的记录。

有效值:AT_TIMESTAMP | LATEST | TRIM_HORIZON

类型:字符串

必需:否

Amazon CloudFormation 兼容性:此属性直接传递给AWS::Lambda::EventSourceMapping资源的StartingPosition属性。

StartingPositionTimestamp

开始读取的时间(以 Unix 时间秒为单位) 在 StartingPosition 被指定为 AT_TIMESTAMP 的情况下定义 StartingPositionTimestamp。

类型:双精度

必需:否

Amazon CloudFormation 兼容性:此属性直接传递给AWS::Lambda::EventSourceMapping资源的StartingPositionTimestamp属性。

Topics

Kafka 主题的名称。

类型:列表

是否必需:是

Amazon CloudFormation 兼容性:此属性直接传递给AWS::Lambda::EventSourceMapping资源的Topics属性。

示例

通过 IAM 角色完成设置

以下示例展示了完整的配置,包括使用架构注册表所需的 IAM 角色配置:

Parameters: PreCreatedSubnetOne: Type: String PreCreatedSubnetTwo: Type: String Resources: MyLambdaExecutionRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Action: [sts:AssumeRole] Effect: Allow Principal: Service: [lambda.amazonaws.com] Policies: - PolicyName: KafkaAuthPolicy PolicyDocument: Statement: - Action: [secretsmanager:GetSecretValue, kms:Decrypt] Effect: "Allow" Resource: ['arn:aws:secretsmanager:us-west-2:123456789012:secret:kafkaSecret-******', 'arn:aws:kms:us-west-2:123456789012:key/keyId'] - PolicyName: ENIPolicy PolicyDocument: Statement: - Action: [ec2:CreateNetworkInterface, ec2:DescribeNetworkInterfaces, ec2:DescribeVpcs, ec2:DeleteNetworkInterface, ec2:DescribeSubnets, ec2:DescribeSecurityGroups] Effect: Allow Resource: '*' - PolicyName: SchemaRegistryPolicy PolicyDocument: Statement: - Action: [glue:GetRegistry] Effect: Allow Resource: 'arn:aws:glue:{region}:{account-id}:registry/{registry-name}' - PolicyName: SchemaVersionsPolicy PolicyDocument: Statement: - Action: [glue:GetSchemaVersions] Effect: Allow Resource: '*' ManagedPolicyArns: - !Sub arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole Tags: - {Value: SAM, Key: lambda:createdBy} MyKafkaProcessor: Type: AWS::Serverless::Function Properties: Runtime: nodejs18.x Handler: index.handler CodeUri: ${codeuri} Role: Fn::GetAtt: [MyLambdaExecutionRole, Arn] Events: SelfManagedKafkaEvent: Type: SelfManagedKafka Properties: KafkaBootstrapServers: - my-kafka-broker-1:9092 - my-kafka-broker-2:9092 Topics: - SchemaRegistryTestTopic StartingPosition: LATEST SourceAccessConfigurations: - Type: VPC_SUBNET URI: subnet:subnet-12345678 - Type: VPC_SECURITY_GROUP URI: security_group:sg-12345678 - Type: BASIC_AUTH URI: !Sub arn:${AWS::Partition}:secretsmanager:us-west-2:123456789012:secret:my-path/my-secret-name-1a2b3c ProvisionedPollerConfig: MinimumPollers: 1 SchemaRegistryConfig: AccessConfigs: - Type: BASIC_AUTH URI: !Sub arn:${AWS::Partition}:secretsmanager:us-west-2:123456789012:secret:my-path/my-secret-name-1a2b3c SchemaValidationConfigs: - Attribute: KEY EventRecordFormat: JSON SchemaRegistryURI: !Sub arn:${AWS::Partition}:glue:us-west-2:123456789012:registry/myregistry

ProvisionedPollerConfig 示例

ProvisionedPollerConfig: MinimumPollers: 1 MaximumPollers: 200

Self-managed Kafka 事件源

以下是 SelfManagedKafka 事件源类型的示例。

YAML

Events: SelfManagedKafkaEvent: Type: SelfManagedKafka Properties: BatchSize: 1000 Enabled: true KafkaBootstrapServers: - abc.xyz.com:xxxx SourceAccessConfigurations: - Type: BASIC_AUTH URI: arn:aws:secretsmanager:us-west-2:123456789012:secret:my-path/my-secret-name-1a2b3c Topics: - MyKafkaTopic

Self-managed 采用 OAuth 2.0 身份验证的 Kafka 事件源

以下示例使用进行 SASL/OAUTHBEARER身份验证。OAUTHBEARER_AUTH入口指向持有 OAuth 2.0 凭证的密钥,每个元数据条目都带有一个字面值,Lambda 会将其传递给您的一个或多个身份提供商。

Events: SelfManagedKafkaEvent: Type: SelfManagedKafka Properties: KafkaBootstrapServers: - abc.xyz.com:9092 Topics: - MyKafkaTopic StartingPosition: LATEST ConsumerGroupId: consumergroup1 SourceAccessConfigurations: - Type: OAUTHBEARER_AUTH URI: arn:aws:secretsmanager:us-west-2:123456789012:secret:my-path/my-oauth-secret-1a2b3c - Type: OAUTHBEARER_SCOPE URI: read write - Type: OAUTHBEARER_AUDIENCE URI: https://api.example.com - Type: SERVER_ROOT_CA_CERTIFICATE URI: arn:aws:secretsmanager:us-west-2:123456789012:secret:my-path/my-server-root-ca-cert-7p8q9r - Type: VPC_SUBNET URI: subnet:subnet-12345678 - Type: VPC_SECURITY_GROUP URI: security_group:sg-12345678

Self-managed 采用 IAM 身份验证的 Kafka 事件源

以下示例使用 IAM 进行身份验证。该IAM_AUTH条目不带任何URI字段,因为 Lambda 使用函数执行角色的凭证对每个连接进行签名。向您的执行角色授予 Lambda 所需的集群权限,因为 Amazon SAM 不会添加这些权限。

Events: SelfManagedKafkaEvent: Type: SelfManagedKafka Properties: KafkaBootstrapServers: - abc.xyz.com:9092 Topics: - MyKafkaTopic StartingPosition: LATEST ConsumerGroupId: consumergroup1 SourceAccessConfigurations: - Type: IAM_AUTH - Type: VPC_SUBNET URI: subnet:subnet-12345678 - Type: VPC_SECURITY_GROUP URI: security_group:sg-12345678

Self-managed 采用 IAM 和 OAuth 2.0 身份验证的 Kafka 事件源

以下示例使用进行IAM_OAUTHBEARER_AUTH身份验证。此条目不包含任何URI字段,但您必须将其与经纪人URI所期望的受众群体配对。OAUTHBEARER_AUDIENCELambda 为执行角色请求一个短期的 Web 身份令牌,该令牌需要sts:GetWebIdentityToken许可,并且您的经纪人必须信任 Amazon 发行者并接受受众价值。

Events: SelfManagedKafkaEvent: Type: SelfManagedKafka Properties: KafkaBootstrapServers: - abc.xyz.com:9092 Topics: - MyKafkaTopic StartingPosition: LATEST ConsumerGroupId: consumergroup1 SourceAccessConfigurations: - Type: IAM_OAUTHBEARER_AUTH - Type: OAUTHBEARER_AUDIENCE URI: kafka-cluster - Type: VPC_SUBNET URI: subnet:subnet-12345678 - Type: VPC_SECURITY_GROUP URI: security_group:sg-12345678

Self-managed 带有 Kafka 事件源 Amazon Glue 架构注册表

以下是使用 Amazon Glue 架构注册表配置SelfManagedKafka的事件源类型的示例。

Events: SelfManagedKafkaEvent: Type: SelfManagedKafka Properties: KafkaBootstrapServers: - abc.xyz.com:9092 Topics: - SchemaRegistryTestTopic StartingPosition: LATEST ProvisionedPollerConfig: MinimumPollers: 1 SchemaRegistryConfig: SchemaRegistryURI: !Sub arn:${AWS::Partition}:glue:us-west-2:123456789012:registry/myregistry EventRecordFormat: JSON SchemaValidationConfigs: - Attribute: KEY - Attribute: VALUE SourceAccessConfigurations: - Type: VPC_SUBNET URI: subnet:subnet-12345678 - Type: VPC_SECURITY_GROUP URI: security_group:sg-12345678

Self-managed 带有 Confluent 架构注册表的 Kafka 事件源

以下是一个配置了 Confluent 架构注册表的 SelfManagedKafka 事件源类型的示例。

Events: SelfManagedKafkaEvent: Type: SelfManagedKafka Properties: KafkaBootstrapServers: - abc.xyz.com:9092 Topics: - SchemaRegistryTestTopic StartingPosition: LATEST ProvisionedPollerConfig: MinimumPollers: 1 SchemaRegistryConfig: SchemaRegistryURI: https://my-schema-registry.confluent.cloud AccessConfigs: - Type: BASIC_AUTH URI: !Sub arn:${AWS::Partition}:secretsmanager:us-west-2:123456789012:secret:my-secret EventRecordFormat: JSON SchemaValidationConfigs: - Attribute: KEY - Attribute: VALUE SourceAccessConfigurations: - Type: VPC_SUBNET URI: subnet:subnet-12345678 - Type: VPC_SECURITY_GROUP URI: security_group:sg-12345678 - Type: BASIC_AUTH URI: !Sub arn:${AWS::Partition}:secretsmanager:us-west-2:123456789012:secret:kafka-secret