Skip to content

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:

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

  • Compatível com Amazon S3

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)

    • Um bucket privado requer um usuário autenticado e com a devida autorização para acessar os objetos armazenados.
  • Público (ObjectRead ou ObjectReadWithoutList)

    • Um bucket público pode ser acessado de forma anônima, sem a necessidade de autenticação ou autorização. Isso significa que os objetos armazenados nele estão disponíveis para qualquer pessoa na Internet.

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)

    • Permite que os usuários façam download e visualizem todos os objetos armazenados no bucket em formato de lista.
  • Somente Download (ObjectReadWithoutList)

    • Permite que os usuários façam o download apenas sem ser possível visualizar a lista de objetos armazenados no bucket. Nesse caso, o usuário deve ter a URL completa do arquivo para poder realizar o download.

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:

1
2
3
4
5
$ oci os bucket create \
> --region "sa-saopaulo-1" \
> --compartment-id "ocid1.compartment.oc1..aaaaaaaaaaaaaaaabbbbbbbbccc" \
> --name "pizza" \
> --public-access-type "ObjectReadWithoutList"

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.

alt_text

Para ativar a replicação dos objetos do bucket pizza, utilize o comando abaixo:

1
2
3
4
5
6
$ oci os replication create-replication-policy \
> --region "sa-saopaulo-1" \
> --bucket-name "pizza" \
> --destination-bucket "pizza" \
> --destination-region "sa-vinhedo-1" \
> --name "pizza-repl-policy"

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.

alt_text

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:

1
2
3
4
5
6
7
8
$ oci os replication list-replication-policies \
> --region "sa-saopaulo-1" \
> --bucket-name "pizza" \
> --all \
> --query data[].id
[
  "aBcDEEdf33-X12c-3434-111-iuiuzocip"
]

A partir do identificador da réplica, é possível excluí-la utilizando o seguinte comando:

1
2
3
4
5
$ oci os replication delete-replication-policy \
> --region "sa-saopaulo-1" \
> --bucket-name "pizza" \
> --replication-id "aBcDEEdf33-X12c-3434-111-iuiuzocip" \
> --force

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:

$ oci os object head --region "sa-saopaulo-1" --bucket-name "pizza" --name "marguerita.jpg"
{
  "accept-ranges": "bytes",
  "access-control-allow-credentials": "true",
  "access-control-allow-methods": "POST,PUT,GET,HEAD,DELETE,OPTIONS",
  "access-control-allow-origin": "*",
  "access-control-expose-headers": "accept-ranges,access-control-allow-credentials,access-control-allow-methods,access-control-allow-origin,content-length,content-md5,content-type,date,etag,last-modified,opc-client-info,opc-client-request-id,opc-request-id,storage-tier,strict-transport-security,version-id,x-api-id,x-content-type-options",
  "content-length": "18002",
  "content-md5": "0mIM5ASDASDASDASGLW/f5aeA==",
  "content-type": "image/jpeg",
  "date": "Wed, 01 Oct 2025 12:36:15 GMT",
  "etag": "7a98c9cf-58f2-4137-ab38-2af8e5288b84",
  "last-modified": "Wed, 01 Oct 2025 12:30:28 GMT",
  "opc-client-request-id": "ED8CC936ASDASDSADASA62D",
  "opc-request-id": "gru-1:24yOkt3xjpASDASDASDSADASSDAKA_FD7_X_",
  "storage-tier": "Standard",
  "strict-transport-security": "max-age=31536000; includeSubDomains",
  "version-id": "ooASDASD-00eeee6-asdas-eeee-7a73asdasdase",
  "x-api-id": "native",
  "x-content-type-options": "nosniff"
}
Metadados são úteis porque descrevem os dados por meio de propriedades. No exemplo acima, é possível verificar a data de criação do objeto através da propriedade 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:

1
2
3
4
5
6
$ oci os object bulk-upload \
> --region "sa-saopaulo-1" \
> --bucket-name "pizza" \
> --src-dir "imgs/" \
> --content-type "image/jpeg" \
> --verify-checksum

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.
  • --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:

alt_text

  • REGIÃO

  • NAMESPACE

    • Contêiner de nível superior usado por todos os buckets e objetos. No momento da criação da conta, cada tenant do OCI recebe um identificador namespace exclusivo que não pode ser alterado.
  • 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.

$ curl --head https://objectstorage.sa-saopaulo-1.oraclecloud.com/n/WYYdXX82dnaS/b/pizza/o/a-moda-da-casa.jpg
HTTP/1.1 200 OK
accept-ranges: bytes
Content-Length: 20819
content-md5: 0mIM5ASDASDASDASGLW/f5aeA==
last-modified: Mon, 06 Oct 2025 12:29:09 GMT
etag: 7a98c9cf-58f2-4137-ab38-2af8e5288b84
version-id: 8f63aabb-ce5e-464f-befe-6d931306e43d
storage-tier: Standard
Content-Type: image/jpeg
date: Mon, 06 Oct 2025 13:50:40 GMT
opc-request-id: gru-1:24yOkt3xjpASDASDASDSADASSDAKA_FD7_X_
x-api-id: native
x-content-type-options: nosniff
strict-transport-security: max-age=31536000; includeSubDomains
access-control-allow-origin: *
access-control-allow-methods: POST,PUT,GET,HEAD,DELETE,OPTIONS
access-control-allow-credentials: true
access-control-expose-headers: accept-ranges,access-control-allow-credentials

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.