fr.xebia.workshop.nginx.CreateTomcat.java Source code

Java tutorial

Introduction

Here is the source code for fr.xebia.workshop.nginx.CreateTomcat.java

Source

/*
 * 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() });
            }

        }
    }
}