Capítulo 4: Serviços Auxiliares e Persistência de Dados
4.1 Object Storage
4.1.1 O que é o Object Storage?
O Object Storage é um serviço que oferece uma plataforma para armazenamento de dados ilimitado, de alto desempenho, seguro, escalável, durável, além de estar disponível em múltiplas regiões. Este serviço é ideal para armazenar qualquer tipo de arquivo estático, sem uma estrutura fixa, sendo, portanto, utilizado para armazenar dados não estruturados.
Multi-região refere-se ao fato de que o serviço de Object Storage é disponibilizado nas várias regiões do OCI por meio de uma URL Base específica. Alguns exemplos incluem:
-
São Paulo, Brasil (sa-saopaulo-1)
-
Vinhedo, Brasil (sa-vinhedo-1)
-
Montreal, Canadá (ca-toronto-1)
Devido ao fato de que cada objeto possui uma URL exclusiva para acesso, o Object Storage pode ser integrado facilmente a qualquer aplicação web para fornecer conteúdo estático. Além disso, por ser multi-região, é possível distribuir e recuperar conteúdo pela Internet a partir de locais fisicamente mais próximos dos usuários, resultando em uma melhoria significativa na latência de acesso aos dados.
NOTA
É possível acessar os objetos armazenados no Object Storage de forma privada a partir de uma a VCN por meio de um recurso chamado Service Gateway, eliminando a necessidade de utilizar a Internet. O Service Gateway será abordado no Capítulo 5.
Algumas das principais características do Object Storage incluem:
-
Seguro
- Todos os objetos armazenados no Object Storage são automaticamente criptografados antes de serem salvos. Além disso, o serviço oferece a opção de criptografia dos objetos utilizando uma chave fornecida pelo cliente.
- O acesso aos objetos também é controlado pelo Serviço IAM.
-
Escalável
- Escalável significa que o serviço oferece espaço praticamente ilimitado, ajustando-se automaticamente de acordo com a demanda de uso.
-
Durável
- Os objetos são armazenados em vários servidores de forma redundante sem qualquer intervenção. Isso significa que o Object Storage mantém cópias dos objetos entre vários servidores dentro da região.
- Em regiões com mais de um Availability Domain (AD), os dados são replicados automaticamente entre os ADs da região.
-
Compatível com Amazon S3
- O Object Storage é totalmente compatível com o Amazon S3, permitindo que você migre sua aplicação do Amazon S3 para o Object Storage sem a necessidade de modificar o código.
4.1.2 Bucket
Um bucket é um contêiner lógico que funciona basicamente como um "diretório raiz" dentro do Object Storage, a partir do qual é possível armazenar e recuperar objetos (download).
Um bucket possui dois modos de acesso que são definidos durante sua criação:
-
Privado (
NoPublicAccess) -
Público (
ObjectReadouObjectReadWithoutList)
Independentemente de o bucket ser público ou privado, existem duas opções que determinam como o acesso aos objetos pode ser realizado:
-
Listar e Download (
ObjectRead) -
Somente Download (
ObjectReadWithoutList)
Buckets da Aplicação OCI PIZZA
A aplicação OCI PIZZA utiliza dois buckets públicos, um em cada região, chamado pizza. Esses buckets não possibilitam listar os objetos, oferecendo apenas a opção de download (ObjectReadWithoutList) e, serão utilizados exclusivamente para armazenar as imagens das pizzas.
Para criar o bucket na região sa-saopaulo-1, no compartimento cmp-appl do ambiente de produção, utilize o seguinte comando:
NOTA
Os scripts para a criação dos bucket de ambas as regiões do OCI estão localizados no diretório "scripts/capitulo-4" do repositório de códigos da aplicação OCI PIZZA. Os arquivos estão nomeados como "bucket-saopaulo.sh" e "bucket-vinhedo.sh".
Ativando a Replicação de Objetos
Buckets podem ter seus objetos replicados para outra região por meio de politicas de replicação.
No caso da aplicação OCI PIZZA, cada objeto criado no bucket pizza na região sa-saopaulo-1 será automaticamente replicado para a região sa-vinhedo-1. Essa replicação de dados é ativada para garantir que as imagens das pizzas disponibilizadas pela aplicação estejam acessíveis em ambas as regiões.

Para ativar a replicação dos objetos do bucket pizza, utilize o comando abaixo:
NOTA
A replicação de objetos requer uma Política IAM para funcionar. Consulte o capítulo "3.7 Cotas, Políticas IAM e Compartimentos da Aplicação OCI PIZZA" para obter informações sobre como criar essas políticas.
NOTA
O script para ativar a replicação pode ser encontrado no diretório "scripts/capitulo-4" do repositório de códigos da aplicação OCI PIZZA, sob o nome "bucket-replication.sh".
Após a ativação da réplica, o bucket de destino, localizado na região sa-vinhedo-1, é configurado em modo somente-leitura. Desso modo, não é possível excluír, renomear ou criar novos objetos.

Para ativar o modo leitura-escrita no bucket sa-vinhedo-1, é necessário excluir a réplica ativa. Para isso, deve-se primeiro obter o identificador da réplica no bucket de origem, situado na região do OCI sa-saopaulo-1, utilizando o seguinte comando:
A partir do identificador da réplica, é possível excluí-la utilizando o seguinte comando:
4.1.3 Arquivo ou Objeto?
Um arquivo é a unidade de armazenamento com a qual o seu computador local interage. Quando um arquivo é enviado e armazenado no Object Storage, ele se transforma em um objeto, que é composto por dados e metadados.
Por exemplo, é possível consultar os metadados do objeto marguerita.jpg, que contém o conteúdo de uma imagem, utilizando o seguinte comando:
date, o tamanho do objeto pela propriedade content-length, o tipo de conteúdo do arquivo pela propriedade content-type, etc. Upload de Arquivos
Arquivos enviados para o Object Storage podem ser de qualquer tipo, com tamanho máximo de 10 TiB (10 tebibytes) cada.
Para transferir um arquivo ou mais do seu computador local para o Object Storage, utilize o seguinte comando:
Abaixo está uma breve descrição de alguns dos parâmetros utilizados:
-
--src-dir- Diretório de onde todo o seu conteúdo será copiado para o bucket especificado pelo parâmetro
--bucket-name.
- Diretório de onde todo o seu conteúdo será copiado para o bucket especificado pelo parâmetro
-
--content-type- Define o MIME type que especifica o tipo de conteúdo do arquivo a ser copiado. Essa opção é útil, pois informa ao navegador como interpretar o arquivo.
-
--verify-checksum- Realiza uma verificação de checksum dos objetos copiados, garantindo assim a integridade dos dados.
NOTA
A opção --content-type é importante, pois indica ao navegador como ele deve interpretar o arquivo. No caso da aplicação OCI PIZZA, que utiliza o Object Storage para armazenar arquivos de imagem, é necessário especificar o valor image/jpeg. Caso contrário, o padrão será application/octet-stream, o que fará com que o navegador baixe o arquivo em vez de exibi-lo como uma imagem. Consulte o link "Media types (MIME types)" para uma visão geral dos tipos de arquivos que podem ser especificados.
NOTA
No diretório "scripts/capitulo-4" do repositório de códigos da aplicação OCI PIZZA, encontra-se o script "bucket-file-upload.sh", utilizado para o upload das imagens em abas as regiões. Também está presente o diretório "imgs/", que contém as imagens das pizzas utilizadas pela aplicação.
4.1.4 Acessando Objetos
Todo objeto armazenado no Object Storage tem uma URL específica que pode ser utilizada para acessá-lo. Essa URL possui o seguinte formato:

-
REGIÃO
-
NAMESPACE
-
BUCKET
-
NOME-DO-OBJETO
No caso da aplicação OCI PIZZA, o bucket pizza é público, permitindo o acesso direto aos seus objetos por meio de suas URLs, sem a necessidade de autenticação ou autorização.
NOTA
O comando curl acima foi utilizado apenas para acessar os cabeçalhos, sem realizar o download do objeto. Para realizar o download do objeto utilize a opção -O.
NOTA
Apesar do bucket pizza ser público, é necessário ter uma Chave de Acesso válida e Políticas IAM apropriadas que permitam o envio de arquivos à ele.