Implementação e escalonamento de aplicativos
Com este tutorial, implemente um aplicativo com a CLI do Code Engine. O aplicativo é escalado para zero quando não está em uso.
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
Todos os usuários do Code Engine são obrigados a ter uma conta pré-paga. Os tutoriais podem gerar custos adicionais. Use o Estimador de custos para gerar uma estimativa de custo com base em seu uso planejado. Para obter mais informações, consulte Code Engine precificação.
Selecionar um arquivo de imagem
Este tutorial usa uma imagem de amostra, icr.io/codeengine/hello, que é um programa Hello World simples. O programa inclui uma variável de ambiente TARGET e imprime Hello ${TARGET}. Se a variável
de ambiente estiver vazia, o Hello World será retornado. Para obter mais informações sobre o código que é usado para este exemplo, consulte hello.
Se você tiver uma imagem de contêiner que deseja usar, será possível substituir a referência de imagem na próxima etapa pelo seu próprio repositório do Docker, o nome da imagem e a versão.
Criando e implementando um aplicativo
-
Crie seu aplicativo usando o comando
ibmcloud ce application create. No exemplo a seguir, usemyappcomo o nome do aplicativo e especifiqueicr.io/codeengine/hellocomo a imagem a ser referência.ibmcloud ce application create --name myapp --image icr.io/codeengine/helloSaída de exemplo
Creating application 'myapp'... [...] Run 'C:\Program Files\IBM\Cloud\bin\ibmcloud.exe ce application get -n myapp' to check the application status. OK https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud -
Execute o comando
ibmcloud ce application getpara exibir detalhes sobre o aplicativo, incluindo a URL para o aplicativomyapp.ibmcloud ce application get -n myappSaída de exemplo
Run 'ibmcloud ce application events -n myapp' to get the system events of the application instances. Run 'ibmcloud ce application logs -f -n myapp' to follow the logs of the application instances. OK Name: myapp ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 3m6s Created: 2021-07-11T06:39:41-05:00 URL: https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.4svg40kna19.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal CE_API_BASE_URL https://api.private.us-south.codeengine.cloud.ibm.com Literal CE_APP myapp Literal CE_DOMAIN us-south.codeengine.appdomain.cloud Literal CE_PROJECT_ID abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Literal CE_REGION us-south Literal CE_SUBDOMAIN abcdabcdab Image: icr.io/codeengine/hello Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Revisions: myapp-huv70-1: Age: 3m6s Traffic: 100% Image: icr.io/codeengine/hello (pinned to f0dc03) Running Instances: 1 Runtime: Concurrency: 100 Maximum Scale: 10 Minimum Scale: 0 Timeout: 300 Conditions: Type OK Age Reason ConfigurationsReady true 52s Ready true 26s RoutesReady true 26s Events: Type Reason Age Source Messages Normal Created 3m9s service-controller Created Configuration "myapp" Normal Created 3m9s service-controller Created Route "myapp" Instances: Name Revision Running Status Restarts Age myapp-huv70-1-deployment-6656cfc796-7gl27 myapp-huv70-1 1/2 Terminating 0 3m9s -
Obtenha a URL do aplicativo por meio da execução do comando
application get, conforme descrito na etapa anterior. Para recuperar a URL do aplicativo diretamente, é possível usar a opção--outpute especificar o formato de URL no comandoapplication get. Além disso, é possível executar o comandoibmcloud ce application listpara obter a URL do aplicativo.ibmcloud ce application get -n myapp -output urlSaída de exemplo
https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud -
Copie a URL da saída anterior e chame o aplicativo com
curl.curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloudSaída de exemplo
Hello World
Você implementou e iniciou um aplicativo do Code Engine com êxito.
Atualizando seu aplicativo
-
Atualize o seu aplicativo recém-criado incluindo uma variável de ambiente para retornar
Hello Strangerusando o comandoibmcloud ce application update.ibmcloud ce application update --name myapp --env TARGET=StrangerSaída de exemplo
Updating application 'myapp' to latest revision. [...] Run 'ibmcloud ce application get -n myapp' to check the application status. OK https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud -
Use o comando
application getpara exibir detalhes sobre seu app, incluindo as informações de revisão mais recentes.ibmcloud ce application get --name myappSaída de exemplo
Run 'ibmcloud ce application events -n myapp' to get the system events of the application instances. Run 'ibmcloud ce application logs -f -n myapp' to follow the logs of the application instances. OK Name: myapp ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 3m6s Created: 2021-07-11T06:39:41-05:00 URL: https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.4svg40kna19.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal CE_API_BASE_URL https://api.private.us-south.codeengine.cloud.ibm.com Literal CE_APP myapp Literal CE_DOMAIN us-south.codeengine.appdomain.cloud Literal CE_PROJECT_ID abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Literal CE_REGION us-south Literal CE_SUBDOMAIN abcdabcdab Literal TARGET Stranger Image: icr.io/codeengine/hello Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal TARGET Stranger Image: icr.io/codeengine/hello Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Revisions: myapp-00002: Age: 54m Traffic: 100% Image: icr.io/codeengine/hello (pinned to f0dc03) Running Instances: 1 Runtime: Concurrency: 100 Maximum Scale: 10 Minimum Scale: 0 Timeout: 300 Conditions: Type OK Age Reason ConfigurationsReady true 25s Ready true 11s RoutesReady true 11s Events: Type Reason Age Source Messages Normal Created 4m17s service-controller Created Configuration "myapp" Normal Created 4m17s service-controller Created Route "myapp" Instances: Name Revision Running Status Restarts Age myapp-00001-deployment-bf7559548-mxgvq myapp-00001 2/3 Terminating 0 4m55s myapp-00002-deployment-8495f8ccb9-kmc57 myapp-00002 3/3 Running 0 88sNa saída na seção Revisões, é possível ver a revisão de aplicativo mais recente do serviço
myapp. Além disso, observe que 100% do tráfego para o aplicativo está executando a revisão mais recente do app. -
Chame o aplicativo.
curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloudSaída de exemplo
Hello Stranger
Na saída deste comando, agora é possível ver o app atualizado retornar Hello Stranger.
Escalando seu aplicativo (escalar para zero e escalar de zero)
O número de instâncias em execução de um aplicativo é automaticamente aumentado ou diminuído (para zero) com base na carga de trabalho recebida.
O exemplo a seguir ilustra como escalar seu aplicativo com a CLI. É possível controlar os números máximo e mínimo de instâncias em execução de seu app, mudando os valores das opções --min-scale e --max-scale com o comando
application create ou application update.
-
Chame o aplicativo.
curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud -
Execute o comando
application getpara exibir o status de seu aplicativo. Observe o valor paraRunning instances. Neste exemplo, o app tem1instância em execução.ibmcloud ce application get --name myappSaída de exemplo
[...] Name: myapp [...] URL: https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.4svg40kna19.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal CE_API_BASE_URL https://api.private.us-south.codeengine.cloud.ibm.com Literal CE_APP myapp Literal CE_DOMAIN us-south.codeengine.appdomain.cloud Literal CE_PROJECT_ID abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Literal CE_REGION us-south Literal CE_SUBDOMAIN abcdabcdab Literal TARGET Stranger Image: icr.io/codeengine/hello Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Revisions: myapp-00002: Age: 58m Traffic: 100% Image: icr.io/codeengine/hello (pinned to f0dc03) Running Instances: 1 Runtime: Concurrency: 100 Maximum Scale: 10 Minimum Scale: 0 Timeout: 300 Conditions: Type OK Age Reason ConfigurationsReady true 57m Ready true 57m RoutesReady true 57m Events: Type Reason Age Source Messages Normal Created 4m17s service-controller Created Configuration "myapp" Normal Created 4m17s service-controller Created Route "myapp" Instances: Name Revision Running Status Restarts Age myapp-00002-deployment-8495f8ccb9-kmc57 myapp-00002 3/3 Running 0 16m -
Execute o comando
application getnovamente e observe que o valor paraRunning instancesfoi escalado para zero. Quando o aplicativo tiver concluído a execução, o número de instâncias em execução escalará automaticamente para zero se a opção--min-scalefor configurada como0, que é o valor padrão.ibmcloud ce application get -n myappSaída de exemplo
[...] URL: https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.4svg40kna19.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal CE_API_BASE_URL https://api.private.us-south.codeengine.cloud.ibm.com Literal CE_APP myapp Literal CE_DOMAIN us-south.codeengine.appdomain.cloud Literal CE_PROJECT_ID abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Literal CE_REGION us-south Literal CE_SUBDOMAIN abcdabcdab Literal TARGET Stranger Image: icr.io/codeengine/hello Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Revisions: myapp-huv70-2 Age: 13m Traffic: 100% Image: icr.io/codeengine/hello (pinned to 548d5c) Running Instances: 0 Runtime: Concurrency: 100 Maximum Scale: 10 Minimum Scale: 0 Timeout: 300 Conditions: Type OK Age Reason ConfigurationsReady true 13m Ready true 13m RoutesReady true 13m Events: Type Reason Age Source Messages Normal Created 4m17s service-controller Created Configuration "myapp" Normal Created 4m17s service-controller Created Route "myapp" Instances: Name Revision Running Status Restarts Age myapp-00002-deployment-8495f8ccb9-kmc57 myapp-00002 3/3 Running 0 16mYour application scaled down to zero.
-
Chame o aplicativo novamente para ajustar a escala de zero.
-
Execute o comando
application getnovamente e observe que o valor paraRunning instancesteve a escala ajustada de zero e que as informações sobre a instância são exibidas.ibmcloud ce application get -n myappSaída de exemplo
Name: myapp [...] URL: https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.4svg40kna19.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully Environment Variables: Type Name Value Literal CE_API_BASE_URL https://api.private.us-south.codeengine.cloud.ibm.com Literal CE_APP myapp Literal CE_DOMAIN us-south.codeengine.appdomain.cloud Literal CE_PROJECT_ID abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Literal CE_REGION us-south Literal CE_SUBDOMAIN abcdabcdab Literal TARGET Stranger Image: icr.io/codeengine/hello Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Revisions: myapp-huv70-2: Age: 3h11m Traffic: 100% Image: icr.io/codeengine/hello (pinned to f0dc03) Running Instances: 1 Runtime: Concurrency: 100 Maximum Scale: 10 Minimum Scale: 0 Timeout: 300 Conditions: Type OK Age Reason ConfigurationsReady true 3h10m Ready true 3h10m RoutesReady true 3h10m Events: Type Reason Age Source Messages Normal Created 4m17s service-controller Created Configuration "myapp" Normal Created 4m17s service-controller Created Route "myapp" Instances: Name Revision Running Status Restarts Age myapp-00002-deployment-8495f8ccb9-kmc57 myapp-00002 3/3 Running 0 16m
A capacidade de seu aplicativo é aumentada novamente.
Para obter mais informações sobre o ajuste de escala do seu app, consulte Configurando o ajuste de escala do aplicativo.
Próximas etapas
-
Após a implementação do app, acesse-o por meio de uma URL.
-
É possível criar um mapeamento de domínio customizado e designá-lo ao seu app Para obter mais informações sobre a implementação de apps em diversas regiões com um nome de domínio customizado, consulte Configurando um aplicativo altamente disponível
-
Agora que seu aplicativo está implantado, considere a possibilidade de torná-lo orientado por eventos. Usando assinaturas de eventos, é possível acionar seus apps por planejamentos periódicos ou configurar seu app para reagir a eventos como uploads de arquivos ou mensagens doKafka.
Após a implementação do app, também é possível atualizar o app implementado e seu código referenciado usando qualquer uma das maneiras a seguir, independentemente de como você criou ou atualizou previamente seu app:
-
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 implantar o aplicativo. Você pode implementar o seu app com uma imagem em um registro público ou registro privado.
Se você criou o seu app usando o comando
app createe especificou a opção--build-sourcepara construir a imagem do container a partir de origem local ou repositório, e deseja alterar seu app para apontar para uma imagem de contêiner diferente, deve-se primeiro remover a associação da construção a partir do seu app. Por exemplo, executeibmcloud ce application update -n APP_NAME --build-clear. Depois de remover a associação da construção a partir do seu app, você pode atualizar o app para referencia uma imagem diferente. -
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 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 implementar seu app.
Por exemplo, você pode optar por deixar que o Code Engine cuide da construção de sua origem local enquanto você cuida do desenvolvimento de sua origem para o app. Em seguida, após o amadurecimento da imagem, é possível atualizar o app implementado para referenciar a imagem específica que desejar. É possível repetir esse processo conforme necessário.
Ao implementar seu app atualizado, 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.
Procurando mais exemplos de código? Confira as Amostras para IBM Cloud Code Engine GitHub repo.