Participe da Maratona Behind the Code! A competição de programação que mais te desafia! Inscreva-se aqui

Como criar e gerenciar sua aplicação no IBM Cloud através da biblioteca Java do Cloud Foundry

Introdução

O IBM Cloud é a plataforma como serviço (PaaS) da IBM que fornece toda a infraestrutura e flexibilidade necessárias para a implementação de aplicativos na nuvem. O IBM Cloud é baseado no Cloud Foundry, uma plataforma de código aberto que permite criar, implementar e gerenciar aplicativos na nuvem.

Assim, normalmente se interage com uma aplicação no IBM Cloud através da CLI do Cloud Foundry, ou seja o comando cf. Através da CLI é possível executar diversar operações no IBM Cloud, tais como:

  • cf push: cria ou atualiza uma aplicação;
  • cf delete: exclui uma aplicação;
  • cf start/stop: inicializa ou para uma aplicação.

Obtendo a biblioteca

A biblioteca Java do Cloud Foundry está disponível no Maven Central e para ser utilizada em um projeto basta adicionar a seguinte dependência ao arquivo pom.xml:

 <dependencies>
  <dependency>
      <groupId>org.cloudfoundry</groupId>
      <artifactId>cloudfoundry-client-lib</artifactId>
      <version>1.0.2</version>
  </dependency>
</dependencies>

Criando e gerenciando aplicações no IBM Cloud

Veremos agora como criar e gerenciar aplicações no IBM Cloud através da biblioteca Java do Cloud Foundry.

1

Acessando o IBM Cloud

Antes de criar uma aplicação devemos logar no IBM Cloud. Para isso criamos uma instância da classe CloudFoundryClient informando nossas crendenciais e a URL de acesso à API do IBM Cloud. Devemos informar também qual a organização e o espaço que utilizaremos (por padrão, o espaço é dev e a organização é igual ao usuário).

String user = "user@email.com";
String password = "password";
String orgName = user;
String spaceName = "dev";

// login
CloudCredentials credentials = new CloudCredentials(user, password);
URL target = URI.create("https://api.ng.bluemix.net").toURL();
CloudFoundryClient client = new CloudFoundryClient(credentials, target, orgName, spaceName);
client.login();

Após criar ou gerenciar as aplicações é necessário deslogar do IBM Cloud. Para isso basta chamar o método logout:

client.logout();
2

Criando uma aplicação

Para criar uma aplicação devemos chamar o método createApplication informando:

  • o nome da aplicação a ser criada;
  • uma lista com a URL a ser utilizada para acessar a aplicação. A URL deve seguir o formato http://.mybluemix.net;
  • a quantidade de memória em MB (128, 256, 512, etc) para a aplicação;
  • uma lista com o nome dos serviços que a aplicação irá utilizar;
  • e por fim, um objeto Staging onde especificamos o buildpack a ser utilizado e, caso necessário, o comando para inicializar a aplicação.

É possível descobrir os buildpack disponíveis no IBM Cloud através do comando cf buildpacks. Alguns buildpack disponíveis são: liberty-for-java, sdk-for-nodejs, java_buildpack, ruby_buildpack.

O código abaixo exemplifica a criação de uma aplicação NodeJS:

String appName = "my-node-app";
String baseUrl = "http://" + appName + ".mybluemix.net/";
List<String> uris = Arrays.asList(baseUrl);

Integer memory  = 128;
List<String> serviceNames = null;

String command = "node app.js";
String buildpack = "sdk-for-nodejs";

// creating a new application
client.createApplication(appName, new Staging(command, buildpack), memory, uris, serviceNames);

Depois de criar a aplicação é necessário fazer o upload para o IBM Cloud do código fonte ou do binário a ser utilizado:

// uploading the zip file
File appFile = new File("nodeApp.zip");
client.uploadApplication(appName, appFile);

Por fim, deve-se inicializar a aplicação:

// starting the application
client.startApplication(appName);
3

Gerenciando uma aplicação

Através da classe CloudFoundryClient é possível realizar outras operações no IBM Cloud, tais como: remover uma aplicação, parar uma aplicação, criar um serviço, associar um serviço a uma aplicação, etc. Como exemplo dessas operações, o código abaixo mostra como criar e gerenciar uma aplicação web Java no IBM Cloud associada a um serviço SQL de banco de dados:

// creating the db service
CloudService service = new CloudService();
service.setLabel("sqldb");
service.setName("mydb");
service.setPlan("sqldb_small");
client.createService(service);

// creating a new application
String appName = "my-java-web-app";
String baseUrl = "http://" + appName + ".mybluemix.net/";
List<String> uris = Arrays.asList(baseUrl);
List<String> serviceNames =  Arrays.asList("mydb");
client.createApplication(appName, new Staging(null, "liberty-for-java"),
                512, uris, serviceNames);

// uploading the war file
File warFile = new File("webApp.war");
client.uploadApplication(appName, warFile);

// starting the application
client.startApplication(appName);

// check application state
Assert.assertEquals("STARTED", client.getApplication(appName).getState().toString());

// stopping the application
client.stopApplication(appName);
Assert.assertEquals("STOPPED", client.getApplication(appName).getState().toString());

// updating the application
File warFile2 = new File("webApp2.war");
client.uploadApplication(appName, warFile2);

// binding other service to the application
client.bindService(appName, "otherService");
client.startApplication(appName);

// deleting the application
client.deleteApplication(appName);

// deleting the service
client.deleteService("mydb");

Note que é possível obter os serviços e planos disponíveis no IBM Cloud através do comando cf marketplace.

Conclusão

Vimos neste artigo como criar e gerenciar aplicações no IBM Cloud através da biblioteca Java do Cloud Foundry. Além das operações apresentadas aqui, existem diversas outras operações possíveis de serem realizadas através da biblioteca, tais como: aumentar a quantidade de memória disponível para a aplicação, alterar o número de instâncias, obter os arquivos de log, etc. Ou seja, todas as operações que podem ser realizadas através do comando cf, podem também ser realizadas através da biblioteca Java. A utilização da biblioteca pode ser vantajoso no contexto de automação dos processos de criação, gerenciamente e monitoração das aplicações no IBM Cloud.

Referências