/* * Copyright 2008-2012 Xebia and the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package fr.xebia.workshop.nginx; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.services.elasticbeanstalk.AWSElasticBeanstalk; import com.amazonaws.services.elasticbeanstalk.AWSElasticBeanstalkClient; import com.amazonaws.services.elasticbeanstalk.model.*; import fr.xebia.cloud.amazon.aws.tools.AmazonAwsUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author <a href="mailto:cleclerc@xebia.fr">Cyrille Le Clerc</a> */ public class CreateTomcat { private static final String XFR_WORKSHOP_NGINX = "xfr-workshop-nginx"; private final Logger logger = LoggerFactory.getLogger(getClass()); private AWSElasticBeanstalk beanstalk; private WorkshopInfrastructure workshopInfrastructure; public static void main(String[] args) throws Exception { AWSCredentials awsCredentials = AmazonAwsUtils.loadAwsCredentials(); AWSElasticBeanstalk beanstalk = new AWSElasticBeanstalkClient(awsCredentials); beanstalk.setEndpoint("elasticbeanstalk.eu-west-1.amazonaws.com"); WorkshopInfrastructure workshopInfrastructure = new WorkshopInfrastructure() .withTeamIdentifiers("1"/*, "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"*/) .withAwsAccessKeyId(awsCredentials.getAWSAccessKeyId()) .withAwsSecretKey(awsCredentials.getAWSSecretKey()) .withKeyPairName("nginx-workshop") .withBeanstalkNotificationEmail("slemesle@xebia.fr"); CreateTomcat createTomcat = new CreateTomcat(beanstalk, workshopInfrastructure); createTomcat.createServers(); } public CreateTomcat(AWSElasticBeanstalk beanstalk, WorkshopInfrastructure workshopInfrastructure) { this.beanstalk = beanstalk; this.workshopInfrastructure = workshopInfrastructure; } public void createServers() { String applicationName = "xfr-cocktail-nginx"; // CREATE APPLICATION AmazonAwsUtils.deleteBeanstalkApplicationIfExists(applicationName, beanstalk); CreateApplicationRequest createApplicationRequest = new CreateApplicationRequest() .withApplicationName(applicationName) .withDescription("xfr-cocktail-nginx app"); ApplicationDescription applicationDescription = beanstalk.createApplication(createApplicationRequest).getApplication(); logger.debug("Application {} created", applicationDescription.getApplicationName()); // CREATE APPLICATION VERSION CreateApplicationVersionRequest createApplicationVersion1Request = new CreateApplicationVersionRequest() .withApplicationName(applicationDescription.getApplicationName()) .withVersionLabel("1.0.0") .withSourceBundle(new S3Location("xfr-workshop-caching", "cocktail-app-1.0.0-SNAPSHOT.war")); ApplicationVersionDescription applicationVersion1Description = beanstalk.createApplicationVersion(createApplicationVersion1Request).getApplicationVersion(); logger.debug("Application version {}:{} created", applicationVersion1Description.getApplicationName(), applicationVersion1Description.getVersionLabel()); /*CreateApplicationVersionRequest createApplicationVersion11Request = new CreateApplicationVersionRequest() .withApplicationName(applicationDescription.getApplicationName()) .withVersionLabel("1.1.0") .withSourceBundle(new S3Location(XFR_WORKSHOP_NGINX, "cocktail-app-1.1.0-SNAPSHOT.war")); ApplicationVersionDescription applicationVersion11Description = beanstalk.createApplicationVersion(createApplicationVersion11Request).getApplicationVersion(); logger.debug("Application version {}:{} created", applicationVersion11Description.getApplicationName(), applicationVersion11Description.getVersionLabel()); */ // CREATE CONFIGURATION TEMPLATE CreateConfigurationTemplateRequest createConfigurationTemplateRequest = new CreateConfigurationTemplateRequest() .withApplicationName(applicationDescription.getApplicationName()) .withTemplateName(applicationDescription.getApplicationName() + "-base-configuration") .withSolutionStackName("32bit Amazon Linux running Tomcat 7") .withOptionSettings( new ConfigurationOptionSetting("aws:autoscaling:launchconfiguration", "InstanceType", "t1.micro"), new ConfigurationOptionSetting("aws:autoscaling:launchconfiguration", "EC2KeyName", workshopInfrastructure.getKeyPairName()), new ConfigurationOptionSetting("aws:elasticbeanstalk:sns:topics", "Notification Endpoint", workshopInfrastructure.getBeanstalkNotificationEmail()), new ConfigurationOptionSetting("aws:elasticbeanstalk:application:environment", "AWS_ACCESS_KEY_ID", workshopInfrastructure.getAwsAccessKeyId()), new ConfigurationOptionSetting("aws:elasticbeanstalk:application:environment", "AWS_SECRET_KEY", workshopInfrastructure.getAwsSecretKey()) ); CreateConfigurationTemplateResult configurationTemplateResult = beanstalk.createConfigurationTemplate(createConfigurationTemplateRequest); logger.debug("Configuration {}:{} created", new Object[]{configurationTemplateResult.getApplicationName(), configurationTemplateResult.getTemplateName(), configurationTemplateResult}); for (String teamIdentifier : workshopInfrastructure.getTeamIdentifiers()) { for (int id = 0; id < 2; id ++) { // CREATE ENVIRONMENT CreateEnvironmentRequest createEnvironmentRequest = new CreateEnvironmentRequest() .withEnvironmentName(applicationDescription.getApplicationName() + "-" + teamIdentifier+ "-"+ id) .withApplicationName(applicationDescription.getApplicationName()) .withVersionLabel(applicationVersion1Description.getVersionLabel()) .withCNAMEPrefix(applicationDescription.getApplicationName() + "-" + teamIdentifier + "-" + id) .withTemplateName(configurationTemplateResult.getTemplateName()); CreateEnvironmentResult createEnvironmentResult = beanstalk.createEnvironment(createEnvironmentRequest); logger.info("Environment {}:{}:{} created at {}", new Object[]{ createEnvironmentResult.getApplicationName(), createEnvironmentResult.getVersionLabel(), createEnvironmentResult.getEnvironmentName(), createEnvironmentResult.getEndpointURL()}); } } } }