gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 07:17:57 28 4
gpt4 key购买 nike

我想使用 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com