0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Oracle Cloud Infrastructureにおけるオブジェクト・ストレージの概要

Posted at

初めに

Oracle Cloud Infrastructure(OCI)には、Amazon Web Services(AWS)のS3に相当するサービスであるのオブジェクト・ストレージという機能があります。

Oracle Cloud Infrastructureドキュメント抜粋
「オブジェクト・ストレージ・サービスは、信頼性のあるコスト効率の高いデータ耐久性を実現するインターネット規模の高パフォーマンス・ストレージ・プラットフォームです。」

本記事では、OCIのオブジェクト・ストレージサービスをTerraformで構築し、その主な機能を実際に確認した結果を紹介します。

流れとしては、「OCIオブジェクト・ストレージの機能」、「Terraformファイルの作成ポイント」で記載します。(私はTerraform好きなんですよね。)

OCIオブジェクト・ストレージの機能

ファイルのアップロードとストレージ層の選択

ファイル(オブジェクト)のアップロード時には、ストレージ層を選択することができます。これもAWS S3に似た機能で、「標準(Standard)」「アーカイブ(Archive)」などから選択が可能です。

007.png

また、ストレージ層の概要は以下になります。キャプチャの下のOCI のガイドからより詳細なものが確認できます。
011.png

ファイルのダウンロード

ファイルをダウンロードするには、オブジェクトストレージの管理コンソール上でファイルの右側にある「:」アイコンをクリックし、「ダウンロード」ボタンを選択します。

008.png

ライフサイクルポリシー

OCIのオブジェクト・ストレージには、AWS S3と同様にライフサイクルポリシーがあります。以下のように、指定した日数経過後にオブジェクトを「アーカイブ」層に移動したり、削除することが可能です。
006.png

ストレージ層の変更

アップロード済みのファイルについて、後からストレージ層を変更することも可能です。たとえば、「標準」から「アーカイブ」に変更することができます。ただし、「アーカイブ」に変更した場合、ダウンロードは直接行えません。(以下のキャプチャのようにダウンロードがグレーアウトされます)一度ストレージ層を「標準」に戻してからダウンロードする必要があります。
009.png

バージョニング機能

バージョニングを有効にすると、同じ名前の新しいバージョンのファイルをアップロードするたびに、以前のバージョンが過去バージョンになります。ストレージ層のオプションから過去のバージョンを確認することができます。また、最新のバージョンは「最新のバージョン」として表示されます。
010.png

Terraformファイルの作成ポイント

上記機能を確認するために、以下のTerraformファイルを実行しました。各設定のポイントは以下の通りです。

Strage.tf
# OCIプロバイダーの設定
provider "oci" {
  region = "ap-tokyo-1"
  auth   = "InstancePrincipal"
}

# オブジェクトストレージのネームスペースを取得
data "oci_objectstorage_namespace" "namespace" {}

# IAMポリシーの追加(ソースコンパートメントに必要な権限を付与)
resource "oci_identity_policy" "object_storage_service_policy" {
  name           = "allow_object_storage_service_to_manage_buckets"
  compartment_id = var.stg_compartment_ocid  # コンパートメントのOCIDを指定
  statements = [
    "Allow service objectstorage-ap-tokyo-1 to manage buckets in compartment ${var.compartment_name}",
    "Allow service objectstorage-ap-tokyo-1 to manage object-family in compartment ${var.compartment_name}"
  ]
  description = "Allows Object Storage service to manage buckets and object-family in the source compartment"
}

# オブジェクトストレージバケットの作成(東京リージョン)
resource "oci_objectstorage_bucket" "bucket" {
  namespace      = data.oci_objectstorage_namespace.namespace.namespace  # バケットが属するネームスペースを指定
  name           = "test-bucket"  # 作成するバケットの名前
  compartment_id = var.stg_compartment_ocid  # バケットを作成するコンパートメントのOCID(変数で定義)
  storage_tier   = "Standard"  # ストレージのティアを「Standard」に設定
  versioning     = "Enabled"  # バージョニングを有効に設定
  access_type    = "NoPublicAccess"  # パブリックアクセスを許可しない設定
}

# オブジェクトの古いバージョンを自動的に管理するライフサイクルポリシー
resource "oci_objectstorage_object_lifecycle_policy" "bucket_lifecycle_policy" {
  namespace = data.oci_objectstorage_namespace.namespace.namespace  # ネームスペースの設定
  bucket    = oci_objectstorage_bucket.bucket.name  # ポリシーを適用するバケットの名前

  # 10日後にオブジェクトをアーカイブ
  rules {
    action        = "ARCHIVE"
    is_enabled    = true
    name          = "archive_after_10_days"
    time_amount   = 10
    time_unit     = "DAYS"
  }

  # 20日後にオブジェクトを削除
  rules {
    action        = "DELETE"
    is_enabled    = true
    name          = "delete_after_20_days"
    time_amount   = 20
    time_unit     = "DAYS"
  }
}

# 変数の定義
variable "stg_compartment_ocid" {
  description = "The OCID of the staging compartment"
}

variable "compartment_name" {
  description = "The name of the compartment where the bucket is created"
}

ポイント①

IAMポリシーの設定: oci_identity_policyリソースで、オブジェクトストレージサービスに対して、バケットの管理や操作を許可するポリシーを設定しています。この設定により、Terraform(リソースマネージャー)でバケットの作成やライフサイクルポリシーの適用が可能になります。
ここで以下のエラーが出てたのですが、何回TF流してもうまくいかずに、まったく原因わからず、ChatGPT先生に教えてもらいました。ここはちょっと難しいかと思います。webの情報もまだ少ないのでそういった面でも解決難しかったです。

Error: 400-InsufficientServicePermissions, Permissions granted to the object storage service principal "objectstorage-ap-tokyo-1" to this bucket are insufficient.

ポイント②

変数の利用 variableブロックで、コンパートメントのOCIDなどの動的に変更可能な値を定義しています。これにより、設定の再利用(StgやPrdで)や管理のしやすさが向上します。

以下のようにリソースマネージャーで実行する際に入力画面が返るようになります。
ここも上記ポイント①を直すときにChatGPT先生が提案してくれました。
(stg_compartment_ocidのようにstgしたのは良くなかったです、、、)
005.png

参考リンク

  • oci_objectstorage_bucket

  • oci_objectstorage_object_lifecycle_policy

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?