データストレージ概要

ストレージの構成要素

本サービスのストレージは、サービス(Service), バケット(Bucket), オブジェクト(Object) という要素で構成されています。これらの要素はサービスがバケットを包含し、バケットがオブジェクトを包含する階層的な関係を持っています。

サービス(Service)

サービスは1つの契約とその契約に紐付くすべてのバケットの集合を表したものです

契約とは、本サービスの契約を意味しています。IIJサービスオンラインで表示される1つのサービスコードが1つの契約に対応します。
バケット(Bucket)

バケットはオブジェクトのコンテナ(入れ物)です。オブジェクトは1つのバケットに属します。バケット名は本サービス全体を通じて一意なものである必要があります

バケットには以下の制約があります。

  • 1つのバケットに格納可能なオブジェクトの数に制限はありませんが、バケットは1契約につき最大で 100個まで 作成できます。
  • バケット名については以下の規定に従わなければなりません。
    • 小文字(a-z)、数字(0-9)、ピリオド(.)、ダッシュ(-)で構成される。
    • 大文字を使用しない。
    • 数字または文字で開始する。
    • 文字列の長さが3~63の範囲内である。
    • IPアドレス表記でない(e.g., 192.168.5.4)。
    • バケット名の終端にダッシュを使用しない。
    • ピリオドを連続して使用しない。
    • ピリオドの前後にダッシュを使用しない(e.g., “my-.bucket.com” 、”my.-bucket”)。
オブジェクト(Object)

オブジェクトはデータ、オブジェクトキー、メタデータから構成されます。

オブジェクトキーは、URIで表現されたオブジェクトの識別子です。このオブジェクトキーによってバケット内のオブジェクトが一意に識別されます。
オブジェクトに付随する情報はメタデータとして管理されます。メタデータは名前と値のペアのセットです。オブジェクトをアップロードする際に任意の値を設定できます。


オブジェクトキーは一連のUnicode文字で、UTF-8にエンコードした時のバイト長の最大サイズは 950 Bytes です。 メタデータに任意の値を設定するには、オブジェクトをアップロードする際にHTTPリクエストヘッダに指定します。
オブジェクトの最大サイズは5TBです。 また、5GB以上のデータをアップロードするには、マルチパートアップロード 機能をご利用ください。


機能のご紹介

本サービスで提供する機能の概要を説明します。

ストレージ

HTTP/HTTPSを用いてデータの格納・取得操作を行えるシンプルなストレージです。管理コンソールなどを利用することで、どこからでも気軽に使用できるオンラインストレージサービスとして使うことができます。 また、RESTインタフェースのアプリケーションプログラミングインタフェース(API)を使用することで利用シーンに合わせた柔軟な操作を実現することもできます。

ストレージのAPIはAmazon S3ライクなREST APIです。


アクセスコントロール

アクセスコントロールリスト(ACL)及びバケットポリシーを使用してバケットとオブジェクトへのアクセス権限を管理できます。詳細は アクセス制御 をご覧ください。

マルチパートアップロード

オブジェクトの最大サイズは5TBですが、PUT Object APIでアップロードできるサイズは 5GBまで という制限があります。 マルチパートアップロード を使用することで、5GB以上のデータをアップロードできます。
マルチパートアップロードを使用すると、単一のオブジェクトをパート(断片的なデータ)のセットとしてアップロードできます。各パートは任意の順番でアップロードできます。

マルチパートアップロードの利点として、

  • 5GB以上のデータをアップロード可能
    最大5TBのオブジェクトをアップロードできます。
  • 一時的なネットワークの問題に強い
    アップロードの最中にネットワークの問題でエラーになってしまった場合に、影響範囲をアップロード中のパートのみに局所化できます。
  • 並列でアップロードし、効率を上げられる
    複数のパートを並列にアップロードすることで、単一のアップロード時よりもスループットが向上する場合があります。
マルチパートアップロードには以下の制限があります。
  • 1つのマルチパートアップロードでアップロードできるパートの数は最大 10,000 までです。
  • (終端となるパートを除き)各パートのサイズは 5MB以上 でなければなりません。

マルチパートアップロードの流れ
マルチパートアップロードは以下の手順で使用します。
  1. マルチパートアップロードの開始(初期化): Initiate Multipart Upload
    • まず、マルチパートアップロードの開始を意味するマルチパートアップロードリソースを作成します。
    • リソース作成の際に払い出される アップロードID を用いて以下の操作を行います。
  2. 各パートのアップロード: Upload Part
    • Upload Part APIを用いて各パートをアップロードします。この時、各パートの上限サイズは 5GB以下 、最後のパート以外は 5MB以上 の制限があります。
  3. マルチパートアップロードの完了: Complete Multipart Upload
    • 全パートのアップロードが終わったら、 Complete Multipart Upload をおこないマルチパートアップロードを完了します。 完了後は1つのオブジェクトが生成され、マルチパートアップロードに紐付くすべてのパートが破棄されます。


 マルチパートアップロードを中断するには Abort Multipart Upload を使用します。

 

静的Webサイトホスティング

静的Webサイトを本サービスでホスティングできます。
静的Webサイトとは、HTMLファイルやCSS、画像ファイル、JavaScriptなどの静的なコンテンツで構成されるWebサイトです。
静的Webサイトホスティングを利用するには、バケットに対してWebサイトホスティングの設定(PUT Bucket website)を行います。 その後そのバケットに、読み取り可能な権限でコンテンツをアップロードすると、以下のWebサイトエンドポイントからアクセスできます。

<bucket-name>.website-dag.iijgio.com

カスタムドメインの使用

Webサイトホスティングの設定を行ったバケットは、以下の手順で独自のドメインを使用してコンテンツを配信できます。

  1. ドメインを作成する
    • ドメイン名登録サービスを利用してドメインを登録します。既にドメインが登録済みの場合はこのステップを省略できます。
  2. バケットの作成及び設定
    • ドメイン名と同名のバケットを作成します。 例えば、ドメイン(www.example.com)であれば www.example.com という名前のバケットを作成します。 バケットの作成後、REST APIの PUT Bucket website を使用してWebサイトホスティング用の設定を行います。
  3. コンテンツのアップロード
    • ホスティングするWebサイトの静的なコンテンツをバケットにアップロードします。 この時、2. のWebサイトホスティング用の設定で指定した インデックスドキュメント と エラードキュメント が含まれるようにコンテンツを配置してください。
  4. コンテンツのアクセス権限の設定
    • Webサイトを公開するためにACLまたはバケットポリシーで匿名ユーザに対してREAD権限を付与します。
      例: ドメインが www.example.com でバケットポリシーで権限を付与する場合は以下のように設定します。
    {
      "Version": "2008-10-17",
      "Statement": [{
        "Sid": "AddPerm",
            "Effect": "Allow",
          "Principal": {
                "IIJGIO": "*"
             },
          "Action": ["dag:GetObject"],
          "Resource": ["grn:iijgio:dag:::www.example.com/*"]
        }
      ]
    }
  5. DNSの設定
    • CNAMEレコードとして、ドメインとWebサイトホスティングエンドポイントを紐付けます。
      例えば、 www.example.com の場合は、CNAMEタイプで www.example.com に対して .website-dag.iijgio.com を登録します。
  6. 確認
    • DNSに設定したドメインにアクセスしWebサイトが正しく動作することを確認します。 例えば、ドメインが www.example.com の場合は以下のURLです。 http://www.example.com/
クロスサイトリクエスト

クロスサイトリクエスト(Cross-Origin Resource Sharing: CORS) は、要求を出すリソースが存在するドメインとは異なるドメインに対してHTTPリクエストを行うことを指します。
本サービスのクロスサイトリクエスト機能を使うことで、静的なコンテンツを本サービスで管理し外部のWebサイトからJavaScriptを使用してアクセスできます。 クロスサイトリクエスト機能は PUT Bucket cors APIでバケットに対して設定できます。

詳細は PUT Bucket cors をご覧ください。