Я хочу вызывать функции AWS Lambda в моем java-приложении, используя aws-java-sdk. Это было возможно, когда
- Ключ доступа и Ключ безопасности указаны в 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, более удобно предоставлять безопасный доступ к ресурсам AWS из экземпляра Amazon EC2, а не вводить ключи доступа вручную,Чтобы попробовать это, я реализовал следующий измененный код в своем java-приложении, размещенном в экземпляре EC2.
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/
Я хочу знать;
- правильный ли мой подход для генерации учетных данных
- , если неверный, правильный способ сделать это
- причина сообщения об ошибке