Amazon web services 当JAVA应用程序托管在AWS EC2实例中时,获取凭证提供程序以调用AWS Lambda函数
我想使用AWS java sdk在java应用程序中调用AWS Lambda函数。这是可能的Amazon web services 当JAVA应用程序托管在AWS EC2实例中时,获取凭证提供程序以调用AWS Lambda函数,amazon-web-services,amazon-ec2,aws-lambda,aws-sdk,amazon-iam,Amazon Web Services,Amazon Ec2,Aws Lambda,Aws Sdk,Amazon Iam,我想使用AWS java sdk在java应用程序中调用AWS Lambda函数。这是可能的 访问密钥和安全密钥在awsCredentials中给出 ARN和有效负载在invokeRequest中给出 如下代码所示 BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey); AWSStaticCredentialsProvider credentialsProvider = new AW
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文档,如果我的java应用程序托管在AmazonEC2实例中,那么从AmazonEC2实例授予对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/
我想知道
将with lambda调用策略附加到ec2实例。然后在不明确指定任何ak/sk的情况下使用Aws sdk。SDK可以从元数据中正确获取临时令牌。您使用的是Amazon Linux吗?是。(ubuntu 18.04)当你
ssh
进入EC2实例并运行curl时会发生什么http://169.254.169.254/latest/meta-data/iam/security-credentials/
?您的代码是否在EC2实例中的docker容器中运行?它返回404-Not Found 404-Not Found
No,我没有使用docker容器您能提供示例代码吗?我是否应该使用lambda invoke策略创建另一个IAM角色,尽管我仍然拥有lambda完全访问权限?元数据是通过创建那个角色来更新的吗?另外,下面的链接帮助我附加了一个实例概要文件。