mardi 5 mai 2015

Amazon Kinesis putRecord AmazonServiceException

I am new in amazon kines and I would like to create a Java application to put record into kinesis, after that put my .class in jmeter to use this code in beanshell sample. But when i call putRecord i obtain this exception:

com.amazonaws.AmazonServiceException: User: arn:aws:iam::xxxxx:user/jmeter is not authorized to perform: kinesis:PutRecord on resource: arn:aws:kinesis:eu-central-1:xxxxx:stream/jmeter (Service: AmazonKinesis; Status Code: 400; Error Code: AccessDeniedException; Request ID: xxxxx-xxxx-11e4-a036-1d3ce7b07b9e)

The java code is the following(now I'm only trying to connect to kinesis e put a simple record, then i put an array of json ):

import java.nio.ByteBuffer;

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.kinesis.AmazonKinesisClient;
import com.amazonaws.services.kinesis.model.PutRecordRequest;
import com.amazonaws.services.kinesis.model.PutRecordResult;


public class Kinesis {
    private static AmazonKinesisClient kinesisClient;
    private static final String streamName="jmeter";
    public static void main(String[] args) {
        init();
        long createTime = System.currentTimeMillis();
        PutRecordResult putRecordResult;
        PutRecordRequest putRecordRequest = new PutRecordRequest();
        putRecordRequest.setStreamName(streamName);
        putRecordRequest.setData(ByteBuffer.wrap(String.format("testData-%d", createTime).getBytes()));
        putRecordRequest.setPartitionKey(String.format("partitionKey-%d", createTime));
        try{
         putRecordResult = kinesisClient.putRecord(putRecordRequest);
         System.out.printf("Successfully put record, partition key : %s, ShardID : %s, SequenceNumber : %s.\n",
                    putRecordRequest.getPartitionKey(),
                    putRecordResult.getShardId(),
                    putRecordResult.getSequenceNumber());
        }catch(Exception e){
            System.out.println(e);
        }

    }   


    private static void init() {
        /*
         * The ProfileCredentialsProvider will return your [default]
         * credential profile by reading from the credentials file located at
         * (~/.aws/credentials).
         */
        AWSCredentials credentials = null;
        String accessKey = "myaccesskey" ;
        String secretKey = "mysecretkey/xxxx" ;
        credentials = new BasicAWSCredentials(accessKey, secretKey);
        kinesisClient = new AmazonKinesisClient(credentials);
        kinesisClient.setEndpoint("kinesis.eu-central-1.amazonaws.com","kinesis", "eu-central-1");
        System.out.println("Starting application");
        }
}




Aucun commentaire:

Enregistrer un commentaire