在Lambda中使用KCL 1. *:凭据

时间:2018-11-04 11:49:39

标签: amazon-web-services aws-lambda amazon-kinesis

使用https://github.com/aws/aws-sdk-java/tree/master/src/samples/AmazonKinesis中提供的示例,我了解如何使用KCL从本地计算机读取KinesisEvent。 我正在尝试在Lambda函数中实现相同的逻辑。 要设置KinesisClientLibConfiguration,您需要提供一个AWSCredentialsProvider。
我从哪里获得这些AWS凭证以在Lambda中创建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);
        }
    }

}