【发布时间】:2020-02-21 15:49:11
【问题描述】:
我想使用 aws-java-sdk 在我的 java 应用程序中调用 AWS Lambda 函数。当
- 访问密钥和安全密钥在 awsCredentials 中给出
- ARN 和有效负载在 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 资源的安全访问权限比手动输入访问密钥更方便。为了尝试,我在 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/
我想知道;
- 我的方法是否适合生成凭据
- 如果错了,正确的做法
- 错误信息的原因
【问题讨论】:
-
您在使用 Amazon Linux 吗?
-
是的。 (ubuntu 18.04)
-
当您
ssh进入该 EC2 实例并运行curl http://169.254.169.254/latest/meta-data/iam/security-credentials/时会发生什么?您的代码是否在 EC2 实例的 docker 容器中运行? -
它返回
<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>404 - Not Found</title> </head> <body> <h1>404 - Not Found</h1> </body> </html>不,我没有使用 docker 容器
标签: amazon-web-services amazon-ec2 aws-lambda aws-sdk amazon-iam