Funções: Conceitos Básicos do uso do Cloud Shell

Neste tutorial, você usa uma conta do Oracle Cloud Infrastructure para configurar o desenvolvimento do Oracle Functions usando o Cloud Shell. Em seguida, você cria um aplicativo de função e uma função.

As principais tarefas incluem:

  • Configure um token de autenticação.
  • Reúna as informações necessárias.
  • Configure uma VCN.
  • Faça log-in no OCIR (OCI Registry).
  • Configure o Cloud Shell para implantar funções.
  • Configure seu contexto Fn.
  • Crie um aplicativo para sua função Oracle.
  • Crie uma função.
  • Implante sua função.
  • Teste sua função.
As imagens mostram os componentes do OCI usados para executar funções Oracle.

Para obter informações adicionais, consulte:

1. Reunir as Informações Necessárias

Colete todas as informações necessárias para concluir o tutorial.

Reunir Informações de Região e Registro

Prepare as informações necessárias na Console do OCI.

  1. Localize o identificador da região e a chave da região em Regiões e Domínios de Disponibilidade.

    Exemplo: us-ashburn-1 e iad para Ashburn.

  2. Crie um nome de projeto de registro para armazenar suas imagens de função no OCIR (OCI Registry).

    Quando você publica uma função, uma imagem do Docker é criada no OCIR. Seu nome de projeto OCIR é pré-anexado às suas imagens de função para facilitar sua localização. Por exemplo, dado:

    • Nome do projeto de registro: my-func-prj
    • Nome da função: node-func

    Sua imagem de função seria armazenada no OCIR em: my-func-prj/node-func

Criar ou Selecionar um Compartimento

Para criar um compartimento, consulte Criar um compartimento. Depois que seu compartimento for criado, salve o OCID do compartimento.

Para obter o OCID do compartimento de um compartimento existente:

  1. Abra o menu de navegação e clique em Identidade e Segurança. Em Identidade, clique em Compartimentos.
  2. Selecione seu compartimento.
  3. Clique no link Copiar do campo OCID.
Criar um Token de Autorização

Você cria um token de autorização para fazer log-in no OCI Registry. Para criar um token de autorização:

  1. No menu de navegação , selecione o menu Perfil Ícone do menu Perfil e, em seguida, selecione Definições do usuário ou Meu perfil, dependendo da opção exibida.
  2. Clique em Tokens de Autenticação.
  3. Clique em Gerar Token.
  4. Dê uma descrição.
  5. Clique em Gerar Token.
  6. Copie o token e salve-o.
    Observação

    Certifique-se de salvar seu token logo após criá-lo. Você não terá acesso a ele posteriormente.
Coletar suas Informações

Colete todas as informações necessárias para concluir o tutorial. Copie as informações a seguir no seu bloco de notas.

  1. Região: <region-identifier>

    Exemplo: us-ashburn-1.

  2. chave da Região: <region-key>

    Exemplo: iad.

  3. Nome do Projeto de Registro: <your-project-name>

    Exemplo: my-func-prj.

  4. ID do Compartimento: <compartment-id>

    Exemplo: ocid1.compartment.oc1.aaaaaaa...

  5. Token de Autenticação: <auth-token>

    Exemplo: ABC.1aBC...

  6. Nome da tenancy: <tenancy-name>

    No avatar do usuário, exemplo: mytenancyname

  7. OCID da Tenancy: <tenancy-ocid>

    No avatar do usuário, vá para Tenancy: <your-tenancy> e copie o OCID. Por exemplo: ocid1.tenancy.oc1.aaaaaaa...

  8. Nome do usuário: <user-name>

    De seu avatar do usuário.

2. Criar sua VCN (Rede Virtual na Nuvem)

Configure uma VCN para conectar sua instância do Linux à internet.

Configurar sua VCN

Para configurar a rede virtual na nuvem, execute as etapas a seguir.

  1. Clique no ícone do Oracle Cloud para ir à página de destino principal.
    • Role para baixo até Ativar Recursos.
    • Selecione Configurar uma rede com um assistente.
  2. No workflow Assistente de Início da VCN, selecione Criar VCN com Conectividade de Internet e clique em Assistente de Início da VCN.
  3. Na caixa de diálogo de configuração, preencha o Nome da VCN da sua VCN. Seu Compartimento já está definido para o último compartimento no qual você estava trabalhando ou, se for a sua primeira vez, para seu valor padrão de <your-tenancy> (root).
  4. Na seção Configure VCN and Subnets, mantenha os valores padrão para os blocos CIDR:
    • BLOCO CIDR DE VCN: 10.0.0.0/16
    • BLOCO CIDR DE SUB-REDE PÚBLICA: 10.0.0.0/24
    • BLOCO CIDR DE SUB-REDE PRIVADA: 10.0.1.0/24
    Observação

    Observe que as sub-redes públicas e privadas têm endereços de rede distintos.
  5. Para a Resolução do DNS, desmarque a opção Usar nomes de host DNS nesta VCN.
  6. Clique em Próximo.

    A caixa de diálogo de configuração Criar uma VCN com Conectividade da Internet é exibida (não mostrada aqui), confirmando todos os valores recém-inseridos.

  7. Clique em Criar para criar a sua VCN.

    A caixa de diálogo Criando Recursos é exibida (não mostrada aqui), mostrando todos os componentes da VCN que estão sendo criados.

  8. Clique em Exibir Rede Virtual na Nuvem para exibir sua nova VCN.

    Sua nova VCN é exibida. Agora, você precisa adicionar uma regra de segurança para permitir conexões HTTP na porta 80, a porta padrão para seus aplicativos.

  9. Com sua nova VCN exibida, clique no link de sub-rede Pública.

    As informações da sub-rede pública são exibidas com as Listas de Segurança na parte inferior da página. Deve haver um link para a Lista de Segurança Padrão da sua VCN.

  10. Clique no link Lista de Segurança Padrão.

    As Regras de Entrada padrão da sua VCN são exibidas.

  11. Clique em Adicionar Regras de Entrada.

    Uma caixa de diálogo Adicionar Regras de Entrada é exibida.

  12. Preencha a regra de entrada com as informações a seguir. Depois que todos os dados forem inseridos, clique em Adicionar Regras de Entrada.

    Preencha a regra de entrada da seguinte forma:

    • Sem monitoramento de estado: Marcado
    • Tipo de Origem: CIDR
    • CIDR de Origem: 0.0.0.0/0
    • Protocolo IP: TCP
    • Intervalo de Portas de Origem: (leave-blank)
    • Faixa de Porta de Destino: 80
    • Descrição: VCN para aplicativos

    Depois que você clicar em Adicionar Regras de Entrada, serão permitidas conexões HTTP à sua sub-rede pública.

Observação

Para abrir outra porta, substitua 80 na última etapa pelo número da porta.
Você criou com sucesso uma VCN que disponibiliza seus aplicativos pela internet.

3. Fazer log-in no OCI Registry

Em seguida, você registra o Docker no OCIR (OCI Registry).

Registrar Docker no OCIR
  1. Obtenha as informações coletadas anteriormente.
  2. Abra uma janela de terminal.
  3. Faça log-in no OCIR:
    docker login <region-key>.ocir.io

    Você é solicitado a informar seu nome de log-in e sua senha.

    • Nome do Usuário: <tenancy-name>/<user-name>
    • Senha: <auth-token>

Você fez log-in na instância no OCIR.

4. Configurar Funções

Para usar o Oracle Functions, configure o contexto do aplicativo Fn. O contexto armazena os valores necessários para estabelecer conexão com o serviço Oracle Functions. Os comandos do cliente Fn são usados para adicionar os dados de configuração necessários.

Configurar o Contexto Fn para o Cloud Shell

Você precisa das informações coletadas anteriormente. Use os comandos do cliente Fn para configurar o Fn.

  1. Abra sua instância do Cloud Shell.
  2. Obtenha uma lista de contextos Fn.

    fn list context

    Você vê contextos para default e <your-region-identifier>.

  3. Selecione o contexto nomeado com <your-region-identifier>.

    Por exemplo: fn use context us-phoenix-1

  4. Liste os contextos Fn para garantir que <your-region-identifier> seja selecionado. (Tem um asterisco ao lado.)
  5. Defina o compartimento do Oracle Functions.

    Exemplo: fn update context oracle.compartment-id ocid1.compartment.oc1..aaaaaaaarvdfa72n...

  6. Defina o URL do repositório de Registro.

    Exemplo de comando: fn update context registry <region-key>.ocir.io/<tenancy-namespace>/<registry-project-name>

    Exemplo: fn update context registry phx.ocir.io/my-tenancy/my-func-prj

Observação

Exibir/Editar seu Contexto

Seus arquivos de contexto Fn estão no diretório ~/.fn/contexts. Cada contexto é armazenado em um arquivo .yaml. Por exemplo, seu arquivo us-phoenix-1.yaml pode ser semelhante a:

api-url: https://functions.us-phoenix-1.oci.oraclecloud.com
oracle.compartment-id: ocid1.compartment.oc1..aaaaaaaarvdfa72n...
provider: oraclecs
registry: phx.ocir.io/my-tenancy/my-func-prj
                

É possível editar o arquivo diretamente com um editor, se necessário.

Para obter uma explicação detalhada de cada etapa, consulte: Início Rápido do Oracle Functions no Cloud Shell

Agora você configurou o contexto Fn para sua instância.

5. Criar e Implantar uma Função

Com sua configuração completa, crie e implante uma função.

Criar um Aplicativo

Um Aplicativo é o contêiner de armazenamento principal para funções. Cada função deve ter um aplicativo para implantação. Para criar um aplicativo, siga estas etapas.

  1. Abra o menu de navegação e clique em Serviços ao Desenvolvedor. Em Funções, clique em Aplicativos.
  2. Clique em Criar Aplicativo.

    Preencha os dados do form.

    • Nome: <your-app-name>
    • VCN: <your-VCN>
    • Sub-redes: <your-public-subnet> ou <your-private-subnet>
    Observação

    Uma sub-rede pública ou privada pode ser usada; selecione uma.
  3. Clique em Criar.

Seu aplicativo foi criado.

Escolher um Idioma

Selecione um dos idiomas a seguir para criar e implantar uma função. Se quiser, você pode fazer os três.

Criar e Implantar uma Função Java

Com o aplicativo criado, implante uma função Java. Siga estas etapas para criar uma função "Hello World" do Java.

Observação

Certifique-se de que o Java 8+ esteja instalado para executar essas etapas.
  1. Abra o Cloud Shell.
  2. Crie um diretório para armazenar suas funções e passe para esse diretório.
    mkdir my-dir-name
    cd my-dir-name                        
                        
  3. Crie uma função "Hello World" do Java com Fn.
    fn init --runtime java my-func-name

    Esse comando cria um diretório chamado my-func-name com vários arquivos nele.

    • func.yaml - Arquivo de configuração da função.
    • pom.xml - Arquivo de build Maven.
    • src/main/java/com/example/fn/HelloFunction.java - O arquivo de função real.
  4. Passe para o diretório.
  5. Implante a função.
    fn -v deploy --app your-app-name

    Várias mensagens são exibidas à medida que as imagens docker são criadas, enviadas para o OCIR e por fim implantadas no Oracle Functions.

  6. Chame a função.
    fn invoke your-app-name my-func-name

    Retorna: Hello, world!

  7. Chame a função com um parâmetro.
    echo -n "Bob" | fn invoke your-app-name my-func-name

    Retorna: Hello, Bob!

  8. Se quiser se conectar à sua função na rede, você precisará obter o ponto final de chamada da função. Para localizar seu ponto final de chamada, use o comando inspect.
    fn inspect function your-app-name my-func-name
  9. Examine os resultados do comando inspect. Observe que o URL do ponto final da chamada está incluído na seção annotations dos dados JSON retornados.
    {
        "annotations": {
            "fnproject.io/fn/invokeEndpoint": "https://aaaaaaaaa.us-ashburn-1.functions.oci.oraclecloud.com/1111111/functions/ocid1.fnfunc.oc1.iad.aaaaaaaaa.../actions/invoke",
            "oracle.com/oci/compartmentId": "ocid1.compartment.oc1..aaaaaaaa...",
            "__comment":"Remaining output left out for brevity",
    
  10. Use o URL retornado de inspect para chamar a função. Como as funções exigem que as solicitações sejam assinadas digitalmente, o comando oci raw-request é usado para este exemplo.
    oci raw-request --http-method POST --request-body "" --target-uri https://https://aaaaaaaaa.us-ashburn-1.functions.oci.oraclecloud.com/1111111/functions/ocid1.fnfunc.oc1.iad.aaaaaaaaa.../actions/invoke

    O comando retorna:

    {
        "data": "Hello, world!",
        "headers": {
            "Content-Length": "13",
            "Content-Type": "text/plain",
            "Date": "Tue, 20 Oct 2020 00:53:08 GMT",
            "Fn-Call-Id": "11111111111",
            "Fn-Fdk-Version": "fdk-java/1.0.111 (jvm=OpenJDK 64-Bit Server VM, jvmv=11.0.8)",
            "Opc-Request-Id": "1111111/11111"
        },
        "status": "200 OK"
    }
    Observação

    Você pode se conectar a um ponto final do Functions usando ferramentas como curl. No entanto, por motivos de segurança, o script é complexo. Como alternativa, use o comando raw-request da CLI do OCI. Consulte Chamando Funções: Enviando uma Solicitação Assinada a uma Função com raw-request.

Você implantou e testou com sucesso uma função Java.

Criar e Implantar uma Função Python

Com o aplicativo criado, implante uma função Python. Siga estas etapas para criar uma função "Hello World" no Python.

  1. Abra o Cloud Shell.
  2. Crie um diretório para armazenar suas funções e passe para esse diretório.
    mkdir my-dir-name
    cd my-dir-name                        
                        
  3. Crie uma função "Hello World" do Python com Fn.
    fn init --runtime python my-func-name

    Esse comando cria um diretório chamado my-func-name com vários arquivos nele.

    • func.yaml - Arquivo de configuração da função.
    • requirements.txt - Lista de bibliotecas Python necessárias.
    • func.py - O arquivo de função real.
  4. Passe para o diretório.
  5. Implante a função.
    fn -v deploy --app your-app-name

    Várias mensagens são exibidas à medida que as imagens docker são criadas, enviadas para o OCIR e por fim implantadas no Oracle Functions.

  6. Chame a função.
    fn invoke your-app-name my-func-name

    Retorna: {"message": "Hello World"}

  7. Chame a função com um parâmetro.
    echo -n '{"name":"Bob"}' | fn invoke your-app-name my-func-name

    Retorna: {"message": "Hello Bob"}

  8. Se quiser se conectar à sua função na rede, você precisará obter o ponto final de chamada da função. Para localizar seu ponto final de chamada, use o comando inspect.
    fn inspect function your-app-name my-func-name
  9. Examine os resultados do comando inspect. Observe que o URL do ponto final da chamada está incluído na seção annotations dos dados JSON retornados.
    {
        "annotations": {
            "fnproject.io/fn/invokeEndpoint": "https://aaaaaaaaa.us-ashburn-1.functions.oci.oraclecloud.com/1111111/functions/ocid1.fnfunc.oc1.iad.aaaaaaaaa.../actions/invoke",
            "oracle.com/oci/compartmentId": "ocid1.compartment.oc1..aaaaaaaa...",
            "__comment":"Remaining output left out for brevity",
    
  10. Use o URL retornado de inspect para chamar a função. Como as funções exigem que as solicitações sejam assinadas digitalmente, o comando oci raw-request é usado para este exemplo.
    oci raw-request --http-method POST --request-body "" --target-uri https://https://aaaaaaaaa.us-ashburn-1.functions.oci.oraclecloud.com/1111111/functions/ocid1.fnfunc.oc1.iad.aaaaaaaaa.../actions/invoke

    O comando retorna:

    {
        "data": "Hello World",
        "headers": {
            "Content-Length": "24",
            "Content-Type": "application/json",
            "Date": "Tue, 20 Oct 2020 00:53:08 GMT",
            "Fn-Call-Id": "11111111111",
            "Fn-Fdk-Version": "fdk-python/0.1.18",
            "Opc-Request-Id": "1111111/11111"
        },
        "status": "200 OK"
    }
    Observação

    Você pode se conectar a um ponto final do Functions usando ferramentas como curl. No entanto, por motivos de segurança, o script é complexo. Como alternativa, use o comando raw-request da CLI do OCI. Consulte Chamando Funções: Enviando uma Solicitação Assinada a uma Função com raw-request.

Você implantou e testou com sucesso uma função Python.

Criar e Implantar uma Função Node

Com o aplicativo criado, implante uma função Node. Siga estas etapas para criar uma função Node "Hello World".

Observação

Certifique-se de que o Node.js 10+ esteja instalado para executar essas etapas.
  1. Abra o Cloud Shell.
  2. Crie um diretório para armazenar suas funções e passe para esse diretório.
    mkdir my-dir-name
    cd my-dir-name                        
                        
  3. Crie uma função Node "Hello World" com Fn.
    fn init --runtime node my-func-name

    Esse comando cria um diretório chamado my-func-name com vários arquivos nele.

    • func.yaml - Arquivo de configuração da função.
    • package.json - Arquivo de criação do NPM.
    • func.js - O arquivo de função real.
  4. Passe para o diretório.
  5. Implante a função.
    fn -v deploy --app your-app-name

    Várias mensagens são exibidas à medida que as imagens docker são criadas, enviadas para o OCIR e por fim implantadas no Oracle Functions.

  6. Chame a função.
    fn invoke your-app-name my-func-name

    Retorna: {"message":"Hello World"}

  7. Chame a função com um parâmetro.
    echo -n '{"name":"Bob"}' | fn invoke your-app-name my-func-name

    Retorna: {"message":"Hello Bob"}

  8. Se quiser se conectar à sua função na rede, você precisará obter o ponto final de chamada da função. Para localizar seu ponto final de chamada, use o comando inspect.
    fn inspect function your-app-name my-func-name
  9. Examine os resultados do comando inspect. Observe que o URL do ponto final da chamada está incluído na seção annotations dos dados JSON retornados.
    {
        "annotations": {
            "fnproject.io/fn/invokeEndpoint": "https://aaaaaaaaa.us-ashburn-1.functions.oci.oraclecloud.com/1111111/functions/ocid1.fnfunc.oc1.iad.aaaaaaaaa.../actions/invoke",
            "oracle.com/oci/compartmentId": "ocid1.compartment.oc1..aaaaaaaa...",
            "__comment":"Remaining output left out for brevity",
    
  10. Use o URL retornado de inspect para chamar a função. Como as funções exigem que as solicitações sejam assinadas digitalmente, o comando oci raw-request é usado para este exemplo.
    oci raw-request --http-method POST --request-body "" --target-uri https://https://aaaaaaaaa.us-ashburn-1.functions.oci.oraclecloud.com/1111111/functions/ocid1.fnfunc.oc1.iad.aaaaaaaaa.../actions/invoke

    O comando retorna:

    {
        "data": "Hello World",
        "headers": {
            "Content-Length": "23",
            "Content-Type": "application/json",
            "Date": "Tue, 22 Oct 2020 00:53:08 GMT",
            "Fn-Call-Id": "11111111111",
            "Fn-Fdk-Version": "fdk-node/0.1.18 (njsv=v11.15.0)",
            "Opc-Request-Id": "1111111/11111"
        },
        "status": "200 OK"
    }
    Observação

    Você pode se conectar a um ponto final do Functions usando ferramentas como curl. No entanto, por motivos de segurança, o script é complexo. Como alternativa, use o comando raw-request da CLI do OCI. Consulte Chamando Funções: Enviando uma Solicitação Assinada a uma Função com raw-request.

Você implantou e testou com sucesso uma função Node.

6. Verificar Informações da Função

Depois que suas funções forem executadas, as informações sobre suas funções estarão disponíveis na Console do OCI.

Exibir Imagens da Função no OCIR

Quando você implanta, a função é carregada e armazenada no OCIR. Você pode navegar até o OCIR e examinar as imagens da função.

  1. Abra o menu de navegação e clique em Serviços ao Desenvolvedor. Em Contêineres e artefatos, clique em Registro de Contêiner.
  2. Procure o <your-repository-project-name>.
  3. Em seu nome de projeto, você vê uma entrada para cada função implantada.
  4. Clique no link de cada imagem cujas informações você deseja ver.
Exibir Informações de Execução da Função

Após executar uma função, você poderá exibir métricas dessa função.

  1. Abra o menu de navegação e clique em Serviços ao Desenvolvedor. Em Funções, clique em Aplicativos. Seus aplicativos estão listados na página.
  2. Clique no link para o aplicativo criado.
  3. Clique no link da função que deseja examinar.

    As informações de métrica sobre sua função são exibidas.

Ativar e Exibir Informações de Registro em Log

Para ativar o registro em log para um aplicativo, siga estas etapas.

  1. Abra o menu de navegação e clique em Serviços ao Desenvolvedor. Em Funções, clique em Aplicativos. Seus aplicativos estão listados na página.
  2. Clique no link para o aplicativo criado.
  3. No lado esquerdo da página do aplicativo, clique no link Logs.
  4. Clique em Desativado para ativar o registro em log do seu aplicativo.
  5. A caixa de diálogo Ativar Log é exibida. Preencha as seguintes informações:
    • Compartimento: <your-compartment-name>
    • Grupo de Logs: Utilizar o valor padrão Auto-Create a Default Log Group
    • Nome do log: <take-default>
    • Retenção de Logs: <take-default>
    • Clique em Ativar Log

      Aguarde a criação do seu log.

Para exibir seu log, clique no link do nome do log criado pelas etapas anteriores.