Получить провайдер учетных данных для вызова функций AWS Lambda, когда приложение JAVA размещено в экземпляре AWS EC2 - PullRequest
2 голосов
/ 25 октября 2019

Я хочу вызывать функции AWS Lambda в моем java-приложении, используя aws-java-sdk. Это было возможно, когда

  1. Ключ доступа и Ключ безопасности указаны в awsCredentials
  2. 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/

Я хочу знать;

  1. правильный ли мой подход для генерации учетных данных
  2. , если неверный, правильный способ сделать это
  3. причина сообщения об ошибке

1 Ответ

0 голосов
/ 25 октября 2019

Правильный подход:

Присоединение профиля экземпляра с политикой лямбда-вызова к экземпляру ec2. Затем с помощью Aws sdk без явного указания каких-либо ак / ск. SDK мог правильно получить временный токен из метаданных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...