Trabalhar com armazenamentos de dados persistentes
Você pode montar um bucket IBM Cloud Object Storage (COS) em seu aplicativo ou trabalho IBM Cloud® Code Engine usando um armazenamento de dados persistente. Esse recurso permite que suas cargas de trabalho acessem o conteúdo de um bucket COS por meio do sistema de arquivos local, usando operações de arquivo padrão.
Um armazenamento de dados persistente em Code Engine é uma referência a um armazenamento de dados existente que Code Engine não gerencia. Atualmente, IBM Cloud Object Storage é o único tipo de armazenamento de dados compatível. Ao criar uma referência ao seu bucket COS, você pode montá-lo diretamente no sistema de arquivos do seu aplicativo ou contêiner de trabalho.
Antes de Iniciar
Antes de trabalhar com armazenamentos de dados persistentes, certifique-se de que os seguintes pré-requisitos sejam atendidos.
- Você deve ter uma instância do IBM Cloud Object Storage.
- Você deve criar uma credencial de serviço para sua instância Object Storage com as credenciais HMAC ativadas. A credencial HMAC exige pelo menos a função de acesso ao serviço Writer para ler e gravar no bucket. Se você precisar apenas de acesso de leitura, escolha a função de acesso ao serviço Content Reader.
- Você deve ter um bucket disponível em sua instância Object Storage. Para obter mais informações, consulte Criar um novo bucket.
- Você deve ter um projeto Code Engine e ele deve estar selecionado como o contexto atual.
Etapa 1: crie um segredo HMAC em Code Engine usando o console
Para acessar com segurança seu bucket COS, o site Code Engine requer as credenciais HMAC associadas à sua instância Object Storage. Você armazena essas credenciais em um segredo dentro do seu projeto Code Engine.
Siga Criando um segredo HMAC no console para criar um segredo no formato HMAC.
Forneça os valores correspondentes de sua credencial de serviço COS quando solicitado.
Etapa 2: Crie um armazenamento de dados persistente usando o console
Agora, crie o recurso de armazenamento de dados persistente em Code Engine. Esse recurso funciona como uma referência ao seu bucket COS e o vincula ao segredo HMAC que você criou.
- Clique no nome do seu projeto na página Code Engine Projects.
- Na página Componentes, clique em Armazenamentos de dados persistentes.
- Na página Persistent data stores (Armazenamentos de dados persistentes), clique em Create (Criar ).
- Na página Criar um armazenamento de dados persistente, conclua as etapas a seguir:
- Insira um nome; por exemplo,
mysecret-hmac. - Especifique se deseja selecionar a especificação do bucket COS existente ou se deseja adicionar manualmente.
- Selecione uma instância COS ou especifique seu nome manualmente.
- Selecione um bucket ou especifique seu nome manualmente.
- Selecione o segredo de acesso HMAC necessário para autenticar a instância COS.
- Clique em Create (Criar ) para criar o armazenamento de dados persistente.
- Insira um nome; por exemplo,
Etapa 3: monte o armazenamento de dados em uma carga de trabalho usando o console
Depois de criar o armazenamento de dados persistente, você pode montá-lo como Montagem de volume ao criar ou atualizar um aplicativo ou trabalho.
Montagem em um aplicativo
-
Navegue até seu aplicativo.
- Na página “Projetos” do Code Engine, clique no nome do seu projeto. Clique em Aplicativos para trabalhar com seus aplicativos.
- Na página Aplicativos, clique no nome do aplicativo que você deseja atualizar ou crie um novo aplicativo clicando em Criar.
-
Selecione a guia “Configuração ”.
-
Na guia Montagens de volume, clique em Adicionar.
-
Selecione o tipo de volume como Persistent data stores (Armazenamentos de dados persistentes ).
-
Selecione um armazenamento de dados persistente.
-
Especifique um subcaminho relativo do Bucket (opcional) se seu aplicativo deve acessar objetos no bucket apenas com esse prefixo de subcaminho, por exemplo
path/in/bucket. Isso é útil quando você deseja isolar o acesso a uma pasta específica dentro do bucket. O subcaminho deve ser um prefixo válido em seu bucket COS. Somente o conteúdo desse caminho poderá ser acessado a partir do diretório montado. -
Especifique o caminho de montagem. Esse é o diretório dentro do contêiner do aplicativo em que os dados da montagem do volume podem ser acessados, por exemplo, em
/mnt/bucket. -
Selecione um valor para as permissões de acesso, ou seja, Leitura-gravação ou Somente leitura.
-
Clique em Add para criar a montagem do volume.
-
Clique em “Implantar” para salvar suas alterações e implantar a revisão do aplicativo.
Quando você atualiza seu aplicativo, ele cria uma nova revisão e roteia o tráfego para essa instância.
Montagem em um trabalho
-
Navegue para a sua página de tarefa.
- Na página “Projetos” do Code Engine, clique no nome do seu projeto. Clique em Jobs para trabalhar com seus trabalhos e execuções de trabalhos.
- Na página Jobs, clique na guia Jobs e clique no nome do trabalho que você deseja atualizar ou crie um novo clicando em Create (Criar ).
-
Selecione a guia “Configuração ”.
-
Na guia Montagens de volume, clique em Adicionar.
-
Selecione o tipo de volume como Persistent data stores (Armazenamentos de dados persistentes ).
-
Selecione um armazenamento de dados persistente.
-
Especifique um subcaminho relativo do Bucket (opcional) se as execuções do seu trabalho devem acessar objetos no bucket com esse prefixo de subcaminho apenas, por exemplo
path/in/bucket. Isso é útil quando você deseja isolar o acesso a uma pasta específica dentro do bucket. O subcaminho deve ser um prefixo válido em seu bucket COS. Somente o conteúdo desse caminho poderá ser acessado a partir do diretório montado. -
Especifique o caminho de montagem. Esse é o diretório dentro do contêiner de execução do trabalho onde os dados da montagem do volume podem ser acessados, por exemplo, em
/mnt/bucket. -
Selecione um valor para as permissões de acesso, ou seja, Leitura-gravação ou Somente leitura.
-
Clique em Add para criar a montagem do volume.
-
Clique em Deploy para salvar suas alterações e implementar o trabalho.
-
Clique em Enviar tarefa.
Antes de Iniciar
Antes de trabalhar com armazenamentos de dados persistentes, certifique-se de que os seguintes pré-requisitos sejam atendidos.
- Você deve ter uma instância do IBM Cloud Object Storage.
- Você deve criar uma credencial de serviço para sua instância Object Storage com as credenciais HMAC ativadas. A credencial HMAC exige pelo menos a função de acesso ao serviço Writer para ler e gravar no bucket. Se você precisar apenas de acesso de leitura, escolha a função de acesso ao serviço Content Reader.
- Você deve instalar o plug-in IBM Cloud Object Storage executando o seguinte comando:
ibmcloud plugin install cloud-object-storage - Você deve ter um bucket disponível em sua instância Object Storage. Para obter mais informações, consulte Criar um novo bucket.
- Você deve ter um projeto Code Engine e ele deve estar selecionado como o contexto atual.
Etapa 1: crie um segredo HMAC em Code Engine usando a CLI
Para acessar com segurança seu bucket COS, o site Code Engine requer as credenciais HMAC associadas à sua instância Object Storage. Você armazena essas credenciais em um segredo dentro do seu projeto Code Engine.
Para criar um segredo no formato hmac, use o comando secret create comando.
ibmcloud ce secret create --name my-hmac-secret --format hmac --secret-access-key-prompt --access-key-id-prompt
Forneça os valores correspondentes de sua credencial de serviço COS quando solicitado pelo comando secret create comando.
Etapa 2: Crie um armazenamento de dados persistente usando a CLI
Agora, crie o recurso de armazenamento de dados persistente em Code Engine. Esse recurso funciona como uma referência ao seu bucket COS e o vincula ao segredo HMAC que você criou.
ibmcloud ce persistentdatastore create --name my-cos-bucket-pds --cos-bucket-name my-cos-bucket --cos-access-secret my-hmac-secret
- Substitua
my-cos-bucket-pdspor um nome exclusivo para seu armazenamento de dados. - Substitua
my-cos-bucketpelo nome exato do seu bucket COS. - Substitua
my-hmac-secretpelo nome do segredo HMAC.
Etapa 3: Monte o armazenamento de dados em uma carga de trabalho usando a CLI
Depois de criar o armazenamento de dados persistente, você pode montá-lo ao criar ou atualizar um aplicativo ou trabalho. Use a opção --mount-data-store com o formato MOUNT_PATH=PDS_NAME.
Montagem em um aplicativo
O comando a seguir cria um aplicativo chamado myapp e monta o armazenamento de dados my-cos-bucket-pds no diretório /mnt/bucket dentro do contêiner do aplicativo.
ibmcloud ce application create --name myapp --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds
Montagem em um trabalho
Da mesma forma, esse comando cria um trabalho chamado myjob e monta o mesmo armazenamento de dados no diretório /mnt/bucket.
ibmcloud ce job create --name myjob --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds
Montagem de um subcaminho dentro do compartimento
Você também pode montar um subcaminho específico no seu bucket COS anexando o caminho relativo à definição de montagem usando dois pontos (:). Isso é útil quando você deseja isolar o acesso a uma pasta específica dentro do bucket.
Por exemplo, para montar somente o diretório path/in/bucket do armazenamento de dados my-cos-bucket-pds em /mnt/bucket:
ibmcloud ce application create --name myapp --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds:path/in/bucket
Ou para um emprego:
ibmcloud ce job create --name myjob --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds:path/in/bucket
Observação: o endereço
path/in/bucketdeve ser um prefixo válido em seu bucket COS. Somente o conteúdo desse caminho poderá ser acessado a partir do diretório montado.
Etapa 4: Acesso a arquivos no armazenamento de dados montado
Quando seu aplicativo ou trabalho estiver em execução, o código poderá interagir com o bucket COS montado como se fosse um diretório local. Todas as operações padrão do sistema de arquivos são suportadas.
Por exemplo, dentro do seu contêiner, você pode listar arquivos, ler conteúdo e gravar novos arquivos:
# List files in the bucket
ls -l /mnt/bucket
# Read a file from the bucket
cat /mnt/bucket/my-document.txt
# Write a new file to the bucket
echo "Hello from Code Engine" > /mnt/bucket/new-file.txt
Limitações
A montagem é implementada usando o s3fsque fornece uma interface de sistema de arquivos baseada em FUSE para o armazenamento S3-compatible. Esteja
ciente das seguintes limitações:
- Número de armazenamentos de dados persistentes:
- Há uma restrição que permite um máximo de duas montagens de armazenamento de dados persistentes por aplicativo ou trabalho.
- Desempenho:
- Object Storage tem alta latência para o tempo até o primeiro byte, tornando-os mais lentos do que os sistemas de arquivos locais para operações que exigem acesso imediato.
- As operações que modificam arquivos, como gravações ou acréscimos aleatórios, exigem a reescrita de todo o objeto no backend, o que pode ser lento e ineficiente, pois não há acesso de gravação aleatória.
- As operações de metadados, como a listagem de diretórios, podem ter um desempenho ruim.
- Consistência:
- IBM Cloud Object Storage fornece consistência forte de leitura após gravação para novos objetos, mas consistência eventual para substituições e exclusões de objetos. Isso significa que, após uma atualização ou exclusão, as operações de leitura podem retornar temporariamente dados obsoletos.
- As alterações feitas no bucket de fora da montagem (por exemplo, diretamente por meio da API do COS ou de outro cliente) não são detectadas imediatamente e podem não ficar visíveis por algum tempo.
- Semântica do sistema de arquivos:
- Os recursos padrão do sistema de arquivos POSIX não são totalmente compatíveis. Especificamente, não há renomeações atômicas de arquivos ou diretórios e nem hard links.
- Concorrência:
- Não há coordenação entre vários clientes (por exemplo, várias instâncias de aplicativos) que montam o mesmo bucket. Gravações simultâneas no mesmo arquivo a partir de instâncias diferentes podem levar à perda ou corrupção de dados.
- Assinaturas de eventos:
- Se você tiver configurado uma assinatura de evento para o seu bucket Object Storage, saiba que as operações de criação de arquivo realizadas por meio da montagem podem gerar vários eventos de atualização. Isso pode fazer com que o aplicativo ou trabalho Code Engine seja acionado mais de uma vez para uma única operação de arquivo, o que pode afetar o processamento downstream ou os fluxos de trabalho orientados por eventos.
Devido a essas limitações, esse recurso não é adequado para todas as cargas de trabalho. Ele é mais adequado para cargas de trabalho que leem principalmente arquivos grandes, como em aprendizagem profunda ou análise de dados, onde é possível obter uma boa taxa de transferência. Não é recomendado para cargas de trabalho que exijam baixa latência, gravações pequenas e frequentes ou operações de arquivo transacional.
Próximas etapas
Agora que você já sabe como trabalhar com armazenamentos de dados persistentes, explore tópicos mais avançados: