{"id":196,"date":"2026-10-12T18:11:02","date_gmt":"2026-10-12T18:11:02","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2010\/03\/10\/ec2deploy-and-the-cloud-tools-maven-plugin-are-now-available\/"},"modified":"2026-10-12T18:11:03","modified_gmt":"2026-10-12T18:11:03","slug":"ec2deploy-and-the-cloud-tools-maven-plugin-are-now-available","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/ec2deploy-and-the-cloud-tools-maven-plugin-are-now-available\/","title":{"rendered":"EC2Deploy and the Cloud Tools Maven Plugin: Architecture, Goals, and Deployment Workflow"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>Originally published on 2010-03-10; fully revised and updated.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">EC2Deploy and the Cloud Tools Maven plugin were introduced as an early automation path for deploying Java web applications to Amazon EC2. If you are reviewing older deployment approaches, this guide clarifies what was announced, how the parts work together, and what each Maven goal was designed to do.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The original announcement described <a href=\"http:\/\/www.chris-richardson.blog-city.com\/running_jee_applications_on_amazon_ec2_or_deploying_to_20_m.htm\">EC2Deploy<\/a> as a Groovy-based framework for deploying Java EE applications to EC2, made available through the <a href=\"http:\/\/code.google.com\/p\/cloudtools\/\">Cloud Tools<\/a> open source project.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4112 aligncenter\" src=\"http:\/\/www.scmgalaxy.com\/tutorials\/wp-content\/uploads\/2010\/03\/ec2deploy-and-the-cloud-too.png\" alt=\"ec2deploy-cloud-tools-maven-plugin\" width=\"600\" height=\"400\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2010\/03\/ec2deploy-and-the-cloud-too.png 600w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2010\/03\/ec2deploy-and-the-cloud-too-300x200.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What the release included<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>The EC2Deploy framework<\/li><li>Amazon Machine Images (AMIs) configured for Tomcat and EC2Deploy<\/li><li>A Maven plugin that uses EC2Deploy to deploy a web application to EC2<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">How the Cloud Tools components fit together<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Component<\/th><th>Role<\/th><th>Why it matters operationally<\/th><\/tr><\/thead><tbody><tr><td>EC2Deploy framework<\/td><td>Core deployment automation logic<\/td><td>Provides the actions used to move and start applications on EC2-based hosts<\/td><\/tr><tr><td>Preconfigured AMIs<\/td><td>Runtime images prepared for Tomcat and EC2Deploy<\/td><td>Reduces manual instance setup before deployment<\/td><\/tr><tr><td>Cloud Tools Maven plugin<\/td><td>Maven goals that invoke EC2Deploy workflows<\/td><td>Lets teams run deployment tasks from build tooling<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Maven goals and when to use each one<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The original post highlighted four plugin goals. They are shown below exactly as announced, with practical usage context.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Maven goal<\/th><th>Declared function in the announcement<\/th><th>Typical use point<\/th><\/tr><\/thead><tbody><tr><td><code>cloudtools:deploy<\/code><\/td><td>Launch EC2 instances and deploy the web application<\/td><td>Initial environment bring-up and first deployment<\/td><\/tr><tr><td><code>cloudtools:redeploy<\/code><\/td><td>Upload changes and restart Tomcat<\/td><td>After code updates during iterative development<\/td><\/tr><tr><td><code>cloudtools:jmeter<\/code><\/td><td>Run a JMeter test<\/td><td>Quick performance or load-test step after deployment<\/td><\/tr><tr><td><code>cloudtools:stop<\/code><\/td><td>Stop EC2 instances<\/td><td>Teardown to control runtime cost<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css language-bash\"><span class=\"hljs-selector-tag\">mvn<\/span> <span class=\"hljs-selector-tag\">cloudtools<\/span><span class=\"hljs-selector-pseudo\">:deploy<\/span>\n<span class=\"hljs-selector-tag\">mvn<\/span> <span class=\"hljs-selector-tag\">cloudtools<\/span><span class=\"hljs-selector-pseudo\">:redeploy<\/span>\n<span class=\"hljs-selector-tag\">mvn<\/span> <span class=\"hljs-selector-tag\">cloudtools<\/span><span class=\"hljs-selector-pseudo\">:jmeter<\/span>\n<span class=\"hljs-selector-tag\">mvn<\/span> <span class=\"hljs-selector-tag\">cloudtools<\/span><span class=\"hljs-selector-pseudo\">:stop<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Typical workflow from deploy to teardown<\/h2>\n\n\n\n<pre class=\"mermaid\">\nflowchart TD\n    A[Configure Maven plugin for app] --> B[Run mvn cloudtools:deploy]\n    B --> C[EC2 instances are launched]\n    C --> D[Application deployed to Tomcat]\n    D --> E{Code changes needed}\n    E -- yes --> F[Run mvn cloudtools:redeploy]\n    E -- no --> G[Run mvn cloudtools:jmeter]\n    F --> G\n    G --> H[Run mvn cloudtools:stop]\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Example change cycle commands<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css language-bash\"># <span class=\"hljs-selector-tag\">First-time<\/span> <span class=\"hljs-selector-tag\">launch<\/span> <span class=\"hljs-selector-tag\">and<\/span> <span class=\"hljs-selector-tag\">deploy<\/span>\n<span class=\"hljs-selector-tag\">mvn<\/span> <span class=\"hljs-selector-tag\">cloudtools<\/span><span class=\"hljs-selector-pseudo\">:deploy<\/span>\n\n# <span class=\"hljs-selector-tag\">Apply<\/span> <span class=\"hljs-selector-tag\">application<\/span> <span class=\"hljs-selector-tag\">updates<\/span>\n<span class=\"hljs-selector-tag\">mvn<\/span> <span class=\"hljs-selector-tag\">cloudtools<\/span><span class=\"hljs-selector-pseudo\">:redeploy<\/span>\n\n# <span class=\"hljs-selector-tag\">Execute<\/span> <span class=\"hljs-selector-tag\">load<\/span> <span class=\"hljs-selector-tag\">test<\/span> <span class=\"hljs-selector-tag\">stage<\/span>\n<span class=\"hljs-selector-tag\">mvn<\/span> <span class=\"hljs-selector-tag\">cloudtools<\/span><span class=\"hljs-selector-pseudo\">:jmeter<\/span>\n\n# <span class=\"hljs-selector-tag\">Stop<\/span> <span class=\"hljs-selector-tag\">compute<\/span> <span class=\"hljs-selector-tag\">resources<\/span> <span class=\"hljs-selector-tag\">when<\/span> <span class=\"hljs-selector-tag\">finished<\/span>\n<span class=\"hljs-selector-tag\">mvn<\/span> <span class=\"hljs-selector-tag\">cloudtools<\/span><span class=\"hljs-selector-pseudo\">:stop<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Compatibility checks before using this approach today<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Confirm whether the project artifacts and source repositories are still accessible.<\/li><li>Validate compatibility with your current Maven, JDK, and AWS account security model.<\/li><li>Verify AMI availability and whether those images still meet your baseline hardening requirements.<\/li><li>Review how credentials are handled before running deployment goals in CI\/CD.<\/li><li>Test in a non-production account first, especially instance lifecycle actions.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Best practices for evaluating legacy deployment tooling<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Treat historical plugin goals as a capability map, then verify each behavior in a controlled environment.<\/li><li>Document a rollback and shutdown procedure before first use to avoid orphaned infrastructure.<\/li><li>Prefer reproducible infrastructure definitions and modern CI\/CD controls if rebuilding this pattern today.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>This revised guide explains what the 2010 EC2Deploy and Cloud Tools release actually introduced, how its components fit together, and how the Maven goals map to deployment operations on EC2. It also covers what modern teams should verify before relying on this legacy toolchain.<\/p>\n","protected":false},"author":1,"featured_media":4112,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[5633,29],"tags":[531,3362,3364,3357,3367,3366,1868,365,3368,161,3363,356,3365],"class_list":["post-196","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aws","category-maven","tag-cloud","tag-cloud-tools","tag-cloud-tools-maven-plugin","tag-deploy","tag-deploy-to-amazon-ec2","tag-deploy-web-application-project-to-ec2","tag-ec2","tag-ec2deploy","tag-ec2deploy-framework","tag-maven","tag-maven-plugin","tag-plugin","tag-web-application"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=196"}],"version-history":[{"count":3,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/196\/revisions"}],"predecessor-version":[{"id":79026,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/196\/revisions\/79026"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/4112"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}