Criação de cargas de trabalho de função com código-fonte de repositório
Você pode criar sua função diretamente a partir do código-fonte localizado em um repositório do Git, pelo console do IBM Cloud® Code Engine ou pela CLI.
Um pacote de código é uma coleção de arquivos que representa seu código de função. Esse pacote de código é injetado no contêiner de tempo de execução. Seu pacote de código é criado pelo site Code Engine e é armazenado no registro do contêiner ou em linha com a função. Um pacote de código não é uma imagem de contêiner padrão da Open Container Initiative (OCI).
Nesse cenário, o Code Engine cria um pacote de códigos a partir da fonte do repositório Git, faz upload automático do pacote de códigos para o registro do contêiner e, em seguida, cria a função para fazer referência a esse pacote de códigos criado. Você precisa fornecer apenas um nome para a função, o endereço URL para o repositório Git e o tempo de execução da função. Neste caso, o Code Engine gerencia o namespace para você. No entanto, se você quiser usar um registro de contêineres diferente, será necessário especificar o pacote de código e um segredo de registro para esse registro de contêineres.
Para obter informações sobre permissões necessárias para acessar registros de imagens, consulte Configurando autoridades para registros de imagens.
Criação de cargas de trabalho de função com código-fonte de repositório a partir do console
Crie uma função com o código-fonte do console.
- Abra o Code Engine console.
- Selecione “Começar a criar ”.
- Selecione um projeto na lista de projetos disponíveis. Também é possível criar um novo. Você deve selecionar um projeto para criar uma função.
- Selecione “Função ”.
- Digite um nome para a função; por exemplo,
myfunction. Use um nome para sua função que seja exclusivo dentro do projeto. - Selecione uma imagem de tempo de execução para seu código de função. Para obter mais informações, consulte Tempos de execução.
- Selecione essa opção para compilar o pacote de código a partir do código-fonte. Quando você seleciona essa opção, sua função é criada a partir do código-fonte e armazenada no registro do contêiner.
- Selecione um repositório de origem, por exemplo,
https://github.com/IBM/CodeEngine. Se você optar por usar a fonte de amostra, não precisará exigir credenciais para poder selecionarNonepara o acesso ao repositório de código. É possível, opcionalmente, fornecer um nome de ramificação. Se você não fornecer um nome de ramificação e deixar o campo vazio, o Code Engine usará automaticamente a ramificação padrão do repositório especificado. Clique em Avançar. - Selecione uma estratégia e os recursos para sua construção. Para obter mais informações sobre as opções de construção, consulte Planejando sua construção. Clique em Avançar.
- Selecione um local de registro de contêiner, como
IBM Registry Dallaspara especificar onde armazenar a imagem de sua saída de construção. Se o seu registro for privado, a configuração de acesso a ele deverá ser feita. - Forneça informações de registro sobre onde armazenar a imagem de sua saída de construção. Selecione um segredo do Registro já existente ou crie um novo. Se você está construindo sua imagem para uma instância do Container Registry
que está em sua conta, é possível selecionar o
Code Engine managed secrete deixar o Code Engine criar e gerenciar o segredo para você. - Selecione um namespace, um nome e uma tag para sua imagem. Se você está construindo sua imagem para uma instância do Container Registry que está em sua conta, é possível selecionar um namespace existente ou deixar o Code Engine criar e gerenciar o namespace para você. Para obter ajuda adicional, clique em Help me specify the code bundle (Ajude-me a especificar o pacote de códigos ). Para obter mais informações, consulte Acessando registros de contêiner.
- Especifique suas informações de recursos, incluindo combinações de CPU e memória e atraso de redução de escala.
- Opcionalmente, especifique um domínio personalizado ou variáveis de ambiente. Você pode adicionar essas opções posteriormente.
- Clique em Criar.
- Depois que o status da função mudar para “Pronto”, você poderá testá-la. Clique em Função de teste e, em seguida, clique em Enviar solicitação. Para abrir a função em uma página da web, clique em Função URL.
- Você também pode alterar seu código de função na janela Editor. Quando você reimplanta sua função, o código é armazenado em linha.
Você pode invocar sua função clicando em Testar função e, em seguida, em Enviar solicitação.
Criação de cargas de trabalho de função com código-fonte de repositório com a CLI
Use o comando function create para criar um pacote de código a partir da fonte do repositório Git e criar sua função para fazer referência a esse pacote de código criado. Para obter uma lista completa das opções,
consulte o ibmcloud ce function create comando.
Antes de Iniciar
- Configure o seu ambiente da CLI do Code Engine.
- Criar e trabalhar com um projeto.
O exemplo a seguir function create cria a função myfun, que faz referência ao código localizado em https://github.com/IBM/CodeEngine. Esse comando cria automaticamente o pacote de código
e faz o upload dele em um espaço de nome IBM Cloud® Container Registry em sua conta. A função faz referência a esse pacote de código criado. Ao especificar a opção --build-context-dir, a construção usa a origem no diretório helloworld-samples/function-codebundle-nodejs.
ibmcloud ce function create --name myfun --runtime nodejs --build-source https://github.com/IBM/CodeEngine --build-context-dir /helloworld-samples/function-codebundle-nodejs
Exemplo de saída
Preparing function 'myfun' for build push...
Creating function 'myfun'...
Submitting build run 'myfun-run-230111-111212718'...
Creating image 'icr.io/ce--abcde-glxo4kabcde/function-myfun:230111-1532-vwo4o'...
Waiting for build run to complete...
Build run status: 'Running'
Build run completed successfully.
Run 'ibmcloud ce buildrun get -n myfun-run-230111-111212718' to check the build run status.
Waiting for function 'myfun' to become ready...
Function 'myfun' is ready.
OK
Run 'ibmcloud ce function get -n myfun' to see more details.
https://myfun.11a66hbi3rhz.us-south.codeengine.appdomain.cloud
Observe que a saída do comando function create fornece informações sobre a progressão da execução da compilação antes de a função ser criada.
Neste exemplo, o pacote de código compilado é enviado para o namespace ce--abcde-4svg40kna19 em Container Registry.
A tabela a seguir resume as opções utilizadas com o function create comando neste exemplo. Para obter mais informações sobre o comando e suas opções, consulte o ibmcloud ce function create comando.
| Opção | Descrição |
|---|---|
--name |
O nome da função. Use um nome que seja exclusivo dentro do projeto. Esse valor é necessário.
|
--build-source |
A URL do repositório Git que contém o seu código-fonte; por exemplo, https://github.com/IBM/CodeEngine. |
--build-context-dir |
O diretório no repositório que contém o código. Este valor é opcional. |
--runtime |
O tempo de execução da função. |
A saída a seguir mostra o resultado do comando function get para este exemplo, incluindo informações sobre a construção.
Exemplo de saída
Getting function 'myfun'
'...
OK
Name: myfun
Project Name: sample
Project ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Age: 27m
Created: 2023-06-27T21:07:26Z
Visibility: public
URL: https://myfun.13c66hbi3rhz.us-south.codeengine.appdomain.cloud
Internal URL: http://myfun.13c66hbi3rhz.function.cluster.local
Resources:
CPU: 0.25
Memory: 500M
Timeout: 60 seconds
Scale Down Delay: 1 seconds
Trusted profiles: disabled
Environment Variables:
Type Name Value
Literal CE_API_BASE_URL https://api.us-south.codeengine.cloud.ibm.com
Literal CE_DOMAIN us-south.codeengine.appdomain.cloud
Literal CE_FUNCTION myfun
Literal CE_REGION us-south
Literal CE_SUBDOMAIN 13c66hbi3rhz
Literal CE_PROJECT_ID abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Build Information:
Build Run Name: myfun-run-230111-111212718
Build Type: git
Build Strategy: codebundle-nodejs-22
Timeout: 600
Source: https://github.com/IBM/CodeEngine
Context Directory: /helloworld-samples/function-codebundle-nodejs
Build Run Status: Succeeded
Build Run Reason: All Steps have completed executing
Run 'ibmcloud ce buildrun get -n myfun-run-230111-111212718' for details.
Function Code:
Runtime: nodejs-22
Bundle Secret: ce-auto-icr-us-south
Code Bundle: cr://icr.io/ce--abcde-glxo4kabcde/function-myfun:230111-1532-vwo4o
Main: main
Status: Ready
URL: https://myfun.13c66hbi3rhz.us-south.codeengine.appdomain.cloud
Agora que sua função foi criada a partir do código-fonte do repositório, você pode atualizar a função para atender às suas necessidades usando o comando ibmcloud ce function update comando. Se você quiser atualizar seu código-fonte para usá-lo com sua função, é necessário especificar a opção --build-source no function update comando.
Quando sua função é criada a partir do código-fonte do repositório ou do código-fonte local com a CLI, a execução de compilação resultante não se baseia em uma configuração de compilação. As execuções de compilação concluídas são automaticamente excluídas. As execuções de compilação que não são baseadas em uma configuração de compilação são excluídas após 1 hora se a execução de compilação for bem-sucedida. Se a execução da compilação não for bem-sucedida, ela será excluída após 24 horas. Você só pode exibir informações sobre essa execução de compilação com a CLI. Não é possível visualizar essa execução de compilação no console.
Inclusão de dependências para sua função
Você pode criar funções em muitas linguagens de programação diferentes. Quando o código de sua função se torna complexo, você pode adicionar módulos de código como dependências para sua função. Cada linguagem tem seus próprios módulos para usar
com seu código de função. Por exemplo, as dependências do Node.js geralmente são módulos existentes do npm, enquanto o Python usa pacotes do Python. Essas dependências devem ser declaradas e criadas em um arquivo com seu código-fonte
Inclusão de módulos para uma função Node.js
Crie uma função que inclua uma dependência para um módulo Node.js específico, criando um arquivo package.json. Nesse caso, tanto o código-fonte quanto o arquivo de pacote estão localizados na mesma pasta.
-
Crie seu código-fonte escrevendo-o em um arquivo
main.js. Por exemplo, copie o exemplo de código a seguir em um arquivo chamadomain.js./** * The `main` function is the entry-point into the function. * It has one optional argument, which carries all the * parameters the function was invoked with. */ function main(params /* optional */) { // use third-party 'lorem-ipsum' package to generate random words const LoremIpsum = require("lorem-ipsum").LoremIpsum; const lorem = new LoremIpsum(); // Since functions are invoked through http(s), we return an HTTP response. return { headers: { "Content-Type": "text/plain;charset=utf-8" }, body: lorem.generateWords(10), }; } // This step is necessary, if you gave your main function a different name. // We include it here for documentation purposes only. module.exports.main = main; -
Crie um arquivo
package.jsonque contenha as dependências necessárias para sua função. Para o exemplo de código anterior, use o seguinte conteúdo para seu arquivopackage.json.{ "name": "function", "version": "1.0.0", "main": "main.js", "dependencies" : { "lorem-ipsum" : "2.0.8" } } -
Crie seus arquivos como uma função em Code Engine. Ambos os arquivos anteriores devem estar acessíveis no repositório. Se eles estiverem em um repositório privado, crie acesso ao repositório de código privado e, em seguida, forneça esse valor com a opção
--build-git-repo-secret. Se seus arquivos estiverem localizados em um diretório diferente do principal, forneça o caminho para o diretório com a opção--build-context-dir. O exemplo a seguir extrai os arquivos do repositório públicohttps://github.com/IBM/CodeEngine.ibmcloud ce fn create -n nodelorem -runtime nodejs --build-source https://github.com/IBM/CodeEngine --build-context-dir /helloworld-samples/function-codebundle-nodejs/ -
Execute o comando
fn getfornecido para encontrar detalhes sobre sua função. -
Invoque sua função colando o endereço URL em um navegador da Web. Seu navegador exibe uma passagem do site
lorem ipsum.
Para obter mais informações sobre o comando fn create e suas opções, consulte Criar uma função.
Inclusão de módulos para uma função Python
Crie uma função que inclua uma dependência para um módulo Python específico, criando um arquivo requirements.txt. Nesse caso, tanto o código-fonte quanto o arquivo de requisitos estão localizados na mesma pasta.
-
Crie sua função salvando seu código em um arquivo
__main__.py# use third-party 'lorem-ipsum' package to generate random words from lorem_text import lorem # The `main` function is the entry-point into the function. # It has one optional argument, which carries all the # parameters the function was invoked with. def main(params): words = 10 # since functions are invoked through http(s), we return an HTTP response return { "headers": { "Content-Type": "text/plain;charset=utf-8", }, "body": lorem.words(words), } def main(params): words = 10 return { "headers": { "Content-Type": "text/plain;charset=utf-8", }, "body": lorem.words(words), } -
Crie um site
requirements.txtcontendo as dependências necessárias para sua funçãolorem-text -
Crie seus arquivos como uma função em Code Engine. Ambos os arquivos anteriores devem estar acessíveis no repositório. Se eles estiverem em um repositório privado, crie acesso ao repositório de código privado e, em seguida, forneça esse valor com a opção
--build-git-repo-secret. Se seus arquivos estiverem localizados em um diretório diferente do principal, forneça o caminho para o diretório com a opção--build-context-dir. O exemplo a seguir extrai os arquivos do repositório públicohttps://github.com/IBM/CodeEngine.ibmcloud ce fn create -n pylorem -runtime python --build-source https://github.com/IBM/CodeEngine --build-context-dir /helloworld-samples/function-codebundle-python/ -
Execute o comando
fn getfornecido para encontrar detalhes sobre sua função. -
Invoque sua função colando o endereço URL em um navegador da Web. Seu navegador exibe uma passagem do site
lorem ipsum.
Para obter mais informações sobre o comando fn create e suas opções, consulte Criar uma função.
Próximas etapas
-
Depois que a função for criada, você poderá acessá-la clicando em Test function (Testar função) no console ou encontrando o endereço URL para a função com o comando
function getcomando. -
Você pode criar um mapeamento de domínio personalizado e atribuí-lo à sua função.
-
Depois que a função for criada e implantada, você poderá atualizá-la para atender às suas necessidades no console ou usando o comando
ibmcloud ce function updatecomando. Se você quiser atualizar seu código-fonte para usá-lo com sua função, é necessário especificar a opção--build-sourcenofunction updatecomando.
Depois que sua função for criada, você poderá atualizá-la e o código ao qual ela faz referência usando qualquer uma das seguintes formas, independentemente de como você a criou ou atualizou anteriormente:
-
Se você tiver um pacote de código existente, precisará fornecer apenas uma referência à imagem, que aponta para o local do registro do contêiner ao implantar o aplicativo. Para obter mais informações, consulte Criação de cargas de trabalho de funções a partir de pacotes de códigos existentes.
Se você criou sua função usando o comando
function createe especificou a opção--build-sourcepara compilar o pacote de códigos a partir da fonte local ou do repositório, e quiser alterar sua função para apontar para um pacote de códigos diferente, primeiro será necessário remover a associação da compilação da sua função. Por exemplo, executeibmcloud ce function update -n FUN_NAME --build-clear. Depois de remover a associação da compilação da sua função, você pode atualizar a função para fazer referência a uma imagem diferente. -
Se você estiver começando com um código-fonte que se encontra em um repositório do Git, pode optar por deixar que o Code Engine compile o pacote de código a partir do seu código-fonte e crie sua função em uma única operação. Nesse cenário, o Code Engine envia seu pacote de código para IBM Cloud® Container Registry. Para saber mais, consulte Criação de sua função a partir do código-fonte do repositório.
-
Se estiver começando com o código-fonte que reside em uma estação de trabalho local, você pode optar pelo site Code Engine para criar o pacote de código a partir do código-fonte e criar a função com um único comando da CLI. Nesse cenário, o site Code Engine faz upload do código-fonte e do pacote de códigos para o site IBM Cloud® Container Registry.
Por exemplo, você pode optar por usar o
Code Enginepara compilar seu código-fonte local enquanto avança no desenvolvimento desse código para a função. Então, depois que o pacote de códigos estiver maduro, você poderá atualizar sua função para fazer referência ao pacote de códigos específico que deseja. É possível repetir esse processo conforme necessário.
Procurando mais exemplos de código? Confira o repositório Samples for IBM Cloud Code Engine GitHub.