我想使用aws-java-sdk在我的Java应用程序中调用AWS Lambda函数。当
如下面的代码。
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/
我想知道;
我想使用aws-java-sdk在我的Java应用程序中调用AWS Lambda函数。当在aws中给出访问密钥和安全密钥时,可能会在...中给出ARN和有效载荷。...]
正确的方法是,
将具有lambda调用策略的instance profile附加到ec2实例。然后使用Aws sdk而不显式指定任何ak / sk。 SDK可以正确地从元数据中获取临时令牌。