// kafka-connector options: START
[[camel-aws2-s3-kafka-connector-sink]]
= camel-aws2-s3-kafka-connector sink configuration

Connector Description: Store and retrieve objects from AWS S3 Storage Service using AWS SDK version 2.x.

When using camel-aws2-s3-kafka-connector as sink make sure to use the following Maven dependency to have support for the connector:

[source,xml]
----
<dependency>
  <groupId>org.apache.camel.kafkaconnector</groupId>
  <artifactId>camel-aws2-s3-kafka-connector</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel Kafka connector version -->
</dependency>
----

To use this Sink connector in Kafka connect you'll need to set the following connector.class

[source,java]
----
connector.class=org.apache.camel.kafkaconnector.aws2s3.CamelAws2s3SinkConnector
----


The camel-aws2-s3 sink connector supports 71 options, which are listed below.



[width="100%",cols="2,5,^1,1,1",options="header"]
|===
| Name | Description | Default | Required | Priority
| *camel.sink.path.bucketNameOrArn* | Bucket name or ARN | null | true | HIGH
| *camel.sink.endpoint.amazonS3Client* | Reference to a com.amazonaws.services.s3.AmazonS3 in the registry. | null | false | MEDIUM
| *camel.sink.endpoint.amazonS3Presigner* | An S3 Presigner for Request, used mainly in createDownloadLink operation | null | false | MEDIUM
| *camel.sink.endpoint.autoCreateBucket* | Setting the autocreation of the S3 bucket bucketName. This will apply also in case of moveAfterRead option enabled and it will create the destinationBucket if it doesn't exist already. | false | false | MEDIUM
| *camel.sink.endpoint.overrideEndpoint* | Set the need for overidding the endpoint. This option needs to be used in combination with uriEndpointOverride option | false | false | MEDIUM
| *camel.sink.endpoint.pojoRequest* | If we want to use a POJO request as body or not | false | false | MEDIUM
| *camel.sink.endpoint.policy* | The policy for this queue to set in the com.amazonaws.services.s3.AmazonS3#setBucketPolicy() method. | null | false | MEDIUM
| *camel.sink.endpoint.proxyHost* | To define a proxy host when instantiating the SQS client | null | false | MEDIUM
| *camel.sink.endpoint.proxyPort* | Specify a proxy port to be used inside the client definition. | null | false | MEDIUM
| *camel.sink.endpoint.proxyProtocol* | To define a proxy protocol when instantiating the S3 client One of: [HTTP] [HTTPS] | "HTTPS" | false | MEDIUM
| *camel.sink.endpoint.region* | The region in which S3 client needs to work. When using this parameter, the configuration will expect the lowercase name of the region (for example ap-east-1) You'll need to use the name Region.EU_WEST_1.id() | null | false | MEDIUM
| *camel.sink.endpoint.trustAllCertificates* | If we want to trust all certificates in case of overriding the endpoint | false | false | MEDIUM
| *camel.sink.endpoint.uriEndpointOverride* | Set the overriding uri endpoint. This option needs to be used in combination with overrideEndpoint option | null | false | MEDIUM
| *camel.sink.endpoint.useDefaultCredentialsProvider* | Set whether the S3 client should expect to load credentials through a default credentials provider or to expect static credentials to be passed in. | false | false | MEDIUM
| *camel.sink.endpoint.customerAlgorithm* | Define the customer algorithm to use in case CustomerKey is enabled | null | false | MEDIUM
| *camel.sink.endpoint.customerKeyId* | Define the id of Customer key to use in case CustomerKey is enabled | null | false | MEDIUM
| *camel.sink.endpoint.customerKeyMD5* | Define the MD5 of Customer key to use in case CustomerKey is enabled | null | false | MEDIUM
| *camel.sink.endpoint.batchMessageNumber* | The number of messages composing a batch in streaming upload mode | 10 | false | MEDIUM
| *camel.sink.endpoint.batchSize* | The batch size (in bytes) in streaming upload mode | 1000000 | false | MEDIUM
| *camel.sink.endpoint.deleteAfterWrite* | Delete file object after the S3 file has been uploaded | false | false | MEDIUM
| *camel.sink.endpoint.keyName* | Setting the key name for an element in the bucket through endpoint parameter | null | false | MEDIUM
| *camel.sink.endpoint.lazyStartProducer* | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | false | MEDIUM
| *camel.sink.endpoint.multiPartUpload* | If it is true, camel will upload the file with multi part format, the part size is decided by the option of partSize | false | false | MEDIUM
| *camel.sink.endpoint.namingStrategy* | The naming strategy to use in streaming upload mode One of: [progressive] [random] | "progressive" | false | MEDIUM
| *camel.sink.endpoint.operation* | The operation to do in case the user don't want to do only an upload One of: [copyObject] [listObjects] [deleteObject] [deleteBucket] [listBuckets] [getObject] [getObjectRange] [createDownloadLink] | null | false | MEDIUM
| *camel.sink.endpoint.partSize* | Setup the partSize which is used in multi part upload, the default size is 25M. | 26214400L | false | MEDIUM
| *camel.sink.endpoint.restartingPolicy* | The restarting policy to use in streaming upload mode One of: [override] [lastPart] | "override" | false | MEDIUM
| *camel.sink.endpoint.storageClass* | The storage class to set in the com.amazonaws.services.s3.model.PutObjectRequest request. | null | false | MEDIUM
| *camel.sink.endpoint.streamingUploadMode* | When stream mode is true the upload to bucket will be done in streaming | false | false | MEDIUM
| *camel.sink.endpoint.streamingUploadTimeout* | While streaming upload mode is true, this option set the timeout to complete upload | null | false | MEDIUM
| *camel.sink.endpoint.awsKMSKeyId* | Define the id of KMS key to use in case KMS is enabled | null | false | MEDIUM
| *camel.sink.endpoint.useAwsKMS* | Define if KMS must be used or not | false | false | MEDIUM
| *camel.sink.endpoint.useCustomerKey* | Define if Customer Key must be used or not | false | false | MEDIUM
| *camel.sink.endpoint.accessKey* | Amazon AWS Access Key | null | false | MEDIUM
| *camel.sink.endpoint.secretKey* | Amazon AWS Secret Key | null | false | MEDIUM
| *camel.component.aws2-s3.amazonS3Client* | Reference to a com.amazonaws.services.s3.AmazonS3 in the registry. | null | false | MEDIUM
| *camel.component.aws2-s3.amazonS3Presigner* | An S3 Presigner for Request, used mainly in createDownloadLink operation | null | false | MEDIUM
| *camel.component.aws2-s3.autoCreateBucket* | Setting the autocreation of the S3 bucket bucketName. This will apply also in case of moveAfterRead option enabled and it will create the destinationBucket if it doesn't exist already. | false | false | MEDIUM
| *camel.component.aws2-s3.configuration* | The component configuration | null | false | MEDIUM
| *camel.component.aws2-s3.overrideEndpoint* | Set the need for overidding the endpoint. This option needs to be used in combination with uriEndpointOverride option | false | false | MEDIUM
| *camel.component.aws2-s3.pojoRequest* | If we want to use a POJO request as body or not | false | false | MEDIUM
| *camel.component.aws2-s3.policy* | The policy for this queue to set in the com.amazonaws.services.s3.AmazonS3#setBucketPolicy() method. | null | false | MEDIUM
| *camel.component.aws2-s3.proxyHost* | To define a proxy host when instantiating the SQS client | null | false | MEDIUM
| *camel.component.aws2-s3.proxyPort* | Specify a proxy port to be used inside the client definition. | null | false | MEDIUM
| *camel.component.aws2-s3.proxyProtocol* | To define a proxy protocol when instantiating the S3 client One of: [HTTP] [HTTPS] | "HTTPS" | false | MEDIUM
| *camel.component.aws2-s3.region* | The region in which S3 client needs to work. When using this parameter, the configuration will expect the lowercase name of the region (for example ap-east-1) You'll need to use the name Region.EU_WEST_1.id() | null | false | MEDIUM
| *camel.component.aws2-s3.trustAllCertificates* | If we want to trust all certificates in case of overriding the endpoint | false | false | MEDIUM
| *camel.component.aws2-s3.uriEndpointOverride* | Set the overriding uri endpoint. This option needs to be used in combination with overrideEndpoint option | null | false | MEDIUM
| *camel.component.aws2-s3.useDefaultCredentials Provider* | Set whether the S3 client should expect to load credentials through a default credentials provider or to expect static credentials to be passed in. | false | false | MEDIUM
| *camel.component.aws2-s3.customerAlgorithm* | Define the customer algorithm to use in case CustomerKey is enabled | null | false | MEDIUM
| *camel.component.aws2-s3.customerKeyId* | Define the id of Customer key to use in case CustomerKey is enabled | null | false | MEDIUM
| *camel.component.aws2-s3.customerKeyMD5* | Define the MD5 of Customer key to use in case CustomerKey is enabled | null | false | MEDIUM
| *camel.component.aws2-s3.batchMessageNumber* | The number of messages composing a batch in streaming upload mode | 10 | false | MEDIUM
| *camel.component.aws2-s3.batchSize* | The batch size (in bytes) in streaming upload mode | 1000000 | false | MEDIUM
| *camel.component.aws2-s3.deleteAfterWrite* | Delete file object after the S3 file has been uploaded | false | false | MEDIUM
| *camel.component.aws2-s3.keyName* | Setting the key name for an element in the bucket through endpoint parameter | null | false | MEDIUM
| *camel.component.aws2-s3.lazyStartProducer* | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | false | MEDIUM
| *camel.component.aws2-s3.multiPartUpload* | If it is true, camel will upload the file with multi part format, the part size is decided by the option of partSize | false | false | MEDIUM
| *camel.component.aws2-s3.namingStrategy* | The naming strategy to use in streaming upload mode One of: [progressive] [random] | "progressive" | false | MEDIUM
| *camel.component.aws2-s3.operation* | The operation to do in case the user don't want to do only an upload One of: [copyObject] [listObjects] [deleteObject] [deleteBucket] [listBuckets] [getObject] [getObjectRange] [createDownloadLink] | null | false | MEDIUM
| *camel.component.aws2-s3.partSize* | Setup the partSize which is used in multi part upload, the default size is 25M. | 26214400L | false | MEDIUM
| *camel.component.aws2-s3.restartingPolicy* | The restarting policy to use in streaming upload mode One of: [override] [lastPart] | "override" | false | MEDIUM
| *camel.component.aws2-s3.storageClass* | The storage class to set in the com.amazonaws.services.s3.model.PutObjectRequest request. | null | false | MEDIUM
| *camel.component.aws2-s3.streamingUploadMode* | When stream mode is true the upload to bucket will be done in streaming | false | false | MEDIUM
| *camel.component.aws2-s3.streamingUploadTimeout* | While streaming upload mode is true, this option set the timeout to complete upload | null | false | MEDIUM
| *camel.component.aws2-s3.awsKMSKeyId* | Define the id of KMS key to use in case KMS is enabled | null | false | MEDIUM
| *camel.component.aws2-s3.useAwsKMS* | Define if KMS must be used or not | false | false | MEDIUM
| *camel.component.aws2-s3.useCustomerKey* | Define if Customer Key must be used or not | false | false | MEDIUM
| *camel.component.aws2-s3.autowiredEnabled* | Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc. | true | false | MEDIUM
| *camel.component.aws2-s3.accessKey* | Amazon AWS Access Key | null | false | MEDIUM
| *camel.component.aws2-s3.secretKey* | Amazon AWS Secret Key | null | false | MEDIUM
|===



The camel-aws2-s3 sink connector supports 1 converters out of the box, which are listed below.



[source,java]
----

org.apache.camel.kafkaconnector.aws2s3.converters.S3ObjectConverter

----



The camel-aws2-s3 sink connector supports 3 transforms out of the box, which are listed below.



[source,java]
----

org.apache.camel.kafkaconnector.aws2s3.transformers.S3ObjectTransforms

org.apache.camel.kafkaconnector.aws2s3.transformers.JSONToRecordTransforms

org.apache.camel.kafkaconnector.aws2s3.transformers.RecordToJSONTransforms

----



The camel-aws2-s3 sink connector supports 1 aggregation strategies out of the box, which are listed below.



[source,java]
----

org.apache.camel.kafkaconnector.aws2s3.aggregation.NewlineAggregationStrategy

----
// kafka-connector options: END
