View a markdown version of this page

SelfManagedKafka - AWS Serverless Application Model

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

SelfManagedKafka

描述SelfManagedKafka事件來源類型的物件。如需詳細資訊,請參閱《 AWS Lambda 開發人員指南》中的使用 AWS Lambda 搭配自我管理的 Apache Kafka。

AWS Serverless Application Model (AWS SAM) 會在設定此事件類型時產生 AWS::Lambda::EventSourceMapping 資源。

若要使用結構描述登錄檔,您需要定義函數的特定 IAM 角色許可。如需所需組態的範例,請參閱使用 IAM 角色完成設定。

語法

若要在 AWS SAM 範本中宣告此實體,請使用下列語法。

Properties

BatchSize

Lambda 從串流提取並傳送至函數的每個批次中的記錄數目上限。

類型:整數

必要:否

預設值:100

CloudFormation 相容性:此屬性會直接傳遞至 AWS::Lambda::EventSourceMapping 資源的 BatchSize 屬性。

下限:1

上限:10000

BisectBatchOnFunctionError

如果函數傳回錯誤,請將批次分割為兩個,然後重試。

類型:布林值

必要:否

CloudFormation 相容性:此屬性會直接傳遞至 AWS::Lambda::EventSourceMapping 資源的 BisectBatchOnFunctionError 屬性。

ConsumerGroupId

設定如何從 Kafka 主題讀取事件的字串。

類型:字串

必要:否

CloudFormation 相容性:此屬性會直接傳遞至 AWS::Lambda::EventSourceMapping 資源的 SelfManagedKafkaEventSourceConfig 屬性。

DestinationConfig

組態物件,指定在 Lambda 處理過後事件的目標。

使用此屬性可指定從自我管理 Kafka 事件來源呼叫失敗的目的地。

類型:DestinationConfig

必要:否

CloudFormation 相容性:此屬性會直接傳遞至 AWS::Lambda::EventSourceMapping 資源的 DestinationConfig 屬性。

Enabled

停用事件來源映射以暫停輪詢和叫用。

類型:布林值

必要:否

CloudFormation 相容性:此屬性會直接傳遞至 AWS::Lambda::EventSourceMapping 資源的 Enabled 屬性。

FilterCriteria

定義判斷 Lambda 是否應處理事件之條件的物件。如需詳細資訊,請參閱《 AWS Lambda 開發人員指南》中的AWS Lambda 事件篩選。

類型:FilterCriteria

必要:否

CloudFormation 相容性:此屬性會直接傳遞至 AWS::Lambda::EventSourceMapping 資源的 FilterCriteria 屬性。

KafkaBootstrapServers

Kafka 代理程式的引導伺服器清單。包含連接埠,例如 broker.example.com:xxxx

類型:清單

必要:否

CloudFormation 相容性:此屬性對 是唯一的 AWS SAM ,並且沒有 CloudFormation 同等屬性。

FunctionResponseTypes

目前套用至事件來源映射的回應類型清單。如需詳細資訊,請參閱《AWS Lambda 開發人員指南》中的報告批次項目失敗。

有效值:ReportBatchItemFailures

類型:清單

必要:否

CloudFormation 相容性:此屬性會直接傳遞至 AWS::Lambda::EventSourceMapping 資源的 FunctionResponseTypes 屬性。

KmsKeyArn

金鑰的 Amazon Resource Name (ARN),用於加密與此事件相關的資訊。

類型:字串

必要:否

CloudFormation 相容性:此屬性會直接傳遞至 AWS::Lambda::EventSourceMapping 資源的 KmsKeyArn 屬性。

LoggingConfig

事件來源的記錄組態。

類型︰LoggingConfig

必要:否

CloudFormation 相容性:此屬性會直接傳遞至 AWS::Lambda::EventSourceMapping 資源的 LoggingConfig 屬性。

MaximumRecordAgeInSeconds

Lambda 傳送給函數進行處理的記錄最長存留期。

類型:整數

必要:否

CloudFormation 相容性:此屬性會直接傳遞至 AWS::Lambda::EventSourceMapping 資源的 MaximumRecordAgeInSeconds 屬性。

MetricsConfig

事件來源的指標組態。

類型:MetricsConfig

必要:否

CloudFormation 相容性:此屬性會直接傳遞至 AWS::Lambda::EventSourceMapping 資源的 MetricsConfig 屬性。

MaximumRetryAttempts

當函數傳回錯誤時,重試的次數上限。

類型:整數

必要:否

CloudFormation 相容性:此屬性會直接傳遞至 AWS::Lambda::EventSourceMapping 資源的 MaximumRetryAttempts 屬性。

ProvisionedPollerConfig

用於增加用於計算事件來源映射之輪詢器數量的組態。此組態允許最少 1 個輪詢器,最多 2000 個輪詢器。如需範例,請參閱 ProvisionedPollerConfig 範例

類型:ProvisionedPollerConfig

必要:否

CloudFormation 相容性:此屬性會直接傳遞至 AWS::Lambda::EventSourceMapping 資源的 ProvisionedPollerConfig 屬性。

SchemaRegistryConfig

搭配自我管理 Kafka 事件來源使用結構描述登錄檔的組態。

注意

此功能ProvisionedPollerConfig需要設定。

類型: SchemaRegistryConfig

必要:否

CloudFormation 相容性:此屬性會直接傳遞至 AWS::Lambda::EventSourceMapping 資源的 SelfManagedKafkaEventSourceConfig 屬性。

SourceAccessConfigurations

驗證通訊協定、VPC 元件和 OAuth 2.0 中繼資料的陣列,可保護和定義您的事件來源。每個項目都是具有Type欄位的物件,對於大多數類型而言,則為URI欄位。如需類型的完整清單和每個類型URI所需的值,請參閱AWS CloudFormation 《 使用者指南》中的 SourceAccessConfiguration。

AWS SAM 在將此屬性傳遞至 Lambda 之前, 會套用下列驗證:

  • 您必須指定一個以上的身分驗證類型。如果您指定一個以上的身分驗證類型, 會 AWS SAM 傳回錯誤。

  • 您必須指定 VPC_SUBNET和 VPC_SECURITY_GROUP together。如果您指定一個沒有另一個的錯誤,則 AWS SAM 會傳回錯誤。

  • 您必須為除 IAM_AUTH和 以外的每種類型指定URI一個值IAM_OAUTHBEARER_AUTH,這不需要 URI。 只會 AWS SAM 檢查該值是否存在,並在不解譯它的情況下通過它。當您部署時,Lambda 會驗證 值和類型組合。

AWS SAM 會為您指定的每個秘密 ARN 新增secretsmanager:GetSecretValue許可,包括SERVER_ROOT_CA_CERTIFICATE秘密,以及 Lambda 在您指定 VPC 項目時所需的 Amazon EC2 網路介面許可。對於 IAM_AUTH和 IAM_OAUTHBEARER_AUTH, 不會 AWS SAM 新增叢集或字符許可。自行將這些許可授予函數的執行角色。當這些都不適用時,例如IAM_AUTH沒有 VPC 項目時, 不會將內嵌政策 AWS SAM 新增至執行角色。如需所需許可,請參閱《 AWS 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 清單

必要:是

CloudFormation 相容性:此屬性會直接傳遞至 AWS::Lambda::EventSourceMapping 資源的 SourceAccessConfigurations 屬性。

StartingPosition

要從中開始讀取的串流位置。

  • AT_TIMESTAMP – 指定從中開始讀取記錄的時間。

  • LATEST – 唯讀新記錄。

  • TRIM_HORIZON – 處理所有可用的記錄。

有效值:AT_TIMESTAMP | LATEST | TRIM_HORIZON

類型:字串

必要:否

CloudFormation 相容性:此屬性會直接傳遞至 AWS::Lambda::EventSourceMapping 資源的 StartingPosition 屬性。

StartingPositionTimestamp

開始讀取的時間,以 Unix 時間秒為單位。定義 StartingPositionTimestamp StartingPosition 何時指定為 AT_TIMESTAMP。

類型:Double

必要:否

CloudFormation 相容性:此屬性會直接傳遞至 AWS::Lambda::EventSourceMapping 資源的 StartingPositionTimestamp 屬性。

Topics

Kafka 主題名稱。

類型:清單

必要:是

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

自我管理的 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

使用 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

使用 IAM 身分驗證的自我管理 Kafka 事件來源

下列範例使用 IAM 進行身分驗證。IAM_AUTH 項目不需要URI任何欄位,因為 Lambda 會使用函數執行角色的登入資料來簽署每個連線。將 Lambda 所需的叢集許可授予您的執行角色,因為 AWS 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

使用 IAM 和 OAuth 2.0 身分驗證的自我管理 Kafka 事件來源

下列範例使用 驗證 IAM_OAUTHBEARER_AUTH。此項目不需要URI任何欄位,但您必須將其與項目配對,而該OAUTHBEARER_AUDIENCE項目URI是代理程式預期的對象。Lambda 請求執行角色的短期 Web 身分字符,需要 sts:GetWebIdentityToken許可,且您的代理程式必須信任 AWS 發行者並接受對象值。

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

具有 AWS Glue 結構描述登錄檔的自我管理 Kafka 事件來源

以下是使用 AWS 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

具有 Confluent Schema Registry 的自我管理 Kafka 事件來源

以下是使用 Confluent Schema Registry 設定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