This tutorial illustrates the process through which a provider participant can transfer a file stored in its Amazon S3 to Azure Blob Storage belonging to a consumer participant.
For this tutorial, we assume Alice as a provider participant and Bob as consumer participant.
- We use a self-contained version of Amazon S3 named MinIO, and we deploy two instances, one each for
AliceandBob. - We also use a self-contained version of Azure Blob Storage named Azurite, and we deploy single
Azuriteinstance for both connectors, due toa limitation in overriding endpoints during trasfer process.
- [File Transfer: Amazon S3 to Amazon S3](./File Transfer S3 to S3.md)
- [File Transfer: Azure Blob Storage to Azure Blob Storage](./File Transfer Azure to Azure.md)
This tutorial is similar to existing tutorial [File Transfer: Amazon S3 to Amazon S3](./File Transfer S3 to S3.md). The only difference is in the initiate transfer process. So please follow existing tutorial to initiate negotiation.
When initiating the transfer, we need to provide a data destination, so in this case we will be providing an Azure Blob Storage destination.
curl --location 'http://localhost/bob/management/v2/transferprocesses' \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: password' \
--data-raw '{
"@context": {
"odrl": "http://www.w3.org/ns/odrl/2/"
},
"assetId": "<Asset Id>",
"connectorAddress": "http://alice-controlplane:8084/api/v1/dsp",
"connectorId": "BPNL000000000001",
"contractId": "<Contract Agreement Id from Get Negotiation Response>",
"dataDestination": {
"type": "AzureStorage",
"account": "bobazureaccount",
"container": "bob-container",
"keyName": "bobazureaccount-sas"
},
"callbackAddresses": [],
"protocol": "dataspace-protocol-http"
}'This API should return below response.
{
"@type": "IdResponse",
"@id": "26e02359-56a1-4d94-afad-61319799675a",
"createdAt": 1700740670220,
"@context": {
"@vocab": "https://w3id.org/edc/v0.0.1/ns/",
"edc": "https://w3id.org/edc/v0.0.1/ns/",
"tx": "https://w3id.org/tractusx/v0.0.1/ns/",
"odrl": "http://www.w3.org/ns/odrl/2/"
}
}Please take note of the transfer process id (
@idfield) in the response.
Just wait for few seconds and check the transfer state. Please replace the transfer process id before executing the command.
curl --location 'http://localhost/bob/management/v2/transferprocesses/<TRANSFER_PROCESS_ID>' \
--header 'X-Api-Key: password'It should return a response similar to this (IDs will be different):
{
"@id": "26e02359-56a1-4d94-afad-61319799675a",
"@type": "TransferProcess",
"correlationId": "26e02359-56a1-4d94-afad-61319799675a",
"state": "COMPLETED",
"stateTimestamp": 1702622716915,
"type": "CONSUMER",
"assetId": "20",
"contractId": "cb4089c9-fedb-4da5-afad-beb19526ec89",
"callbackAddresses": [],
"dataDestination": {
"@type": "DataAddress",
"container": "bob-container",
"type": "AzureStorage",
"account": "bobazureaccount",
"keyName": "bobazureaccount-sas"
},
"connectorId": "BPNL000000000001",
"@context": {
"@vocab": "https://w3id.org/edc/v0.0.1/ns/",
"edc": "https://w3id.org/edc/v0.0.1/ns/",
"tx": "https://w3id.org/tractusx/v0.0.1/ns/",
"odrl": "http://www.w3.org/ns/odrl/2/"
}
}Please note,
stateshould beCOMPLETED. If it isTERMINATED, that means the transfer has failed. Please check logs for more details.
Once the transfer has completed, the asset file should be available in bob-container.