Используйте KCL 1. * в Lambda: учетные данные - PullRequest
0 голосов
/ 04 ноября 2018

Используя примеры, представленные в https://github.com/aws/aws-sdk-java/tree/master/src/samples/AmazonKinesis Я понимаю, как использовать KCL для чтения KinesisEvents с моей локальной машины. Я пытаюсь реализовать ту же логику в лямбда-функциях. Для настройки KinesisClientLibConfiguration необходимо предоставить AWSCredentialsProvider.
Где взять эти AWSCredentials для создания kinesisClientLibConfiguration в лямбде?

KinesisClientLibConfiguration kinesisClientLibConfiguration = new KinesisClientLibConfiguration(SAMPLE_APPLICATION_NAME, SAMPLE_APPLICATION_STREAM_NAME, credentialsProvider, workerId);

Полный код обработчика выглядит так:

public class ProcessKinesisRecords implements RequestHandler<KinesisEvent, Void> {

    public static final String SAMPLE_APPLICATION_STREAM_NAME = "kinesis-s";
    public static final String SAMPLE_APPLICATION_STREAM_REGION = "eu-west-1";
    private static final String SAMPLE_APPLICATION_NAME = "SampleKinesisLambdaApplication";

    private static final InitialPositionInStream SAMPLE_APPLICATION_INITIAL_POSITION_IN_STREAM =
            InitialPositionInStream.LATEST;

    private static ProfileCredentialsProvider credentialsProvider;

    public Void handleRequest(KinesisEvent event, Context context) {
        init();
        int exitCode = 0;

        try {
            String workerId = InetAddress.getLocalHost().getCanonicalHostName() + ":" + UUID.randomUUID();
            KinesisClientLibConfiguration kinesisClientLibConfiguration =
                    new KinesisClientLibConfiguration(SAMPLE_APPLICATION_NAME,
                            SAMPLE_APPLICATION_STREAM_NAME,
                            credentialsProvider,
                            workerId);
            kinesisClientLibConfiguration.withInitialPositionInStream(SAMPLE_APPLICATION_INITIAL_POSITION_IN_STREAM);
            kinesisClientLibConfiguration.withRegionName(SAMPLE_APPLICATION_STREAM_REGION);

            IRecordProcessorFactory recordProcessorFactory = new AmazonKinesisApplicationRecordProcessorFactory();
            Worker worker = new Worker(recordProcessorFactory, kinesisClientLibConfiguration);

            System.out.printf("Running %s to process stream %s as worker %s...\n",
                    SAMPLE_APPLICATION_NAME,
                    SAMPLE_APPLICATION_STREAM_NAME,
                    workerId);
           worker.run();
        } catch (Throwable e) {
            System.err.println("Caught throwable while processing data.");
            e.printStackTrace();
        }
        System.exit(exitCode);
        return null;
    }


    private static void init() {
        // Ensure the JVM will refresh the cached IP values of AWS resources (e.g. service endpoints).
        java.security.Security.setProperty("networkaddress.cache.ttl", "60");

        credentialsProvider = new ProfileCredentialsProvider();

        try {
            credentialsProvider.getCredentials();
        } catch (Exception e) {
            throw new AmazonClientException("Cannot load the credentials", e);
        }
    }

}

1 Ответ

0 голосов
/ 12 ноября 2018

Lambda предоставляет переменные окружения для учетных данных:

https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html#lambda-environment-variables

Доступ к ним через провайдера EnvironmentVariableCredentials:

https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-core/src/main/java/com/amazonaws/auth/EnvironmentVariableCredentialsProvider.java

...