

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Criar uma pilha e executar uma aplicação
<a name="create-custom-stack"></a>

**Importante**  
O AWS OpsWorks Stacks serviço chegou ao fim da vida útil em 26 de maio de 2024 e foi desativado para clientes novos e existentes. É altamente recomendável que os clientes migrem suas cargas de trabalho para outras soluções o mais rápido possível. Se você tiver dúvidas sobre migração, entre em contato com a AWS Support equipe no [AWS re:POST](https://repost.aws/) ou por meio do Premium [AWS Support](https://aws.amazon.com/support).

Esta seção mostra como usar o livro de receitas do Tomcat para implementar uma configuração de pilha básica que execute uma aplicação JSP simples chamada SimpleJSP. A pilha consiste em uma camada personalizada baseada em Tomcat chamada e TomCustom uma camada MySQL. O SimpleJSP é implantado TomCustom e exibe algumas informações do banco de dados MySQL. Se você ainda não está familiarizado com o básico de como usar o OpsWorks Stacks, leia primeiro. [Conceitos básicos das pilhas Linux do Chef 11](gettingstarted.md)

## A aplicação SimpleJSP
<a name="create-custom-stack-jsp"></a>

A aplicação SimpleJSP demonstra os conceitos básicos de como configurar uma conexão de banco de dados e recuperar dados do banco de dados MySQL da pilha.

```
<html>
  <head>
    <title>DB Access</title>
  </head>
  <body>
    <%@ page language="java" import="java.sql.*,javax.naming.*,javax.sql.*" %>
    <%
      StringBuffer output = new StringBuffer();
      DataSource ds = null;
      Connection con = null;
      Statement stmt = null;
      ResultSet rs = null;
      try {
        Context initCtx = new InitialContext();
        ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/mydb");
        con = ds.getConnection();
        output.append("Databases found:<br>");
        stmt = con.createStatement();
        rs = stmt.executeQuery("show databases");
        while (rs.next()) {
          output.append(rs.getString(1));
          output.append("<br>");
        }
      }
      catch (Exception e) {
        output.append("Exception: ");
        output.append(e.getMessage());
        output.append("<br>");
      }
      finally {
        try {
          if (rs != null) {
            rs.close();
          }
          if (stmt != null) {
            stmt.close();
          }
          if (con != null) {
            con.close();
          }
        }
        catch (Exception e) {
          output.append("Exception (during close of connection): ");
          output.append(e.getMessage());
          output.append("<br>");
        }
      }
    %>
    <%= output.toString() %>
  </body>
</html>
```

SimpleJSP usa um objeto `DataSource` para se comunicar com o banco de dados MySQL. O Tomcat usa os dados no [web app context configuration file](create-custom-configure.md#create-custom-configure-context) para criar e inicializar um objeto `DataSource` e o associar a um nome lógico. Em seguida, ele registra o nome lógico usando um serviço de nomenclatura Java Naming and Directory Interface (JNDI). Para obter uma instância do objeto `DataSource` apropriado, você cria um objeto `InitialContext` e passa o nome lógico do recurso para o método `lookup` do objeto, que recupera o objeto apropriado. O nome lógico do exemplo SimpleJSP, `java:comp/env/jdbc/mydb`, tem os seguintes componentes:
+ O namespace raiz, `java`, separado do resto do nome por dois-pontos (:). 
+ Eventuais namespaces adicionais, separados por barras (/).

  O Tomcat adiciona automaticamente os recursos ao namespace `comp/env`.
+ O nome do recurso, definido no arquivo de configuração do contexto da aplicação da web e separado dos namespaces por uma barra.

  O nome do recurso deste exemplo é `jdbc/mydb`. 

Para estabelecer uma conexão com o banco de dados, SimpleJSP faz o seguinte:

1. Chama o método `DataSource` do objeto `getConnection`, que retorna um objeto `Connection`.

1. Chama o método `Connection` do objeto `createStatement` para criar um objeto `Statement`, que você usa para se comunicar com o banco de dados.

1. Comunica-se com o banco de dados chamando o método `Statement` apropriado.

   SimpleJSP chama `executeQuery` para executar uma consulta SHOW DATABASES, que lista os bancos de dados do servidor.

O método `executeQuery` retorna um objeto `ResultSet`, que contém os resultados da consulta. SimpleJSP obtém os nomes do banco de dados do objeto `ResultSet` retornado e os concatena para criar uma string de saída. Por fim, o exemplo fecha os objetos `ResultSet`, `Statement` e `Connection`. Para obter mais informações sobre JSP e JDBC, consulte [JavaServer Pages Technology](http://docs.oracle.com/javaee/5/tutorial/doc/bnagx.html) e [JDBC](http://docs.oracle.com/javase/tutorial/jdbc/basics/) Basics, respectivamente.

Para usar SimpleJSP com uma pilha, você deve colocá-lo em um repositório. Você pode usar qualquer um dos repositórios compatíveis, mas para usar SimpleJSP com a pilha de exemplo abordada na seção a seguir, você deve colocá-lo em um arquivo S3 público. Para obter informações sobre como usar os outros repositórios padrão, consulte [Repositórios de livro de receitas](workingcookbook-installingcustom-repo.md).

**Para colocar SimpleJSP em um repositório de arquivo S3**

1. Copie o código de exemplo para um arquivo chamado `simplejsp.jsp` e coloque o arquivo em um diretório chamado `simplejsp`.

1. Crie um arquivo `.zip` do diretório `simplejsp`.

1. Crie um bucket do Amazon S3 público, faça upload de `simplejsp.zip` no bucket e torne o arquivo público.

   Para obter uma descrição de como realizar esta tarefa, consulte [Começar a usar o Amazon Simple Storage Service](https://docs.aws.amazon.com/AmazonS3/latest/gsg/GetStartedWithS3.html).

## Criar um stack
<a name="create-custom-stack-stack"></a>

Para executar SimpleJSP você precisa de uma pilha com as camadas a seguir.
+ A camada do MySQL, que dá suporte ao servidor MySQL back-end.
+ Uma camada personalizada que usa o livro de receitas do Tomcat para dar suporte a instâncias do servidor Tomcat.

**Para criar a pilha**

1. No painel de OpsWorks pilhas, clique em **Adicionar pilha para criar uma nova pilha** e clique em **Avançado >>** para exibir todas as opções. Configure a pilha da maneira a seguir.
   + **Nome** — Um nome de pilha definido pelo usuário; este exemplo usa. TomStack
   + **Usar livros de receitas do Chef personalizados**: defina o botão seletor como **Sim** para exibir opções adicionais.
   + **Tipo de repositório**: Git.
   + **URL do repositório**: `git://github.com/amazonwebservices/opsworks-example-cookbooks.git`.
   + **JSON do Chef personalizado**: adicione o seguinte JSON:

     ```
     {
       "tomcat": {
         "base_version": 7,
         "java_opts": "-Djava.awt.headless=true -Xmx256m"
       },
       "datasources": {
         "ROOT": "jdbc/mydb"
       }
     }
     ```

   Para as opções restantes, você pode aceitar os valores padrão.

   O JSON personalizado faz o seguinte:
   + Substitui o atributo `['base_version']` do livro de receitas do Tomcat para definir o Tomcat versão como 7; o valor padrão é 6.
   + Substitui o atributo `['java_opts']` do livro de receitas do Tomcat para especificar que a instância é descentralizada e definir o tamanho máximo do heap do JVM como 256 MB; o valor padrão não define opções para instâncias que executem o Amazon Linux.
   + Especifica o valor do atributo `['datasources]`, que atribui um nome de recurso JDBC (jdbc/mydb) ao nome de contexto da aplicação da web (ROOT), conforme abordado em [tomcat::context](create-custom-configure.md#create-custom-configure-context).

     Este último atributo não tem valor padrão. Você deve defini-lo com JSON personalizado.  
![\[Configuration Management interface showing Chef version options and custom JSON input field.\]](http://docs.aws.amazon.com/pt_br/opsworks/latest/userguide/images/tom_add_stack.png)

1. Clique em **Add a layer**. Em **Layer type**, selecione **MySQL**. Em seguida, clique em **Add Layer**.

1. No painel de navegação, clique em **Instances** e em **Add an instance**. Clique em **Add Instance** para aceitar os padrões. Na linha da instância, clique em **start**.

1. Retorne à página **Layers** e clique em **\$1 Layer** para adicionar uma camada. Para **Layer type (Tipo de camada)**, clique em **Custom (Personalizado)**. O exemplo usa **TomCustom** e **tomcustom** como o nome da camada e o nome abreviado, respectivamente.  
![\[Add Layer form with Custom layer type, Name, and Short name fields for creating a customized layer.\]](http://docs.aws.amazon.com/pt_br/opsworks/latest/userguide/images/tom_add_custom_layer.png)

1. Na página **Layers**, para a camada personalizada, clique em **Recipes** e, em seguida, em **Edit**. Em **Custom Chef Recipes**, atribua as receitas do livro do Tomcat aos eventos do ciclo de vida da camada, da seguinte forma:
   + Para **Setup (Instalar)**, digite **tomcat::setup** e clique em **\$1**.
   + Para **Configure (Configurar)**, digite **tomcat::configure** e clique em **\$1**.
   + Para **Deploy (Implantar)**, digite **tomcat::deploy** e clique em **\$1**. Em seguida, clique em **Save**.

     .  
![\[Custom Chef Recipes interface showing setup, configure, and deploy steps with options.\]](http://docs.aws.amazon.com/pt_br/opsworks/latest/userguide/images/tom_events.png)

1. No painel de navegação, clique em **Apps** e em **Add an app**. Especifique as opções a seguir e clique em **Add App**:
   + **Nome** — O nome do aplicativo; o exemplo usa SimpleJSP e o nome curto gerado pelo OpsWorks Stacks será simplejsp.
   + **Tipo de aplicativo**: defina essa opção como **Outro**.

     OpsWorks O Stacks implanta automaticamente os tipos de aplicativos padrão nas instâncias do servidor associadas. Caso você defina **App type (Tipo de aplicativo)** como Other (Outro), o OpsWorks Stacks simplesmente executará as receitas de implantação e permitirá que elas lidem com a implantação.
   + **Raiz do documento**: defina essa opção como **ROOT**.

     O valor **Document root** especifica o nome do contexto.
   + **Tipo de repositório**: defina essa opção como **Arquivamento do S3**.
   + **URL do repositório**: defina como o URL do Amazon S3 do aplicativo que você criou anteriormente.

   Use as configurações padrão para as outras opções.  
![\[Application settings form with fields for name, app type, document root, and source details.\]](http://docs.aws.amazon.com/pt_br/opsworks/latest/userguide/images/tom_app.png)

1. Use a página **Instâncias** para adicionar uma instância à TomCustom camada e iniciá-la. OpsWorks O Stacks executa automaticamente as receitas de implantação em uma nova instância após a conclusão das receitas de configuração. Portanto, iniciar a instância também implanta o SimpleJSP.

1. Quando a TomCustom instância estiver on-line, clique no nome da instância na página **Instâncias** para ver seus detalhes. Copie o endereço IP público. Em seguida, construa uma URL da seguinte forma: http://*publicIP**appname.jsp*/tc/. Para o exemplo, esse URL será semelhante a **http://50.218.191.172/tc/simplejsp.jsp**.
**nota**  
O URL do Apache que encaminha solicitações para o Tomcat é definido como o atributo `['tomcat']['apache_tomcat_bind_path']` padrão, `/tc/`. A raiz do documento SimpleJSP é definida como `ROOT`, que é um valor especial resolvido como `/`. Por isso, o URL é ".../tc/simplejsp.jsp".

1. Cole o URL da etapa anterior no navegador. Você deve ver o seguinte:

   ```
   Databases found:
   information_schema
   simplejsp
   test
   ```
**nota**  
Se sua pilha tiver uma instância do MySQL OpsWorks , o Stacks cria automaticamente um banco de dados para cada aplicativo, nomeado com o nome abreviado do aplicativo.