Amazon AWS extension
Plugin ID
The plugin ID for Apache ActiveMQ is fr.cantor.c4i.AWSDelivery.
Properties
Environment independent parameters (set in extension configuration or properties file)
| Property key | Description | Mandatory | Default value |
|---|---|---|---|
| configAssetId | The ID of the asset containing the YAML mappings | Yes | |
| connection | The name of the connection in the c4i.properties file | Yes | |
| prefixQueueNamesWithContextId | true or false to indicate whether or not to prefix the queue names with the context IDs | Yes | |
| service | SQS, SNS, S3 or Kinesis | Yes | |
| batchMessages | For SNS/SQS/Kinesis, true will send message batches using the batching API, false will send messages one by one. For S3, true will produce objects containing multiple entries, false will produce one object for each entry | Yes | |
| outputFormat | JSON, or XML | Yes | |
| useIdAsDeduplicationId | true will send the message ID as deduplication ID. See below | No | false |
| messageGroupId | The Message Group ID that will be used for every message | Only for fifo queues | |
| delay | Message delay. -1 to ignore | No | -1 |
| kinesis.partition.{streamName} | Only for Kinesis. Indicates the partition key for each topic | Only for Kinesis | |
| autoCreateTargets | Only for S3. Automatically create the buckets if they don't exist. Otherwise, they must be created manually | No | false |
| cacheConfig | The ID of the asset containing the JCS configuration | No | |
| displayPerfStat | true to display performance statistics (see Performance statistics dedicated page) | No | false |
Environment dependent parameters (set in centralized c4i.properties file)
| Property key | Description | Mandatory | Default value |
|---|---|---|---|
| accessKey | AWS Access Key | Yes | |
| secretKey | AWS Secret Key only in Standalone mode | Yes | |
| region | The region where the SQS/SNS queues are defined | Yes | |
| mappings.{key} | Use this parameter to map targets names to SQS queues URL, SNS topics ARN, Kinesis stream name, or any replacement when templating S3 targets. See below | Only for SNS | |
| bucketName | The bucket name | Only for S3 |
Configuration example
extensions.[0].pluginId=fr.cantor.c4i.AWSDelivery
extensions.[0].configAssetId=C4I-Configuration
extensions.[0].connection=aws
extensions.[0].service=SQS
extensions.[0].format=JSON
extensions.[0].prefixQueueNamesWithContextId=true
extensions.[0].batchMessages=true
extensions.[0].useIdAsDeduplicationId=false
pluginId=fr.cantor.c4i.AWSDelivery
licenseAssetId=/Path/to/C4I/License.cat
configAssetId=C4I-Configuration
connection=aws
service=SQS
format=JSON
prefixQueueNamesWithContextId=true
batchMessages=true
useIdAsDeduplicationId=false
cacheConfig=/Path/to/JCS/Config.ccf
pluginId=fr.cantor.c4i.AWSDelivery
licenseAssetId=/Path/to/C4I/License.cat
configAssetId=/Path/to/C4I/Configuration.yml
connection=aws
service=SNS
format=JSON
prefixQueueNamesWithContextId=true
batchMessages=true
useIdAsDeduplicationId=false
cacheConfig=/Path/to/JCS/Config.ccf
aws.region=us-east-1
aws.accessKey=AKIAZRH4PHFLLQB4CMO6
aws.secretKey=secure_secret_key
aws.mappings.product=arn:aws:sns:us-east-1:574008783416:product_dev
aws.mappings.asset=arn:aws:sns:us-east-1:574008783416:asset_dev
aws.bucketName=myBucket
Message Deduplication ID
Fifo queues that do not use content-based deduplication require messages to contain a Deduplication ID. If the parameter useIdAsDeduplicationId is set to true,
Then the fields identified as the message key will be sent as the Deduplication ID.
- If only one field is mapped, the Deduplication ID will be this single field value.
- If multiple fields are mapped, the Deduplication ID will be a serialized JSON document containing the key-values pairs.
Important: These fields will not be part of the produced message. If you wish to add them to the message as well, you will need to map them twice
Example
Given the following XML:
<STEP-ProductInformation ContextID="GL">
<Product ID="PRD1">
<Name>Test Product</Name>
</Product>
</STEP-ProductInformation>
The following example illustrates simple keys:
Product:
- product[id]:
- ./@ID: id
- Name/text(): name
PRD1
{
"name": "Test Product"
}
The following example illustrates complex keys:
Product:
- product[id, context]:
- ./@ID: id
- c4i:currentContextId(): context
- Name/text(): name
{"id": "PRD1", "context": "GL"}
{
"name": "Test Product"
}
The following example illustrates how to include the key in the message:
Product:
- product[deduplicationId]:
- ./@ID: deduplicationId
- ./@ID: id
- Name/text(): name
PRD1
{
"id": "PRD1",
"name": "Test Product"
}
S3 output templating
When sending data to S3, you can define the output path for the produced objects using templating.
The following properties are automatically defined by C4i :
| Property | Value |
|---|---|
| contextID | The Context ID from the STEP XML file |
| exportTime | The timestamp of the STEP XML file in seconds |
| key | The value for the mapped key from the YAML configuration file |
You can add your own properties using the environment parameter mappings.{key}
Example input
Given the following input STEP XML file:
<STEP-ProductInformation ContextID="GL" ExportTime="2025-12-04 14:58:59">
<Products>
<Product ID="PRD001" UserTypeID="PROD_ARTICLE"><Name>Product 1</Name></Product>
<Product ID="PRD002" UserTypeID="PROD_ARTICLE"><Name>Product 2</Name></Product>
</Products>
</STEP-ProductInformation>
And the following c4i.properties file
s3.bucketName=mycompany-prd-products
s3.mappings.env=prd
Example 1 : One object per entry
In this example, we set the parameter batchMessages to false.
Given the following YAML configuration file:
- Product[@UserTypeID="PROD_ARTICLE"]:
${key}-${contextId}-${exportTime}[key]:
- ./@ID : key
- ./@ID : id
- Name/text() : name
- ./@UserTypeID : objectType
Will produce the following JSON files, stored at the paths PRD001-GL-1764858043.json and PRD002-GL-1764858043.json of the mycompany-prd-products bucket:
{
"id": "PRD001",
"name": "Product 1",
"objectType": "PROD_ARTICLE"
}
and
{
"id": "PRD002",
"name": "Product 2",
"objectType": "PROD_ARTICLE"
}
Example 2 : One object containing a JSON array
In this example, we set the parameter batchMessages to true.
Given the following YAML configuration file:
- Product[@UserTypeID="PROD_ARTICLE"]:
${env}-products-${contextId}-${exportTime}:
- ./@ID : id
- Name/text() : name
- ./@UserTypeID : objectType
Will produce the following JSON file, stored at the path prd-products-GL-1764858043.json of the mycompany-prd-products bucket:
[
{
"id": "PRD001",
"name": "Product 1",
"objectType": "PROD_ARTICLE"
},
{
"id": "PRD002",
"name": "Product 2",
"objectType": "PROD_ARTICLE"
}
]
Example 2 : One object containing a JSON object
In this example, we set the parameter batchMessages to true.
Given the following YAML configuration file:
- Product[@UserTypeID="PROD_ARTICLE"]:
${env}-products-${contextId}-${exportTime}#products:
- ./@ID : id
- Name/text() : name
- ./@UserTypeID : objectType
Will produce the following JSON file, stored at the path prd-products-GL-1764858043.json of the mycompany-prd-products bucket:
{
"products": [
{
"id": "PRD001",
"name": "Product 1",
"objectType": "PROD_ARTICLE"
},
{
"id": "PRD002",
"name": "Product 2",
"objectType": "PROD_ARTICLE"
}
]
}