lambda sink 连接器没有选择我的 ubuntu ec2 实例中的 AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY 值

Posted

技术标签:

【中文标题】lambda sink 连接器没有选择我的 ubuntu ec2 实例中的 AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY 值【英文标题】:lambda sink connector doesn't picks the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY values in my ubuntu ec2 instance 【发布时间】:2020-10-09 14:14:15 【问题描述】:

我正在尝试将我的 kafka 主题数据推送到带有 nordstrom lambda sink 连接器的 aws lambda 函数,在将 aws 凭据设置为环境变量后,连接器仍然显示以下错误

将 AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY 值导出为

export AWS_ACCESS_KEY_ID=XXXXXXXXXX 
export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXX

我的 connector.json 配置:

  
    "name": "example-lambda-connector",
    "config": 
      "tasks.max": "1",
      "connector.class": "com.nordstrom.kafka.connect.lambda.LambdaSinkConnector",
      "topics": "example-stream",
      "key.converter": "org.apache.kafka.connect.storage.StringConverter",
      "value.converter": "org.apache.kafka.connect.storage.StringConverter",
      "aws.region": "ap-south-1",
      "aws.lambda.function.arn": "arn:aws:lambda:ap-south-1:111111111:function:example-function",
      "aws.lambda.invocation.timeout.ms": "60000",
      "aws.lambda.invocation.mode": "SYNC",
      "aws.lambda.batch.enabled": "false"
      
     

得到以下错误:

原因:java.util.concurrent.ExecutionException:com.amazonaws.SdkClientException:无法从链中的任何提供商加载 AWS 凭证:[EnvironmentVariableCredentialsProvider:无法从环境变量(AWS_ACCESS_KEY_ID(或 AWS_ACCESS_KEY)和AWS_SECRET_KEY(或 AWS_SECRET_ACCESS_KEY)),SystemPropertiesCredentialsProvider:无法从 Java 系统属性(aws.accessKeyId 和 aws.secretKey)加载 AWS 凭证,com.amazonaws.auth.profile.ProfileCredentialsProvider@503af16e:配置文件不能为空,WebIdentityTokenCredentialsProvider:您必须为 roleArn 和 roleSessionName 指定一个值,com.amazonaws.auth.EC2ContainerCredentialsProviderWrapper@76a59f2c:在http://169.254.169.254/latest/meta-data/iam/security-credentials/] 找不到请求的元数据

【问题讨论】:

【参考方案1】:

您可以添加以下配置:

 ...
"aws.credentials.provider.class": "com.amazonaws.auth.DefaultAWSCredentialsProviderChain",
...

有关 DefaultAWSCredentialsProviderChain 的说明,请参阅 AWS 文档:https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/DefaultAWSCredentialsProviderChain.html

在此中查找凭证的 AWS 凭证提供程序链 顺序:

环境变量 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY(推荐,因为它们可以被除 .NET 之外的所有 AWS 开发工具包和 CLI 识别),或 AWS_ACCESS_KEY 和 AWS_SECRET_KEY(只能被 Java 开发工具包识别) Java 系统属性 - aws.accessKeyId 和 aws.secretKey 来自环境或容器的 Web 身份令牌凭据 所有 AWS 开发工具包和 AWS CLI 共享的默认位置 (~/.aws/credentials) 中的凭证配置文件 如果设置了 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 环境变量并且安全管理员有权访问该变量,则通过 Amazon EC2 容器服务交付的凭证, 通过 Amazon EC2 元数据服务交付的实例配置文件凭证

【讨论】:

以上是关于lambda sink 连接器没有选择我的 ubuntu ec2 实例中的 AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY 值的主要内容,如果未能解决你的问题,请参考以下文章

Kafka Connect S3 sink 连接器与自定义 Partitioner 奇怪行为

Lambda 上的 MySQL 连接器产生无法导入模块“myapp”:没有名为“mysql”的模块

Confluent Kafka Connect MySQL Sink Connector 的开源替代方案?

Kafka HDFS Sink Connector Protobuf 未写入

具有一对多连接的 Kafka Sink 连接器

无法将 Kafka 与 InfluxDB Sink Connector 连接