IBM Cloud Docs
Trabalhando com apps no Code Engine

Trabalhando com apps no Code Engine

Um aplicativo ou app executa o seu código para entregar solicitações de HTTP. Além das solicitações de HTTP tradicionais, o IBM Cloud® Code Engine também suporta aplicativos que usam WebSockets como seu protocolo de comunicações. O número de instâncias em execução de um aplicativo é automaticamente aumentado ou reduzido (para zero) com base nas solicitações recebidas e em suas definições de configuração. Um app contém uma ou mais revisões. Uma revisão representa uma versão imutável das propriedades de configuração do app. Cada atualização de uma propriedade de configuração do app cria uma nova revisão do app.

Antes de Iniciar

Para recursos de segurança fornecidos com Code Engine, consulte Code Engine e segurança.

O Code Engine fornece métodos de definição de recurso customizado (CRD). Para obter mais informações, consulte Servendo métodos CRD.

Não tem certeza de qual tipo de carga de trabalho do Code Engine criar? Consulte Planejamento do Code Engine.

Como fazer para que meu código seja executado como um componente de aplicativo do Code Engine?

Não importa se o seu código existe como código-fonte em um arquivo local ou em um repositório Git, ou se o seu código é uma imagem de contêiner existente em um registro público ou privado, Code Engine oferece uma maneira simplificada de executar seu código como um aplicativo.

  • Se você tiver uma imagem de contêiner, de acordo com o padrão Open Container Initiative(OCI), precisará fornecer apenas uma referência à imagem, que aponta para o local do registro do contêiner ao criar e implantar o aplicativo. Você pode implementar o seu app com uma imagem em um registro público ou registro privado.

  • Se você está começando com código-fonte que reside em um repositório Git, é possível optar por deixar que o Code Engine cuide da construção da imagem por meio de sua origem e implemente o app com uma operação única. Neste cenário, o Code Engine faz upload da sua imagem para o IBM Cloud® Container Registry. Para saber mais, consulte Implementando seu app por meio do código-fonte do repositório. Se você quiser mais controle sobre a construção da sua imagem, poderá optar por construir a imagem com o Code Engine antes de criar e implementar seu app.

  • Se você está começando com código-fonte que reside em uma estação de trabalho local, é possível optar por deixar que o Code Engine cuide da construção da imagem por meio de sua origem e implemente o app com um comando da CLI único. Neste cenário, o Code Engine faz upload da sua imagem para o IBM Cloud® Container Registry. Para saber mais, consulte Implementando seu app por meio do código-fonte local com a CLI. Se você quiser mais controle sobre a construção da sua imagem, poderá optar por construir a imagem com o Code Engine antes de criar e implementar seu app.

Após a implementação do app, também é possível atualizar o app implementado usando qualquer uma das maneiras anteriores, independentemente de como você criou ou atualizou previamente seu app.

Ao implementar seu aplicativo, a versão mais recente de sua imagem de contêiner referenciada é transferida por download e implementada, a menos que uma tag seja especificada para a imagem. Se uma tag for especificada para a imagem, a imagem marcada será usada para a implementação.

A imagem associada à sua revisão de aplicativo específica tem uma compilação de registro de contêiner exclusiva e o Code Engine usa essa compilação para a vida de sua revisão de aplicativo. Se você criar uma versão mais recente de uma imagem com a mesma tag que a imagem original, a imagem original será sobrescrita no registro de contêiner e se tornará não identificada A imagem mais recente é identificada e essa imagem mais recente tem uma compilação diferente.... Seu aplicativo Code Engine não usa essa imagem mais recente, porque a imagem mais nova tem uma compilação diferente da imagem referenciada pela revisão do aplicativo. Code Engine ainda pode criar novas instâncias da revisão do aplicativo, desde que a imagem não identificada, que foi referenciada originalmente, ainda exista. Para obter mais informações, consulte Por que o Code Engine não pode extrair uma imagem?

O URL padrão para aplicativos tem o formato https://<appname>.<uuid>.<region>.codeengine.appdomain.cloud, em que appname é o nome do seu aplicativo, uuid é o identificador exclusivo gerado automaticamente e region é a região em que o projeto Code Engine reside. A parte UUID do URL de um aplicativo tem o formato aaaabbbbccc. O URL do aplicativo gerado automaticamente persiste durante o ciclo de vida do projeto do seu aplicativo.

Para obter mais informações sobre terminais para acessar aplicativos por região, consulte Code Engine terminais para acessar aplicativos.

O que eu preciso saber sobre portas para apps no Code Engine?

Por padrão, o Code Engine assume que os apps atendem as conexões recebidas na porta 8080. Além disso, Code Engine define a variável de ambiente " PORT como o valor da porta em que se espera que o aplicativo esteja escutando. Se o seu aplicativo precisar escutar em uma porta diferente da porta ' 8080, implemente o aplicativo a partir do console e especifique a porta correta ou use a opção ' --port no comando ' app create. Para obter mais informações sobre variáveis de ambiente que são configuradas pelo Code Engine, consulte Variáveis de ambiente injetadas automaticamente. As seguintes portas são reservadas por Code Engine: 8022, 8008, 8012, 9090, 9091 e 15090. Apenas uma porta pode ser exposta como porta de atendimento.

As conexões de entrada para Code Engine por HTTP na Internet usam a porta 80. As conexões de entrada para Code Engine por HTTPS na Internet usam a porta 443

Se uma varredura de porta mostrar mais portas abertas, consulte Por que minha varredura de porta mostra mais portas abertas do que o esperado?

Considerações para manipulação de HTTP

Quando você está trabalhando com aplicativos (ou tarefas), é útil estar ciente do tratamento HTTP básico em Code Engine.

  • Para conexões de aplicativos recebidas que utilizam HTTP, os aspectos de segurança da camada de transporte (TLS) são gerenciados automaticamente pelo Code Engine fora do código de aplicação. O servidor HTTP para o aplicativo precisa estar preocupado apenas com a conectividade HTTP e não a conectividade HTTPS. Em particular, Code Engine usa Cloud Internet Services (CIS) em IBM Cloud, que é baseado no CloudFlare, como o sistema de prevenção de intrusão (IPS) para proteção de DNS e DDOS na camada 4. Em outras palavras, a conexão TCP/IP estabelecida no IPS é de propriedade e gerenciada pelo Cloudflare. Para obter mais informações, consulte a documentação do Cloudflare

  • As conexões de Internet que são ligadas para os aplicativos Code Engine são automaticamente redirecionadas para usar HTTPS.

  • As conexões de saída de aplicativos para outros aplicativos Code Engine são automaticamente protegidas por TLS. Code Engine gerencia automaticamente essa conectividade, portanto, o protocolo (ou URL) que é usado é HTTP e não HTTPS.

  • Conexões de saída de aplicativos para aplicativos não Code Engine , como a Internet, usam HTTP ou HTTPS dependendo do protocolo que é especificado no código do app ou URL.

  • As conexões de saída de tarefas em lote usam o protocolo HTTP ou HTTPS que é especificado no código de tarefas ou URL. Esse comportamento inclui conexões de tarefas em lote para apps do Code Engine.

Opções de visibilidade para um aplicativo Code Engine

Com Code Engine, você pode determinar o nível certo de visibilidade do seu aplicativo definindo os pontos de extremidade ou mapeamentos de domínio do sistema que estão disponíveis para receber solicitações.

Todo aplicativo tem um mapeamento interno do domínio do sistema que é visível para todos os componentes dentro do mesmo projeto Code Engine, mas não fora do projeto. Além do mapeamento de domínio do sistema interno, você opta por tornar visível o aplicativo para a internet pública ou a rede IBM Cloud privada.

Para visibilidade pública ou privada, o aplicativo é exposto em um ponto de extremidade HTTPS. Para obter detalhes sobre o certificado TLS que é usado, consulte Certificados TLS para projetos Code Engine.

Você pode implementar seu aplicativo com os seguintes níveis de visibilidade:

Visibilidade para aplicativos
Configuração Descrição
interno(projeto) Um app com esta configuração pode receber solicitações de componentes no mesmo projeto do Code Engine. Definir um endpoint interno (do projeto) significa que seu aplicativo não pode ser acessado pela Internet pública e que o acesso à rede só é possível a partir de outros componentes Code Engine que estejam em execução no mesmo projeto Code Engine. Este terminal está sempre ativado.
público Um app com esta configuração é exposto à Internet e ao seu projeto Code Engine. Configurar um terminal público significa que o seu app pode receber solicitações da Internet pública ou de componentes dentro do seu projeto Code Engine. Essa configuração é a padrão.
privado Um app com esta configuração é exposto à rede privada do IBM Cloud e ao seu projeto do Code Engine. Definir um ponto de extremidade privado significa que seu aplicativo não pode ser acessado pela Internet pública e que o acesso à rede só é possível a partir de outros serviços IBM Cloud usando pontos de extremidade privados virtuais (VPE) ou componentes Code Engine que estejam em execução no mesmo projeto.

É possível definir as configurações do terminal para visibilidade de um aplicativo por meio do console ou com a CLI quando você cria e implementa ou atualiza seu app.

Implementando seu app com um terminal público

Quando você implanta um aplicativo, por padrão, o aplicativo é implantado de forma que possa receber solicitações da Internet pública ou de componentes dentro do mesmo projeto Code Engine. Nesse caso, o app é implementado com um terminal público.

Implementando seu app com um terminal privado

É possível configurar a visibilidade do terminal para o seu app de tal forma que ele seja implementado com um terminal privado. A definição de um endpoint privado significa que seu aplicativo não pode ser acessado pela Internet pública e que o acesso à rede só é possível a partir de outros serviços IBM Cloud de endpoints privados virtuais (VPE) ou componentes Code Engine que estejam em execução no mesmo projeto (cluster-local).

Por exemplo, se a sua solução consiste em um componente que está em execução em um cluster Kubernetes do IBM Cloud Kubernetes Service dentro do seu próprio terminal privado virtual e você quiser acessar o aplicativo Code Engine por meio da rede privada da IBM Cloud, poderá configurar a visibilidade do aplicativo para privado. Quando a visibilidade do aplicativo é definida como privada, o aplicativo não pode ser acessado pela Internet pública. O aplicativo ainda está acessível por meio de outros aplicativos dentro do projeto.

É possível implementar seu aplicativo com um terminal privado para que o app seja exposto somente por meio da rede privada da IBM Cloud e não exposto à Internet externa. O aplicativo ainda pode ser acessado por meio de componentes compartilhados de dentro da rede interna e o terminal do aplicativo precisa ser protegido.

Com a CLI, configure a visibilidade do terminal para o seu app para que ele seja implementado com um terminal privado, utilizando a opção --visibility=private no comando app create ou app update. É possível obter as URLs disponíveis para o seu app que refletem sua definição de terminal usando o comando app get.

No console, defina a visibilidade dos pontos de extremidade do seu aplicativo usando a configuração Pontos de extremidade ao criar o aplicativo. Após o seu app ser implementado, você pode visualizar e modificar essas configurações de mapeamento de domínio do sistema na guia mapeamentos de Domínio em sua página de aplicativos.

Para obter mais informações sobre a conexão em redes privadas, consulte Usando terminais privados virtuais com o Code Engine.

Implementando seu app com um terminal de projeto

Você pode definir a visibilidade do endpoint do seu aplicativo de forma que ele seja implantado com um endpoint interno (do projeto). A definição de um endpoint somente de projeto significa que seu aplicativo não pode ser acessado pela Internet pública e que o acesso à rede só é possível a partir de outros componentes Code Engine que estejam em execução no mesmo projeto Code Engine. Este terminal está sempre ativado. Os aplicativos ainda são acessíveis por meio de componentes compartilhados e, portanto, precisam ser protegidos.

Por exemplo, se a sua solução consiste em vários aplicativos dentro de um projeto, é possível configurar sua solução de tal forma que apenas um desses aplicativos esteja visível por meio da Internet para que ele manipule o tráfego de entrada. Esse aplicativo voltado para o público pode delegar trabalho para outros aplicativos em sua solução para que eles não precisem ser visíveis na Internet.

Com a CLI, configure a visibilidade do terminal para o seu app para que ele seja implementado com um terminal de projeto, utilizando a opção --visibility=project no comando app create ou app update. É possível obter as URLs disponíveis para o seu app que refletem sua definição de terminal usando o comando app get.

No console, defina a visibilidade dos pontos de extremidade do seu aplicativo usando a configuração Pontos de extremidade ao criar o aplicativo. Após o seu app ser implementado, você pode visualizar e modificar essas configurações de mapeamento de domínio do sistema na guia mapeamentos de Domínio em sua página de aplicativos.

Opções para implementar um aplicativo Code Engine

Saiba mais sobre as opções que você pode especificar ao implementar o seu app. Observe que as opções podem variar entre o console e a CLI.

Memória e CPU

Ao implementar o seu app, é possível especificar a quantidade de memória e CPU que seu app pode consumir. Essas quantidades podem variar, dependendo se seu app faz processamento intensivo de informações, faz uso intensivo de memória ou é balanceado.

Por padrão, seu aplicativo recebe 4 G de memória e 1 vCPU. Para obter mais informações sobre a seleção de memória e CPU, consulte Combinações de memória e CPU suportadas.

Implementando o seu app com comandos e argumentos

É possível definir comandos e argumentos para o seu aplicativo para usar no tempo de execução.

Defina comandos e argumentos para o seu aplicativo incluindo as opções --cmd e --arg para o seu comando app create.

ibmcloud ce app create --name myapp --image icr.io/codeengine/hello --cmd /myapp --arg --debug

Para obter mais informações sobre como usar cmd e arg, consulte Definindo comandos e argumentos para as suas cargas de trabalho do Code Engine.

Criando e executando seu app com variáveis de ambiente

É possível definir e configurar variáveis de ambiente como pares chave-valor que podem ser usados pelo seu aplicativo no tempo de execução.

É possível definir variáveis de ambiente quando você cria seu aplicativo ou quando atualiza um aplicativo existente por meio do console ou com a CLI.

Para obter mais informações sobre a definição de variáveis de ambiente, consulte Trabalhando com variáveis de ambiente.

O Code Engine injeta automaticamente determinadas variáveis de ambiente no app. Para obter mais informações sobre variáveis de ambiente injetadas automaticamente, consulte Variáveis de ambiente injetadas automaticamente.

Criando e executando seu app ao usar segredos e configmaps

No Code Engine, os segredos e configmaps podem ser consumidos pelo seu aplicativo usando variáveis de ambiente.

Os segredos e configmaps são pares chave-valor. Quando mapeados para variáveis de ambiente, os relacionamentos NAME=VALUE são configurados de tal forma que o nome da variável de ambiente corresponde à "key" de cada entrada nesses mapas, e o valor da variável de ambiente é o "value" dessa chave.

Seu aplicativo pode usar variáveis de ambiente para referenciar totalmente um configmap (ou segredo) ou para referenciar chaves individuais em um configmap (ou segredo).

Para obter mais informações, consulte Referenciando segredos usando variáveis de ambiente e Referenciando configmaps usando variáveis de ambiente.

Considerações sobre cotas de aplicação

Ao trabalhar com aplicativos, funções e tarefas em lote, esses recursos são executados no contexto de um projeto do Code Engine. As cotas de recursos são definidas por projeto e os limites se aplicam a aplicativos, funções e tarefas em lote.

Para obter mais informações sobre limites do Code Engine, consulte Limites e cotas para o Code Engine.

Próximas etapas

Agora que você está familiarizado com os principais conceitos de trabalho com aplicativos Code Engine, está pronto para implementar e trabalhar com apps? Consulte

Para obter mais informações sobre como trabalhar com aplicativos, consulte