amazon-web-services - 当 JAVA 应用程序托管在 AWS EC2 实例中时,获取凭证提供程序以调用 AWS Lambda 函数

标签 amazon-web-services amazon-ec2 aws-lambda aws-sdk amazon-iam

我想使用 aws-java-sdk 在我的 java 应用程序中调用 AWS Lambda 函数。当

  1. 访问 key 和安全 key 在 awsCredentials 中给出
  2. ARN 和 payload 在 invokeRequest 中给出

如以下代码所示。

BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);

AWSStaticCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(awsCredentials);

AWSLambda awsLambda = AWSLambdaClientBuilder.standard()
        .withCredentials(credentialsProvider)
        .build();

InvokeRequest invokeRequest = new InvokeRequest()
        .withFunctionName(resourceName)
        .withPayload(payload)
        .withInvocationType(InvocationType.RequestResponse);

InvokeResult invokeResult = awsLambda.invoke(invokeRequest);

根据 AWS 文档 https://docs.aws.amazon.com/sdk-for-java/v2/developer-guide/java-dg-roles.html ,如果我的 java 应用程序托管在 Amazon EC2 实例中,则从 Amazon EC2 实例授予对 AWS 资源的安全访问权限比手动输入访问 key 更方便。为了尝试,我在 EC2 实例中托管的 Java 应用程序中实现了以下修改后的代码。

InstanceProfileCredentialsProvider credentialsProvider = InstanceProfileCredentialsProvider.getInstance();

AWSLambda awsLambda = AWSLambdaClientBuilder.standard()
        .withCredentials(credentialsProvider)
        .build();

InvokeRequest invokeRequest = new InvokeRequest()
        .withFunctionName(resourceName)
        .withPayload(payload)
        .withInvocationType(InvocationType.RequestResponse);

InvokeResult invokeResult = awsLambda.invoke(invokeRequest);

但它返回以下错误

com.amazonaws.SdkClientException: The requested metadata is not found at http://169.254.169.254/latest/meta-data/iam/security-credentials/

我想知道;

  1. 我的生成凭据的方法是否正确
  2. 如果错了,正确的做法
  3. 错误信息的原因

最佳答案

正确的做法是,

附上 instance profile使用 lambda 调用 ec2 实例的策略。然后在不明确指定任何 ak/sk 的情况下使用 Aws sdk。 SDK 可以从元数据中正确获取临时 token 。

关于amazon-web-services - 当 JAVA 应用程序托管在 AWS EC2 实例中时,获取凭证提供程序以调用 AWS Lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58556028/

相关文章:

amazon-web-services - 通过 Cloudformation (yaml) 创建配置修复规则时出现错误

amazon-web-services - AWS 雅典娜错误 : INTERNAL_ERROR_QUERY_ENGINE on CREATE TABLE

amazon-web-services - 将行添加到文件的命令的 cloud-init runcmd syntx

python - Boto3 S3,按上次修改对桶进行排序

postgresql - 通过 aws 网络平衡器负载平衡 postgres 实例可能吗?

java - 403 - 列出 AWS EC2 实例上运行的服务上的对象时访问被拒绝

node.js - 使用 AWS 服务持续交付 NodeJS 应用程序

amazon-web-services - AWS VPC Lambda 网络问题

python - 如何使用 Zappa 从 Django lambda 部署将文件上传到 S3 存储桶?

amazon-web-services - 从 cloudformation 堆栈中检索 lambda 函数的 arn