Especificando a Arquitetura de Computação na Qual Executar Funções
Saiba mais sobre como especificar a arquitetura do processador na qual executar uma função com o OCI Functions.
Ao implantar uma função no OCI Functions, você pode especificar a arquitetura do processador das instâncias de computação nas quais deseja executar a função. Você pode limitar a função a ser executada em uma única arquitetura (como Arm) ou pode permitir que a função seja executada em várias arquiteturas (como Arm e x86).
Há três etapas para especificar a arquitetura do processador na qual uma função será executada:
- Crie um aplicativo e selecione uma forma para o aplicativo que suporte a arquitetura na qual você deseja executar a função. Consulte Selecionando uma Única Arquitetura ou Forma de Aplicativo de Várias Arquiteturas na qual executar uma Função.
- Crie uma imagem que contenha as dependências necessárias (imagens filho) para a arquitetura na qual você deseja executar a função. Consulte Criando Imagens de Arquitetura Múltipla (Multiarquitetura) e Criando Imagens de Arquitetura Única.
- Crie a função com base na imagem que você criou, no aplicativo com a forma apropriada. Consulte Criando Funções.
Dependendo de como você optar por criar funções usando o OCI Functions, poderá concluir e combinar essas etapas de várias maneiras diferentes. Por exemplo:
- Você pode usar a Console para criar um aplicativo com a forma apropriada primeiro e, em seguida, usar o comando
fn deploy
da CLI do Fn Project para criar e implantar a função (que cria automaticamente uma imagem adequada contendo as dependências necessárias). - Você pode usar um comando do Docker para criar uma imagem contendo as dependências necessárias primeiro, usar a CLI do OCI para criar um aplicativo com a forma apropriada e, em seguida, usar a Console para criar uma função no aplicativo com base na imagem.
Selecionando uma Forma de Aplicativo de Arquitetura Única ou de Várias Arquiteturas na qual uma Função será executada
Descubra como selecionar a forma de um aplicativo influencia a arquitetura do processador das instâncias de computação nas quais as funções são executadas com o OCI Functions.
Ao definir um aplicativo no OCI Functions, você seleciona a arquitetura do processador das instâncias de computação nas quais as funções serão implantadas e executadas no aplicativo. Todas as funções no aplicativo são implantadas e executadas em instâncias de computação com a mesma arquitetura.
Você especifica a arquitetura da instância de computação na qual deseja executar funções em um aplicativo selecionando uma forma para o aplicativo da seguinte forma:
- Se você sempre quiser que as funções no aplicativo sejam executadas em instâncias de computação com uma arquitetura baseada em Arm, selecione a forma Generic_ARM. Se você selecionar essa única forma de arquitetura para o aplicativo, a imagem de cada função deverá conter as dependências necessárias para a arquitetura Arm (em uma única imagem de arquitetura ou em uma imagem de várias arquiteturas).
- Se você sempre quiser que as funções no aplicativo sejam executadas em instâncias de computação com uma arquitetura baseada em x86, selecione a forma Generic_X86. Se você selecionar essa forma de arquitetura única para o aplicativo, a imagem de cada função deverá conter as dependências necessárias para a arquitetura x86 (em uma única imagem de arquitetura ou em uma imagem de várias arquiteturas).
- Se você quiser que as funções sejam executadas em instâncias de computação com qualquer arquitetura que tenha capacidade suficiente, selecione a forma Generic_X86_ARM. Nesse caso, o OCI Functions seleciona a arquitetura na qual executar funções com base na capacidade disponível. Se você selecionar essa forma de várias arquiteturas para o aplicativo, a imagem de cada função deverá conter as dependências necessárias para a arquitetura Arm e a arquitetura x86 (em uma imagem de várias arquiteturas).
Quando você cria uma função em um aplicativo, a imagem na qual a função se baseia deve incluir as dependências necessárias para a forma do aplicativo:
- Se você selecionar uma única forma de arquitetura para o aplicativo, a imagem da função deverá conter as dependências necessárias para a arquitetura correspondente (em uma única imagem de arquitetura ou em uma imagem de várias arquiteturas).
- Se você selecionar uma forma de várias arquiteturas para o aplicativo, a imagem da função deverá conter as dependências necessárias para ambas as arquiteturas (em uma imagem de várias arquiteturas).
Para usar a mesma imagem para implantar e executar uma função em várias arquiteturas diferentes, você usa uma imagem de várias arquiteturas (também conhecida como lista de manifestos ou como uma "imagem de vários arquivos"). Você cria imagens de várias arquiteturas a partir de uma única árvore de origem, com uma tag de imagem que inclui imagens para arquiteturas x86 e Arm.
Se você usar o comando fn -v deploy --app <app-name>
da CLI do Fn Project para criar uma função e suas dependências como uma imagem do Docker, a imagem será criada com as dependências necessárias para a forma do aplicativo. Se o aplicativo tiver uma forma de várias arquiteturas, a imagem da função será criada como uma imagem de várias arquiteturas. Você também pode criar imagens de várias arquiteturas usando o Docker Buildx e o Podman. Se você usar uma ferramenta diferente da CLI do Fn Project para criar uma imagem de várias arquiteturas, será sua responsabilidade verificar se a imagem é compatível com a forma do aplicativo.
Quando você seleciona uma forma de várias arquiteturas para um aplicativo, o OCI Functions avalia a capacidade disponível e determina a arquitetura na qual implantar e executar funções de acordo. Como uma função pode ser implantada em diferentes arquiteturas, ela deve ser baseada em uma imagem de várias arquiteturas. É sua responsabilidade verificar se uma função baseada em uma imagem de várias arquiteturas pode ser chamada com sucesso nas arquiteturas x86 e Arm. Para permitir que você faça isso, recomendamos que, além de criar tal função em um aplicativo com uma forma de arquitetura múltipla, você também crie funções com base em uma imagem de arquitetura múltipla em aplicativos com formas de arquitetura única. Para ajudar na depuração, a Oracle também recomenda que os logs de uma função incluam detalhes da arquitetura da instância de computação na qual a função está sendo executada.
Depois de criar um aplicativo, observe que você não pode alterar subsequentemente a forma do aplicativo. Se você quiser que uma função específica seja executada em uma arquitetura diferente, crie a função em um aplicativo diferente (crie um novo aplicativo, se necessário) e forneça a imagem de arquitetura única ou de várias arquiteturas apropriada. Por exemplo:
- Se você selecionar uma única forma de arquitetura (Arm ou x86) para um aplicativo, mas quiser que uma função específica seja executada em outra arquitetura, crie a função em outro aplicativo que tenha a forma de arquitetura apropriada.
- Se você selecionar uma forma de várias arquiteturas para um aplicativo, mas quiser que uma função específica seja sempre executada em uma arquitetura específica, crie a função em um aplicativo diferente que tenha a forma de arquitetura única apropriada.
- Se você selecionar uma única forma de arquitetura (Arm ou x86) para o aplicativo, mas quiser que uma função específica seja executada em qualquer instância de computação, independentemente da arquitetura, crie a função em outro aplicativo que tenha uma forma de várias arquiteturas.
Construindo Imagens de Multi-Arquitetura (Multi-Arch)
Descubra como criar imagens de várias arquiteturas para funções em aplicativos que têm formas de várias arquiteturas.
Você pode criar imagens de várias arquiteturas de diferentes maneiras, incluindo:
- usando a CLI do Fn Project (para obter mais informações, consulte Usando a CLI do Fn Project para criar uma imagem com várias arquiteturas (recomendado))
- usando o Docker Buildx (para obter mais informações, consulte Usando o plug-in buildx do Docker para criar uma imagem de várias arquiteturas)
- usando o Podman
Você pode criar funções com base em uma imagem de várias arquiteturas em aplicativos que têm uma forma de várias arquiteturas e em aplicativos que têm uma única forma de arquitetura, desde que a imagem de várias arquiteturas inclua as dependências necessárias (imagens filhas) para a forma do aplicativo.
Observe que, no ambiente de desenvolvimento do Cloud Shell, o OCI Functions não suporta a criação e a implantação de funções com base em imagens de várias arquiteturas, nem aplicativos com formas de várias arquiteturas. Além disso, a arquitetura da sessão do Cloud Shell deve ser igual à arquitetura do aplicativo (para obter mais informações sobre como selecionar a arquitetura da sessão do Cloud Shell, consulte Arquitetura do Cloud Shell).
Usando a CLI do Fn Project para criar uma imagem de várias arquiteturas (recomendado)
Você pode usar a CLI do Fn Project para criar uma imagem de várias arquiteturas ao implantar uma função em um aplicativo com uma forma de várias arquiteturas:
- Acesse o ambiente de desenvolvimento como desenvolvedor de funções.
- Se um aplicativo adequado com uma forma de arquitetura múltipla na qual criar a função ainda não existir, crie esse aplicativo agora. Consulte Criando Aplicativos.
- Se você ainda não tiver inicializado a função, siga as instruções em Usando Comandos da CLI do Fn Project para inicializar a função agora.
- No diretório da função, informe o seguinte comando do Fn Project para construir a função e suas dependências como uma imagem de várias arquiteturas do Docker, submeter a imagem ao registro Docker especificado e implantar a função no OCI Functions:
fn -v deploy --app <app-name>
em que
<app-name>
é o nome do aplicativo com a forma de várias arquiteturas, na qual você deseja criar a função.A imagem de várias arquiteturas é criada e inclui as dependências necessárias para as arquiteturas especificadas pela forma de várias arquiteturas do aplicativo.
Usando o plug-in buildx do Docker para criar uma imagem com várias arquiteturas
Pré-requisito: Para poder usar o plug-in buildx do Docker, faça download do plug-in e instale-o. Para obter instruções de download e instalação, consulte a documentação do Docker buildx no github.
Depois de fazer download e instalar o plug-in buildx do Docker, você pode usar o plug-in para criar uma imagem de várias arquiteturas na qual basear uma função a ser implantada em um aplicativo com uma forma única ou de várias arquiteturas. Para obter mais informações sobre o uso do plug-in buildx do Docker, consulte a documentação do buildx do Docker no github.
Por exemplo, você pode criar uma imagem de várias arquiteturas para uma imagem hello-world do Python da seguinte forma:
- Acesse o ambiente de desenvolvimento como desenvolvedor de funções.
- Em uma janela de terminal, crie um diretório no qual armazenar funções. Por exemplo:
mkdir helloworld-python-dir
- Altere o diretório para o diretório recém-criado. Por exemplo:
cd helloworld-python-dir
- Crie uma função helloworld Python digitando:
fn init --runtime python helloworld-func
Um diretório chamado
helloworld-func
é criado, contendo:func.yaml
: O arquivo de definição de função, contendo o volume mínimo de informações necessárias para construir e executar a função. Consulte a documentação do Fn Project para saber mais sobre os parâmetros adicionais que você pode incluir em um arquivo func.yaml.requirements.txt
: Uma lista de bibliotecas Python necessárias.func.py
: O arquivo de função real.
- Crie um novo arquivo chamado
Dockerfile
no mesmo diretório.Observe que você deve nomear o arquivo como
Dockerfile
. - Abra o arquivo chamado
Dockerfile
em um editor de sua escolha e adicione as seguintes linhas:FROM fnproject/python:3.6-dev as build-stage WORKDIR /function ADD requirements.txt /function/ RUN pip3 install --target /python/ --no-cache --no-cache-dir -r requirements.txt &&\ rm -fr ~/.cache/pip /tmp* requirements.txt func.yaml Dockerfile .venv &&\ chmod -R o+r /python ADD . /function/ RUN rm -fr /function/.pip_cache FROM fnproject/python:3.6 WORKDIR /function COPY --from=build-stage /python /python COPY --from=build-stage /function /function RUN chmod -R o+r /function ENV PYTHONPATH=/function:/python ENTRYPOINT ["/python/bin/fdk", "/function/func.py", "handler"]
- Salve o arquivo chamado
Dockerfile
. Agora você pode usar o arquivoDockerfile
como um Dockerfile personalizado. - No arquivo func.yaml, altere o valor do parâmetro
runtime:
pararuntime: docker
.Por exemplo, altere:
schema_version: 20180708 name: helloworld-func version: 0.0.1 runtime: python build_image: fnproject/python:3.9-dev run_image: fnproject/python:3.9 entrypoint: /python/bin/fdk /function/func.py handler memory: 256
para:
schema_version: 20180708 name: helloworld-func version: 0.0.1 runtime: docker build_image: fnproject/python:3.9-dev run_image: fnproject/python:3.9 entrypoint: /python/bin/fdk /function/func.py handler memory: 256
- Use o comando
docker buildx
para criar x86 e imagens baseadas em Arm e gerar uma imagem de várias arquiteturas a partir delas, digitando:docker buildx build --push --platform <platform1,platform2,..> --tag <manifest_name> <dockerfile_path>
Por exemplo:
docker buildx build --push --platform linux/arm64/v8,linux/amd64 --tag my-manifest-name:1.0.0-SNAPSHOT-X86-ARM .
- Envie a imagem de várias arquiteturas para o Oracle Cloud Infrastructure Registry. Por exemplo, informando:
docker manifest push my-manifest-name:1.0.0-SNAPSHOT-X86-ARM
Agora você pode basear uma função na imagem de várias arquiteturas.
- (Opcional) Crie uma nova função e defina a propriedade Image da função como o nome da imagem de várias arquiteturas. Por exemplo:
- Ao usar a Console, especifique
my-manifest-name:1.0.0-SNAPSHOT-X86-ARM
no campo Imagem. - Ao usar a CLI do Fn Project, especifique
my-manifest-name:1.0.0-SNAPSHOT-X86-ARM
como o valor do argumento de imagem. Por exemplo:fn create function acmeapp acme-func phx.ocir.io/ansh81vru1zp/acme-repo/my-manifest-name:1.0.0-SNAPSHOT-X86-ARM
- Ao usar a Console, especifique
Criando Imagens de Arquitetura Única
Descubra como criar imagens de arquitetura única para funções em aplicativos que têm formas de arquitetura únicas.
Você pode criar imagens de arquitetura única de diferentes maneiras, incluindo:
- Usando a CLI do Fn Project. Consulte Usando a CLI do Fn Project para criar uma única imagem de arquitetura.
- Usando o comando de build do Docker. Consulte Usando o comando de build do Docker para criar uma única imagem de arquitetura.
Ao criar uma função com base em uma única imagem de arquitetura, você deve criar a função em um aplicativo que tenha uma forma de arquitetura única compatível.
Usando a CLI do Fn Project para criar uma única imagem de arquitetura
Você pode usar a CLI do Fn Project para criar uma única imagem de arquitetura ao implantar uma função em um aplicativo com uma única forma de arquitetura:
- Acesse o ambiente de desenvolvimento como desenvolvedor de funções.
- Se um aplicativo adequado com uma única forma de arquitetura na qual criar a função ainda não existir, crie esse aplicativo agora. Consulte Criando Aplicativos.
- Se você ainda não tiver inicializado a função, siga as instruções em Usando Comandos da CLI do Fn Project para inicializar a função agora.
- No diretório da função, informe o seguinte comando do Fn Project para construir a função e suas dependências como uma única imagem de arquitetura, submeter a imagem ao registro Docker especificado e implantar a função no OCI Functions:
fn -v deploy --app <app-name>
em que
<app-name>
é o nome do aplicativo com a forma de arquitetura única, na qual você deseja criar a função.A imagem de arquitetura única é criada e inclui as dependências necessárias para a arquitetura especificada pela forma de arquitetura única do aplicativo.
Usando o comando build do Docker para criar uma única imagem de arquitetura
Você pode usar o comando build do Docker para criar uma única imagem de arquitetura na qual basear uma função que deseja implantar em um aplicativo com uma única forma de arquitetura. Para obter mais informações, consulte o comando docker build na documentação do Docker.
Observe que quando você usa o comando de build do Docker para criar uma imagem, a imagem inclui as dependências necessárias para a arquitetura da plataforma atual na qual você executa o comando. Portanto, se você executar o comando de build do Docker em uma plataforma AMD (uma arquitetura x86), a imagem incluirá as dependências necessárias para a arquitetura x86. Se você quiser criar uma única imagem de arquitetura para uma arquitetura diferente da plataforma atual, use o plug-in buildx do Docker e especifique a arquitetura de destino único como o valor do argumento --platform
. Consulte Usando o plug-in buildx do Docker para criar uma imagem com várias arquiteturas.