Criando um Contexto da CLI do Fn Project para Conexão com o Oracle Cloud Infrastructure

Descubra como criar um contexto da CLI do Fn Project para estabelecer conexão com o Oracle Cloud Infrastructure para uso com o OCI Functions.

Antes de usar o OCI Functions, você deve configurar a CLI do Fn Project para estabelecer conexão com a tenancy do Oracle Cloud Infrastructure.

Quando a CLI do Fn Project é instalada inicialmente, ela é configurada para um 'contexto' de desenvolvimento local. Para configurar a CLI do Fn Project para conexão com a tenancy do Oracle Cloud Infrastructure, você tem de criar um novo contexto. O contexto especifica pontos finais do OCI Functions, o OCID do compartimento ao qual as funções implantadas pertencerão e o endereço do registro Docker ao qual enviar e extrair imagens.

Você pode definir vários contextos, cada um armazenado em um arquivo de contexto distinto no formato .yaml. Por padrão, os arquivos de contexto individuais são armazenados no diretório ~/.fn/contexts. O arquivo ~/.fn/config.yaml especifica qual arquivo de contexto o Fn Project utiliza.

Para criar um novo contexto, você pode criar um novo arquivo de contexto manualmente e editar o arquivo ~/.fn/config.yaml manualmente para apontar para esse arquivo. Como alternativa, você pode usar a CLI do Fn Project para criar interativamente o novo arquivo de contexto e instruir a CLI do Fn Project para começar a usar esse arquivo, conforme descrito a seguir.

Se você estiver usando o Cloud Shell como seu ambiente de desenvolvimento, dois contextos da CLI do Fn Project já foram criados para você (um contexto padrão e um contexto para a região atual). Para obter mais informações, consulte o OCI Functions on Cloud Shell QuickStart Guide. Você simplesmente precisa copiar e colar comandos da página Conceitos Básicos na janela do Cloud Shell:

  • instruir a CLI do Fn Project a usar o contexto da região atual
  • para fornecer o OCID do compartimento que possuirá funções implantadas
  • para fornecer o endereço do Oracle Cloud Infrastructure Registry que você deseja usar com o OCI Functions

As instruções neste tópico presumem que:

  • você não está usando o Cloud Shell como seu ambiente de desenvolvimento
  • você está usando Linux
  • você já concluiu as etapas em Instalando a CLI do Fn Project

Para criar um novo arquivo de contexto usando a CLI do Fn Project:

  1. Acesse o ambiente de desenvolvimento como desenvolvedor de funções.

  2. Em uma janela de terminal, crie o novo contexto da CLI do Fn Project para o Oracle Cloud Infrastructure informando:

    fn create context <my-context> --provider oracle

    em que <my-context> é o nome de sua escolha. Por exemplo:

    fn create context johns-oci-context --provider oracle

    Observe que você especifica --provider oracle para ativar a autenticação e a autorização usando a assinatura de solicitação do Oracle Cloud Infrastructure, chaves privadas, grupos de usuários e políticas que concedem permissões a esses grupos de usuários.

  3. Especifique se a CLI do Fn Project deve usar o novo contexto informando:

    fn use context <my-context>

    em que <my-context> é o nome que você especificou na etapa anterior. Por exemplo:

    fn use context johns-oci-context
  4. Configure o novo contexto com o OCID do compartimento cujas funções implantadas você deseja possuir (você pode ter criado um novo compartimento especificamente para este propósito; consulte Criando Compartimentos para Recursos de Rede Próprios e Recursos do Serviço OCI Functions na Tenancy, se eles ainda não existirem) informando:

    fn update context oracle.compartment-id <compartment-ocid>

    Por exemplo:

    fn update context oracle.compartment-id ocid1.compartment.oc1..aaaaaaaarvdfa72n...
  5. Configure o novo contexto com o ponto final api-url a ser usado ao chamar a API informando:

    fn update context api-url <api-endpoint>

    em que <api-endpoint> é um dos pontos finais na lista de pontos finais do serviço Functions na API do Serviço Functions, no formato https://functions.<region-identifier>.oci.oraclecloud.com. O <region-identifier> em <api-endpoint> é o identificador da região do Oracle Cloud Infrastructure na qual você estará criando e implantando funções. Por exemplo, us-phoenix-1.

    Por exemplo:

    fn update context api-url https://functions.us-phoenix-1.oci.oraclecloud.com
  6. Configure o novo contexto com o endereço do registro do Docker (por exemplo, o Oracle Cloud Infrastructure Registry) que você deseja usar com o OCI Functions informando:

    fn update context registry <region-key>.ocir.io/<tenancy-namespace>/<repo-name-prefix>

    em que:

    • <region-key> é a chave da região do Oracle Cloud Infrastructure Registry. Por exemplo, phx para Phoenix. Consulte Disponibilidade por Região.

      Recomendamos que o registro do Docker especificado esteja na mesma região que a sub-rede na qual você pretende que as funções sejam executadas.

    • <tenancy-namespace> é a string de namespace do serviço Object Storage gerada automaticamente da tenancy para criar repositórios (conforme mostrado na página Informações da Tenancy). Por exemplo, o namespace da tenancy acme-dev pode ser ansh81vru1zp. Observe que, para algumas definições mais antigas, a string de namespace pode ser igual ao nome da tenancy, tudo em letra minúscula (por exemplo, acme-dev).
    • <repo-name-prefix> é (opcionalmente) um prefixo de nome de repositório para pré-anexar aos nomes das funções que você implanta, para especificar os nomes dos repositórios aos quais enviar imagens de função. O uso de um prefixo de nome de repositório pode facilitar a organização e o controle do acesso a repositórios no registro. Consulte Observações sobre nomes de repositório e prefixos de nome de repositório.

    Por exemplo:

    fn update context registry phx.ocir.io/ansh81vru1zp/acme-repo
  7. (Opcional) Configure o novo contexto com o OCID do compartimento para repositórios de/para os quais você deseja que o OCI Functions envie e extraia imagens de função digitando:

    fn update context oracle.image-compartment-id <compartment-ocid>

    Por exemplo:

    fn update context oracle.image-compartment-id ocid1.compartment.oc1..aaaaaaaaquqe______z2q
    

    Se você não especificar um valor para oracle.image-compartment-id, o OCI Functions enviará e extrairá imagens de/para repositórios no compartimento raiz. Em ambos os casos, deve existir uma instrução de política adequada para permitir que você gerencie repositórios no compartimento (o compartimento especificado por oracle.image-compartment-id ou o compartimento raiz). Consulte Instruções de Política para Fornecer aos Usuários do Serviço OCI Functions Acesso aos Repositórios do Oracle Cloud Infrastructure Registry.

    O OCI Functions constrói o nome do repositório para uma imagem de função pré-anexando o prefixo do nome do repositório ao nome da função. Os nomes de repositório são exclusivos em todos os compartimentos de toda a tenancy. Observe que o OCI Functions se comporta da seguinte forma com relação a compartimentos e oracle.image-compartment-id ao enviar uma imagem para um repositório nomeado:

    • Se já existir um repositório com esse nome no compartimento especificado por oracle.image-compartment-id, o OCI Functions enviará com sucesso a imagem para esse repositório.
    • Se um repositório com esse nome não existir em nenhum compartimento (incluindo no compartimento raiz) na tenancy, o OCI Functions criará um novo repositório com esse nome no compartimento especificado por oracle.image-compartment-id e enviará com sucesso a imagem para ele.
    • Se já existir um repositório com esse nome na tenancy, mas em outro compartimento especificado pororacle.image-compartment-id, o OCI Functions emitirá um erro. Para que o OCI Functions envie a imagem com sucesso, defina oracle.image-compartment-id como o OCID do compartimento do repositório existente ou especifique outro nome de repositório (renomeando a função ou especificando um prefixo de nome de repositório alternativo).
  8. (Opcional) Verifique o contexto da CLI do Fn Project que você criou exibindo o arquivo de contexto. Por exemplo, informando:

    more ~/.fn/contexts/johns-oci-context.yaml

    O arquivo de contexto contém:

    api-url: https://functions.us-phoenix-1.oci.oraclecloud.com
    provider: oracle
    registry: phx.ocir.io/ansh81vru1zp/acme-repo
    oracle.image-compartment-id: <compartment-ocid>

Quando você concluir as etapas deste tópico, vá para Definindo o Contexto da CLI do Project Fn Usando o Parâmetro oracle.profile.

Observações sobre nomes de repositório e prefixos de nome de repositório

Ao implantar uma função, a imagem da função é enviada para um repositório no registro especificado pela definição registry: no contexto da CLI do Fn Project. O nome do repositório é o mesmo que o nome da função (ou seja, <function-name>) ou o nome da função com um prefixo de nome de repositório pré-anexado a ela (ou seja, <repo-name-prefix>/<function-name>).

Ao implantar uma função, observe o seguinte. Se um repositório chamado <function-name> (ou <repo-name-prefix>/<function-name> se você tiver especificado um <repo-name-prefix>) ainda não existir no registro:

  • Se a propriedade Criar repositório no primeiro push no compartimento raiz do registro for definida como verdadeira, um novo repositório privado será criado no compartimento raiz
  • Se a propriedade Criar repositório no primeiro envio no compartimento raiz do registro for definida como falsa, não será possível criar um novo repositório e a tentativa de envio da imagem da função falhará.

Se a propriedade Criar repositório no primeiro push no compartimento raiz do registro estiver definida como falsa e um repositório adequado ainda não existir, execute um dos procedimentos a seguir antes de implantar uma função:

  • Crie um novo repositório com o mesmo nome da função e não especifique um <repo-name-prefix> no contexto da CLI do Fn Project. Por exemplo, se a função for chamada hello-world, crie um novo repositório chamado hello-world.
  • Crie uma função com o mesmo nome de um repositório existente e não especifique um <repo-name-prefix> no contexto da CLI do Fn Project. Por exemplo, se o repositório existente for chamado hello-galaxy, nomeie a nova função hello-galaxy.
  • Se você quiser usar um prefixo de nome de repositório para organizar e controlar o acesso aos repositórios, especifique um <repo-name-prefix> no contexto da CLI do Fn Project e também crie um repositório com um nome que inclua o prefixo do nome do repositório e o nome da função. Por exemplo, para armazenar imagens de uma função chamada hello-world em um repositório chamado acme-repo/hello-world, especifique phx.ocir.io/ansh81vru1zp/acme-repo no contexto da CLI do Fn Project e também crie um repositório chamado acme-repo/hello-world.