Ant task implementation for Amazon Web Services
Java
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src
.gitignore
LICENSE
README.md
example_build_invalidate.xml
example_ec2din.xml
example_use_build.xml
pom.xml

README.md

Simple AWS ANT Task

Features:

  • CloudFront invalidation requests
  • S3 File upload using fileset strategy
  • SimpleDB insert rows [dynamic attributes]
<?xml version="1.0" encoding="utf-8"?>
<project name="MyProjectName" basedir="." default="cdn-invalidation">

    <!-- Other ant tasks -->

    <target name="cdn-invalidation" description="Invalidation of static files">
        <taskdef name="cloudfront" classpath="aws-ant-task.jar" classname="it.corley.ant.CloudFront" />
        <cloudfront key="your-key" secret="your-secret-key" distributionId="your-distribution-id">
            <delete path="/js/folder/my-path.js"/>
            <delete path="/css/folder/my-path.css"/>
            <delete path="/direct-gen.txt"/>
        </cloudfront>
    </target>

    <!-- Or you can also use one string -->

    <target name="cdn-invalidation-through-list" description="Invalidation of static files">
        <taskdef name="cloudfront" classpath="aws-ant-task.jar" classname="it.corley.ant.CloudFront" />
        <cloudfront key="your-key" secret="your-secret-key" distributionId="your-distribution-id"
                    pathsString="/js/folder/my-path.js,/css/folder/my-path.css,/direct-gen.txt" />
    </target>

</project>

Simple S3 Task

Added a very simple S3 task that enable files upload

<taskdef name="s3" classpath="aws-ant-task.jar" classname="it.corley.ant.S3PutTask" />
<s3 endpoint="s3-eu-west-1.amazonaws.com" key="your-key" secret="your-secret" bucket="your-bucket-name" dest="path/to/file">
    <fileset dir="my/dir" includes="**/*.html" />
</s3>

File upload using default Ant fileset strategy.

<taskdef name="s3put" classpath="aws-ant-task.jar" classname="it.corley.ant.S3PutTask" />
<s3put endpoint="s3-eu-west-1.amazonaws.com" key="your-key" secret="your-secret" bucket="your-bucket-name" dest="path/to/file">
  <fileset dir="${public.src}" casesensitive="yes">
    <patternset id="non.test.sources">
      <include name="**/*.js"/>
      <exclude name="**/*Test*"/>
    </patternset>
  </fileset>
</s3put>

Mark public files using publicRead

Consider that public property (Grant Everyone open/doownload) is marked on each file scanned by fileset directive. Your bucket rule is never touched.

<s3put
    endpoint="s3-eu-west-1.amazonaws.com"
    key="your-key"
    secret="your-secret"
    bucket="your-bucket-name"
    dest="path/to/file"
    publicRead="true">
    <!-- fileset structure -->
</s3put>

Easily configure content types using contentType property or ContentTypeMapping type

Global Content-Type configuration:

<s3put
    endpoint="s3-eu-west-1.amazonaws.com"
    key="your-key"
    secret="your-secret"
    bucket="your-bucket-name"
    dest="path/to/file"
    contentType="application/x-whatever">
    <!-- fileset structure -->
</s3put>

Content-Type mappers:

<typedef name="contenttypemapping" classname="it.corley.ant.ContentTypeMapping" classpathref="tasks.path"/>
<s3put
    endpoint="s3-eu-west-1.amazonaws.com"
    key="your-key"
    secret="your-secret"
    bucket="your-bucket-name"
    dest="path/to/file"
    contentType="application/x-whatever">
    <fileset dir="dist" include="**/*"/>
    <contenttypemapping extension=".crx" contenttype="application/x-chrome-extension"/>
    <contenttypemapping extension=".xpi" contenttype="application/x-xpinstall"/>
</s3put>

Note then when setting global content-type using contentType property of the s3put task and setting mapping using contenttype.mapping, the mapping takes precedence if given.

Easily configure cache control using cacheControl property

Global Cache-Control configuration:

<s3put
    endpoint="s3-eu-west-1.amazonaws.com"
    key="your-key"
    secret="your-secret"
    bucket="your-bucket-name"
    dest="path/to/file"
    contentType="application/x-whatever"
    cacheControl="max-age=3600">
    <!-- fileset structure -->
</s3put>

Cache-Control mappers:

<typedef name="cachecontrol.mapping" classname="it.corley.ant.CacheControlMapping" classpathref="tasks.path"/>
<s3put
    endpoint="s3-eu-west-1.amazonaws.com"
    key="your-key"
    secret="your-secret"
    bucket="your-bucket-name"
    dest="path/to/file"
    contentType="application/x-whatever">
    <fileset dir="dist" include="**/*"/>
    <contenttypemapping extension=".crx" contenttype="application/x-chrome-extension"/>
    <contenttypemapping extension=".xpi" contenttype="application/x-xpinstall"/>
    <cachecontrolmapping extension=".js" maxage="14400"/>
    <cachecontrolmapping extension=".css" maxage="86400"/>
</s3put>

Easily configure content encoding using contentEncoding property

Global Content-Encoding configuration:

<s3put
    endpoint="s3-eu-west-1.amazonaws.com"
    key="your-key"
    secret="your-secret"
    bucket="your-bucket-name"
    dest="path/to/file"
    contentType="application/x-whatever"
    contentEncoding="UTF-8">
    <!-- fileset structure -->
</s3put>

Content-Encoding mappers:

<typedef name="contentencoding.mapping" classname="it.corley.ant.ContentEncodingMapping" classpathref="tasks.path"/>
<s3put
    endpoint="s3-eu-west-1.amazonaws.com"
    key="your-key"
    secret="your-secret"
    bucket="your-bucket-name"
    dest="path/to/file"
    contentType="application/x-whatever">
    <fileset dir="dist" include="**/*"/>
    <contenttypemapping extension=".crx" contenttype="application/x-chrome-extension"/>
    <contenttypemapping extension=".xpi" contenttype="application/x-xpinstall"/>
    <cachecontrolmapping extension=".js" maxage="14400"/>
    <cachecontrolmapping extension=".css" maxage="86400"/>
    <contentencoding extension=".js" encoding="gzip"/>
    <contentencoding extension=".css" encoding="gzip"/>
</s3put>

Easily download a file from S3

<taskdef name="s3get" classpath="aws-ant-task.jar" classname="it.corley.ant.S3GetTask" />
<s3get endpoint="s3-eu-west-1.amazonaws.com"
       key="your-key" secret="your-secret"
       bucket="your-bucket-name" src="path/to/file"
       dest="path/to/file" />

SimpleDB Task

Read attributes from a row in your SimpleDB domain using

<taskdef name="simpledbget" classpath="aws-ant-task-${version}.jar" classname="it.corley.ant.SimpleDBGetTask" />
<simpledbget key="your-key" secret="your-secret"
             domain="your-domain" region="your-sdb-region"
             itemName="1234" attributes="my_property,another_property"
             propertyprefix="row" />

<echo message="my_property=${row.my_property}" />
<echo message="another_property=${row.another_property}." />

This task will fail if an unknown item name or attribute is used.

Insert new rows into your SimpleDB domain using

<taskdef name="simpledb" classpath="aws-ant-task-${version}.jar" classname="it.corley.ant.SimpleDB" />
<simpledb key="your-key" secret="your-secret" domain="your-domain" region="your-sdb-region">
    <attribute name="my_property" value="my first value" />
    <attribute name="another_property" value="value for this property" />
</simpledb>

You can replace existing rows into your SimpleDB domain using

<taskdef name="simpledb" classpath="aws-ant-task-${version}.jar" classname="it.corley.ant.SimpleDB" />
<simpledb key="your-key" secret="your-secret" domain="your-domain" region="your-sdb-region">
    <attribute name="itemName()" value="my first value" />
    <attribute name="another_property" value="new value for this property" />
    <attribute name="yet_another_property" value="new value for this property" append="true" />
</simpledb>

By default the attribute values for the row will be replaced. Add append="true" to your attribute to append the value, instead of overwriting it.

You have to download the latest aws-ant-task.jar binary file and add it into your project. Configure a new task as previous example.

Building and installing

With tests:

cp test.properties.dist test.properties
# Fill the test.properties accordingly
mvn package

or without them:

mvn package -Dmaven.test.skip=true

After properly building the tasks, all the jars needed to use them can be found in target/aws-ant-tasks-0.1-SNAPSHOT-bin directory. Just copy it whenever you like and use external classpath when defining the tasks:

<!-- Task for setting up the aws-ant-tasks -->
<target name="awstasks.setup">
    <path id="tasks.path">
        <fileset dir="target/aws-ant-tasks-0.1-SNAPSHOT-bin" includes="*.jar"/>
    </path>

    <taskdef name="s3put" classpath="aws-ant-task-${version}.jar" classname="it.corley.ant.S3PutTask"
             classpathref="tasks.path"/>
    <typedef name="contenttype.mapping" classname="it.corley.ant.ContentTypeMapping" classpathref="tasks.path"/>
</target>


<!--Actual use -->
<target name="use" description="Use the Task" depends="awstasks.setup">

</target>

Or copy them to the $ANT_HOME/libs directory and use directly, without specifying the classpath.

Contributors

This project is maintained by Corley S.r.l. and released under MIT license. A special thanks goes to our contributors! Thanks guys!

https://github.com/corley/aws-ant-task/graphs/contributors

Feel free to contribute to this project with your requests and pull requests!