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 que tipo de carga de trabalho do Code Engine deseja criar? Consulte Planejamento do Code Engine.

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

Independentemente de seu código existir como código-fonte em um arquivo local ou em um repositório Git, ou de seu código ser uma imagem de contêiner existente em um registro público ou privado, o 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 à revisão específica do aplicativo tem um resumo de registro de contêiner exclusivo, e o site Code Engine usa esse resumo durante toda a vida útil da revisão do 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 recente tem um resumo diferente da imagem referenciada pela revisão do aplicativo. O Code Engine ainda pode criar novas instâncias da revisão do aplicativo, desde que a imagem sem marcação, que foi referenciada originalmente, ainda exista. Para obter mais informações, consulte Por que o site Code Engine não consegue 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 seu projeto Code Engine reside. A parte UUID do URL de um aplicativo tem o formato aaaabbbbccc. O aplicativo gerado automaticamente URL 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, o site 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, implante o aplicativo no console e especifique a porta correta ou use a opção --port no comando app create comando. 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 em HTTP na Internet usam a porta 80. As conexões de entrada para Code Engine em 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 se baseia em CloudFlare, como sistema de prevenção de intrusão (IPS) para proteção de DNS e DDOS na camada 4. A conexão TCP/IP que é estabelecida no IPS é de propriedade e gerenciada pela 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 o Code Engine, você pode determinar o nível certo de visibilidade para o seu aplicativo definindo os pontos de extremidade ou mapeamentos de domínio do sistema que estão disponíveis para receber solicitações.

Cada aplicativo tem um mapeamento de domínio de sistema interno 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 endpoint 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. A definição de 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 do 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. 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 usando Virtual Private Endpoints (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 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. Definir 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 de componentes Code Engine que estejam sendo executados 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 modo que ele seja implantado com um endpoint interno (do projeto). Definir 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 do Code Engine que estejam sendo executados 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