AWS Services / Amazon Simple Storage Service S3 object tagging
S3 Object Tagging is a new feature introduced by AWS on December 2016. A really nice feature that allows you to track your costs on your invoice by your tags.
For example, you can add a tag by client name, and a tag by department: development, qa, or production.
I was migrating some objects from folders; however this feature to upload a folder (or a list of files) with tags was not available throw the “aws/aws-sdk-java version 1.11.87” .
So, the solution is to add an ObjectTaggingProvider (similar to the ObjectMetadataProvider) and modify the TransferManager to accept the ObjectTaggingProvider as a parameter in uploadDirectory method.
Then, on the client, we can implement the taggingProvider:
import com.amazonaws.auth.SystemPropertiesCredentialsProvider | |
import com.amazonaws.services.s3.model.ObjectMetadata | |
import com.amazonaws.services.s3.model.ObjectTagging | |
import com.amazonaws.services.s3.model.Tag | |
import com.amazonaws.services.s3.transfer.MultipleFileUpload | |
import com.amazonaws.services.s3.transfer.ObjectMetadataProvider | |
import com.amazonaws.services.s3.transfer.ObjectTaggingProvider | |
import com.amazonaws.services.s3.transfer.TransferManagerWithTagging | |
import com.amazonaws.services.s3.transfer.TransferProgress | |
class S3FolderMigrationClientWithTagging { | |
def loadMultipleFiles = { String directoryName -> | |
ObjectTaggingProvider taggingProvider = new ObjectTaggingProvider() { | |
ObjectTagging provideObjectTags(File file){ | |
List<Tag> tagList = new ArrayList<Tag>() | |
tagList.add(new Tag(‘costCenter', costCenterName)) | |
tagList.add(new Tag(‘client', clientName)) | |
new ObjectTagging(tagList) | |
} | |
} | |
File directory = new File("./${directoryName}" ) | |
if(!directory.isDirectory()){ | |
directory.mkdir() | |
} | |
MultipleFileUpload multipleFileUpload = transferManager.uploadDirectory(bucketName, contextName, directory, false, metadataProvider, taggingProvider) | |
TransferProgress transferProgress = multipleFileUpload.progress | |
while (!multipleFileUpload.done){ | |
Thread.sleep(1000) | |
} | |
directory.delete() | |
} | |
} |
references:
http://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html