LoginSignup
2
0

More than 3 years have passed since last update.

アリババクラウドのパートナーのAPコミュニケーションズ様より、アリババクラウドについて第二弾のレポートをいただきましたので共有させていただきます。本編はこちらのサイトでご覧ください。
今回はOSSについてとなります。

< techblogAPCについて(はじめにお読み下さい) >

はじめに

こんにちは、IaC技術推進部の山路です。本記事では、Alibaba Cloudの提供するOSS(Object Storage Service)の機能紹介、およびOSSと合わせて利用できるツールの利用方法について紹介いたします。各機能・ツールの詳細にまでは触れませんが、それぞれの概要と利用方法、オブジェクトストレージサービスとして代表的なAW S3との比較を行い、OSSの全体像について把握することを目的に、本記事を書きました。

本記事ではまずOSSの機能についての概要を紹介し、次回の記事でOSSの周辺ツールについてご紹介したいと思います。

OSSとは

OSSはAlibaba Cloudの提供するオブジェクトストレージサービスです。クラウドプロバイダーの提供するオブジェクトストレージサービスとして有名なものには、AWS S3 / Azure blob / GCP Cloud Storageなどがありますが、OSSもそれらと同様の機能を提供します。OSSはバケット/オブジェクトという概念で利用されており、バケットごとにエンドポイントを通じてオブジェクトを利用することができます。主な特徴は以下の通りです。

  • 信頼性: 99.999999999%の耐久性と99.99%のサービス可用性を保証。またゾーン冗長ストレージ、リージョン跨ぎのレプリケーション作成をサポートします。
  • ストレージクラス: OSSには標準・低頻度アクセス・アーカイブの3つのクラスが存在し、オブジェクトストレージの利用方法法に応じて選択できます。
  • セキュリティ: バケットごとのACL、RAM(Resurce Access Management)毎のアクセスポリシーの設定によるセキュリティの向上。
  • コスト: アップストリームトラフィックは無料。
    OSSには一部利用制限もあるため、主なものは以下に記載をいたします。

  • バケット数: 各リージョンに作成できるバケット数は30まで。

  • アップロード: Webコンソールや簡易ツールによるオブジェクトアップロードは5GBまで対応。5GBを超える場合はOSSUtilや各プログラム言語のSDKを利用(最大48.8TB)。

  • ドメインのバインド: OSSのバケットにドメインを紐づけ、中国本土リージョンにある公開サーバーに Web サイトをリンクさせる場合は、 ICP ライセンスを申請する必要がある
    ※参考リンク:

  • Alibaba Cloud - OSS:制限

OSSの利用方法

ブラウザ

Alibaba CloudのサービスであるOSSは、Alibaba CloudのWebコンソールから利用することが可能です。なお、本記事ではWebコンソール上の言語は英語を指定していますが、日本語の利用も可能です。

まずはログイン後の画面からOSSを選択します。
image.png

バケットを作成する場合は、まず「Create Bucket」を選択します。
image.png

バケット作成画面が表示されるので、バケット名やリージョンなどを指定します。Storage Classには以下の3種類が存在します。

  • 標準(Standard):頻繁なデータへのアクセスをサポート。3種類の中では最もコストが高い。
  • 低頻度アクセス(IA、Infrequent Access):長期間(1か月以上)保存する必要があり、アクセスは月に1~2回程度のデータ保存に適している。
  • アーカイブ(Archive):長期間(半年以上)保存し、めったにアクセスをしないデータに適する。3種類のクラスで最もコストが低い。

※参考リンク:

image.png
バケットごとのアクセスできる範囲を指定するAccess Control List(ACL)は、バケット作成後も変更することができます。
image.png
image.png

なお、選択したリージョンによっては、選択できないサービスも存在します。例えば本記事執筆時点では、中国リージョンを選択した場合、以下のようにZone-Redundant Storage Versioningが利用できますが、日本リージョンでは表示されません。また中国リージョンを利用する場合はいくつか注意しなければならない項目もあるため、今回は日本リージョンを選択しました。

image.png

作成が完了した場合、バケット画面に遷移します。これでオブジェクトを格納することができます。

image.png

「File」を選択し、オブジェクトの一覧を表示するページに遷移します。

image.png

Web管理画面からファイルをアップロードする場合、「Upload」を選択すれば、以下のような画面が表示され、ファイル名の指定・ドラッグ&ドロップなどで指定のファイルをアップロードできます。

image.png

アップロードが完了した場合、StatusがUploadedとなります。これでファイルのアップロードが完了しました。

image.png

アップロードしたオブジェクトは、アップロード完了後もタグ付けやACLの設定を行うことができます。

image.png

aliyunコマンド

Alibaba CloudではaliyunCLIを通じて各種リソースの操作を行うことができます。OSSを操作する場合はaliyun ossコマンドを利用します。

ここではAlibaba CloudのECSでaliyunコマンドを利用し、OSSを操作します。

# aliyun cli インストール
[root@test01 ~]# wget https://aliyuncli.alicdn.com/aliyun-cli-linux-3.0.45-amd64.tgz
[root@test01 ~]# tar -xzvf aliyun-cli-linux-3.0.45-amd64.tgz
[root@test01 ~]# mv aliyun /usr/local/bin


# バージョン確認
[root@test01 ~]# aliyun version
3.0.45


# aliyun oss コマンド
[root@test01 ~]# aliyun oss --help
Object Storage Service

Usage:
  aliyun oss [command] [args...] [options...]

Commands:
  getallpartsize    Get bucket all uncompleted multipart objects's parts size and sum size
  appendfromfile    Upload the contents of the local file to the oss appendable object by append upload mode
  cors              Set, get or delete the cors configuration of the oss bucket
  bucket-encryption Set, get or delete bucket encryption configuration
  lifecycle         Set, get or delete bucket lifecycle configuration
  logging           Set、get or delete bucket log configuration
  bucket-policy     Set, get or delete bucket policy configuration
  bucket-qos        Set, get or delete bucket qos configuration
  referer           Set、get or delete bucket referer configuration
  bucket-tagging    Set, get or delete bucket tag configuration
  bucket-versioning Set, get bucket versioning configuration
  website           Set, get or delete bucket website configuration
  cat               Output object content to standard output
  cors-options      Send http options request to oss for CORS detection
  cp                Upload, Download or Copy Objects
  create-symlink    Create symlink of object
  du                Get the bucket or the specified prefix(directory) storage size
  hash              Get crc64 or md5 of local file
  help              Get help about commands
  listpart          List parts information of uncompleted multipart object
  ls                List Buckets or Objects
  mb                Make Bucket
  mkdir             Create a oss directory whose object name has the suffix character '/'
  object-tagging    Set, get or delete object tag configuration
  probe             Probe command, support for multiple function detection
  read-symlink      Display meta information of symlink object
  request-payment   Set, get bucket request payment configuration
  restore           Restore Frozen State Object to Read Ready Status
  rm                Remove Bucket or Objects
  set-acl           Set acl on bucket or objects
  set-meta          set metadata on already uploaded objects
  sign              Generate download link for object
  stat              Display meta information of bucket or objects
  user-qos          Get user's qos configuration

Use `oss --help` for more information.



# Alibaba Cloud接続情報の登録(aliyun configure)
[root@test01 ~]# aliyun configure
Configuring profile 'default' in 'AK' authenticate mode...
Access Key Id []: <AccessKeyId>    # Alibaba Cloud AccessKeyId情報を指定
Access Key Secret []: <AccessKeySecret>    # Alibaba Cloud AccessKeySecret情報を指定
Default Region Id []: ap-northeast-1    # ここでは日本を選択
Default Output Format [json]: json (Only support json)    # 特に指定せずEnterキーを実行
Default Language [zh|en] en:    # 特に指定せずEnterキーを実行
Saving profile[default] ...Done.

Configure Done!!!
..............888888888888888888888 ........=8888888888888888888D=..............
...........88888888888888888888888 ..........D8888888888888888888888I...........
.........,8888888888888ZI: ...........................=Z88D8888888888D..........
.........+88888888 ..........................................88888888D..........
.........+88888888 .......Welcome to use Alibaba Cloud.......O8888888D..........
.........+88888888 ............. ************* ..............O8888888D..........
.........+88888888 .... Command Line Interface(Reloaded) ....O8888888D..........
.........+88888888...........................................88888888D..........
..........D888888888888DO+. ..........................?ND888888888888D..........
...........O8888888888888888888888...........D8888888888888888888888=...........
............ .:D8888888888888888888.........78888888888888888888O ..............


# バケットの作成
[root@test01 ~]# aliyun oss mb oss://testbucket20200601

0.993953(s) elapsed


# 作成後のバケットの確認
[root@test01 ~]# aliyun oss ls
CreationTime                                 Region    StorageClass    BucketName
2020-06-01 15:37:30 +0800 CST    oss-ap-northeast-1        Standard    oss://testbucket20200601
Bucket Number is: 1

0.337527(s) elapsed


# テスト用ファイルの生成
[root@test01 ~]# dd if=/dev/zero of=testfile_ecs_local_20200528 bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 3.05775 s, 351 MB/s


# バケットへのアップロード
[root@test01 ~]# aliyun oss cp testfile_ecs_local_20200528 oss://testbucket20200601
Succeed: Total num: 1, size: 1,073,741,824. OK num: 1(upload 1 files).

1581.623815(s) elapsed
[root@test01 ~]#


# アップロード後のバケット確認
[root@test01 ~]# aliyun oss ls oss://testbucket20200601
LastModifiedTime                   Size(B)  StorageClass   ETAG                                  ObjectName
2020-06-01 16:07:09 +0800 CST   1073741824      Standard   679D3C338EF35FADDBA432CA3E2717C3-400  oss://testbucket20200601/testfile_ecs_local_20200528
Object Number is: 1

0.048180(s) elapsed
[root@test01 ~]#

OSS SDK

OSSでは各プログラミング言語用のSDKを提供しています。本記事を書いている時点では、以下の言語で利用可能です。

言語 バージョン
Java ver 1.6 以降
Python 2.6,2.7,3.3,3.4,3.5
Android -
iOS ver 8.0以降
.Net .NET Framework 2.0 以降
Node.js ver 6以降
Browser.js -
PHP -
C -
Ruby ver 1.9.3以降
Go ver 1.6以降
Media-C -

※参考リンク:

package main
import (
    "fmt"
    "os"
    "github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main(){
    client, err := oss.New("<Endpoint>", "<AccessKeyId>", "<AccessKeySecret>")
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    bucket, err := client.Bucket("<Bucket名を指定>")
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    err = bucket.PutObjectFromFile("<格納後のObject名を指定>", "<ローカルファイル名>")
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
}

今回は以下のような値を指定しました。

# 実行
[root@test01 ~]# go get github.com/aliyun/aliyun-oss-go-sdk/oss
[root@test01 ~]# go run osstest.go

# 実行後の確認

[root@test01 ~]# aliyun oss ls oss://testbucket20200601
LastModifiedTime                   Size(B)  StorageClass   ETAG                                  ObjectName
2020-06-01 16:42:23 +0800 CST   1073741824      Standard   CD573CFAACE07E7949BC0C46028904FF      oss://testbucket20200601/testfile_20200526.txt
2020-06-01 16:07:09 +0800 CST   1073741824      Standard   679D3C338EF35FADDBA432CA3E2717C3-400  oss://testbucket20200601/testfile_ecs_local_20200528
Object Number is: 2

0.048055(s) elapsed

OSSの機能

OSSには単にオブジェクトを格納するだけでなく、それに関する様々な機能が備わっています。ここではその一部について紹介します。

OSS Transfer Acceleration

概要

OSSはデフォルトではインターネット経由、またはVPC内部からアクセスする用のエンドポイントを提供します。インターネット経由の場合、通信の状態によってはオブジェクトのアップロード・ダウンロードが遅延し、場合によっては処理が失敗することもあります。Transfer Accelerationを有効にすることで、高速通信用のエンドポイントが提供され、それを利用することで、インターネット経由で高速のファイルアップロード・ダウンロードが可能になります。

利用方法

Transfer Accelerationを有効にするには、Alibaba CloudのWebコンソール画面から操作する必要があります。以下の画面キャプチャのように、Transfer Accelerationの有効化ボタンをクリックすることで、この機能を利用できます。ただし有効化してから機能を利用できるまでは30分程度は時間が必要になります。
image.png

「Enable」ボタンを選択すると、以下のようにTransfer Accelerationの説明と注意書きが表示されます。

image.png

表示画面下部の「Transfer Acceleration」をクリックし、有効にしたうえで「Save」を選択します。

image.png

Transfer Accelerationのエンドポイントが表示され、利用可能になっていることが確認できます。

image.png

Transfer Accelerationを有効化することで、Webコンソール画面から以下のようにTransfer Accelerationの設定画面へアクセスすることができます。

image.png

image.png

設定画面では、Transfer Accelerationを有効化・無効化を変更することができます。

image.png

上記のようにTransfer Accelerationを有効にした後は、提供されたエンドポイントを指定してアクセスすることで利用することができます。例えば前述のGolang SDKを利用する場合、指定するEndpointを変更するだけで利用可能です。

# 一部のみ記載

func main(){
    # Endpointを変更
    client, err := oss.New("http://oss-accelerate.aliyuncs.com", "<AccessKeyId>", "<AccessKeySecret>")
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

Transfer Accelerationを利用することでどの程度速度が向上するかは、以下のリンク先でリージョン別の情報を確認することができます。

※参考リンク:

Cross-Origin Resource Sharing (CORS)

OSSにはCross-Origin Resource Sharing (CORS)を利用することができます。CORSは、あるWebアプリケーションから別のオリジンにあるリソースへのアクセス権限を付与する機能です。

※参考リンク:

image.png

image.png

CORSのルールを作成する際は、Source AllowedMethodsは必須項目となり、ここで許可する送信元とメソッドを指定します。
image.png

image.png

また、先ほどのaliyun ossコマンドや、次回紹介するossutilコマンドでもCORSの設定を行うことができます。

# aliyun oss corsコマンド
[root@test01 ~]# aliyun oss cors --help
Set, get or delete the cors configuration of the oss bucket

Usage:
  aliyun oss
    ossutil cors --method put oss://bucket  local_xml_file
    ossutil cors --method get oss://bucket  [local_xml_file]
    ossuitl cors --method delete oss://bucket


Flags:
  --mode              use `--mode {AK|StsToken|RamRoleArn|EcsRamRole|RsaKeyPair|RamRoleArnWithRoleName}` to assign authenticate mode
  --profile,-p        use `--profile <profileName>` to select profile
  --language          use `--language [en|zh]` to assign language
  --region            use `--region <regionId>` to assign region
  --config-path       use `--config-path` to specify the configuration file path
  --access-key-id     use `--access-key-id <AccessKeyId>` to assign AccessKeyId, required in AK/StsToken/RamRoleArn mode
  --access-key-secret use `--access-key-secret <AccessKeySecret>` to assign AccessKeySecret
  --sts-token         use `--sts-token <StsToken>` to assign StsToken
  --ram-role-name     use `--ram-role-name <RamRoleName>` to assign RamRoleName
  --ram-role-arn      use `--ram-role-arn <RamRoleArn>` to assign RamRoleArn
  --role-session-name use `--role-session-name <RoleSessionName>` to assign RoleSessionName
  --private-key       use `--private-key <PrivateKey>` to assign RSA PrivateKey
  --key-pair-name     use `--key-pair-name <KeyPairName>` to assign KeyPairName
  --read-timeout      use `--read-timeout <seconds>` to set I/O timeout(seconds)
  --connect-timeout   use `--connect-timeout <seconds>` to set connect timeout(seconds)
  --retry-count       use `--retry-count <count>` to set retry count
  --expired-seconds   use `--expired-seconds <seconds>` to specify expiration time
  --config-file,-c    Path of ossutil configuration file, where to dump config in config command, or to load config in other commands that need credentials.
  --endpoint,-e       Base endpoint for oss endpoint(Notice that the value of the option will cover the value in config file). Take notice that it should be second-level domain(SLD).
  --proxy-host        url of network proxy server, which supports http/https/socks5, such as https://120.79.128.211:3128, socks5://120.79.128.211:1080
  --proxy-user        username of network proxy, default is empty
  --proxy-pwd         password of network proxy, default is empty
  --method            specifies the http method,value is PUT、GET、DELETE...
  --loglevel          log level,default is empty(no log file output),optional value is:info|debug,info will output information logs,debug will output detail logs(including http request and response logs)
  --mode              use `--mode {AK|StsToken|RamRoleArn|EcsRamRole|RsaKeyPair|RamRoleArnWithRoleName}` to assign authenticate mode
  --profile,-p        use `--profile <profileName>` to select profile
  --config-path       use `--config-path` to specify the configuration file path
  --ram-role-name     use `--ram-role-name <RamRoleName>` to assign RamRoleName
  --help              print help

Use `cors --help` for more information.
[root@test01 ~]#


# CORS設定用XMLファイルの用意
[root@test01 ~]# cat cors.xml
<?xml version="1.0" encoding="UTF-8"?>
  <CORSConfiguration>
    <CORSRule>
        <AllowedOrigin>www.aliyun.com</AllowedOrigin>
        <AllowedMethod>PUT</AllowedMethod>
        <MaxAgeSeconds>10000</MaxAgeSeconds>
    </CORSRule>
</CORSConfiguration>


# CORSの設定
[root@test01 ~]# aliyun oss cors --method put oss://testbucket20200601 cors.xml

0.013443(s) elapsed


# 設定後確認
[root@test01 ~]# aliyun oss cors --method get oss://testbucket20200601
<?xml version="1.0" encoding="UTF-8"?>
  <CORSConfiguration>
      <CORSRule>
          <AllowedOrigin>www.aliyun.com</AllowedOrigin>
          <AllowedMethod>PUT</AllowedMethod>
          <MaxAgeSeconds>10000</MaxAgeSeconds>
      </CORSRule>
  </CORSConfiguration>


0.011996(s) elapsed

CORSルールの設定で用いるXMLファイルの記述例はこちらのページなどに記載されています。

投入後は以下のようにWebコンソールからも確認できるようになります。

image.png

以降はCORSルールの削除手順になります。

# 設定削除
[root@test01 ~]# aliyun oss cors --method delete oss://testbucket20200601

0.016953(s) elapsed


# 削除後の確認
[root@test01 ~]# aliyun oss cors --method get oss://testbucket20200601
error:oss: service returned error: StatusCode=404, ErrorCode=NoSuchCORSConfiguration, ErrorMessage="The CORS Configuration does not exist.", RequestId=5EDEE068CA03DC3433251D79
ERROR: oss: service returned error: StatusCode=404, ErrorCode=NoSuchCORSConfiguration, ErrorMessage="The CORS Configuration does not exist.", RequestId=5EDEE068CA03DC3433251D79

※参考サイト:

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

OSSはバケットにhtmlファイルを格納・設定することで、静的Webサイトのページとして利用することができます。OSSでは、デフォルトページ・エラーページを設定することができます。

静的Webサイトを用意する際、まずはデフォルトページ・エラーページ用のhtmlファイルを用意します。今回はテスト用の以下の2つのhtmlファイルを利用します。

index.html

<html>
  <head>
      <title>Hello OSS! </title>
      <meta charset="utf-8">
  </head>
  <body>
      <p>Welcome to OSS Static Website Hosting.</p>
      <p>This is the homepage.</p>
  </body>
</html>

error.html

<html>
  <head>
      <title>Hello OSS! </title>
      <meta charset="utf-8">
  </head>
  <body>
      <p>This is an error homepage for OSS Static Website Hosting.</p>
  </body>
</html>

上記2つのファイルを作成しOSSにアップロードしたのち、Webコンソールから設定を行います。設定は「Basic Settings」→「Static Pages」にて各ファイル名を入力することで完了します。

image.png

image.png

「Static Pages」では、デフォルトページとエラーページをhtmlファイル名を指定して設定します。

image.png

htmlファイルの設定後、ACLを変更し、OSSバケットへのアクセス権を変更して、Webブラウザからアクセスできるようにします。

image.png

ここではPublic Readを指定することで、外部からのReadアクセスを許可し、Webサイトにアクセスできるようになります。また、アクセス元を制限する機能もOSSは備えており、それについては後述します。

image.png

Public Read選択時に以下のようなメッセージが表示されるので、「Configure」を選択します。

image.png

設定後は以下のようにPublic Readと表示されます。セキュリティの問題となる可能性がある設定のため、文字の色が変化しています。

image.png

これでバケットにアクセスすることが可能となりました。WebブラウザからURLを入力すると、以下のようにデフォルトのページが表示されます。

image.png

またエラーページも以下のように表示されます。

image.png

静的Webサイトの設定はaliyun oss websiteコマンドからも可能です。

# aliyun oss websiteコマンド
[root@test01 ~]# aliyun oss website --help
Set, get or delete bucket website configuration

Usage:
  aliyun oss
        ossutil website --method put oss://bucket local_xml_file [options]
    ossutil website --method get oss://bucket [local_xml_file] [options]
    ossuitl website --method delete oss://bucket [options]


Flags:
  --mode              use `--mode {AK|StsToken|RamRoleArn|EcsRamRole|RsaKeyPair|RamRoleArnWithRoleName}` to assign authenticate mode
  --profile,-p        use `--profile <profileName>` to select profile
  --language          use `--language [en|zh]` to assign language
  --region            use `--region <regionId>` to assign region
  --config-path       use `--config-path` to specify the configuration file path
  --access-key-id     use `--access-key-id <AccessKeyId>` to assign AccessKeyId, required in AK/StsToken/RamRoleArn mode
  --access-key-secret use `--access-key-secret <AccessKeySecret>` to assign AccessKeySecret
  --sts-token         use `--sts-token <StsToken>` to assign StsToken
  --ram-role-name     use `--ram-role-name <RamRoleName>` to assign RamRoleName
  --ram-role-arn      use `--ram-role-arn <RamRoleArn>` to assign RamRoleArn
  --role-session-name use `--role-session-name <RoleSessionName>` to assign RoleSessionName
  --private-key       use `--private-key <PrivateKey>` to assign RSA PrivateKey
  --key-pair-name     use `--key-pair-name <KeyPairName>` to assign KeyPairName
  --read-timeout      use `--read-timeout <seconds>` to set I/O timeout(seconds)
  --connect-timeout   use `--connect-timeout <seconds>` to set connect timeout(seconds)
  --retry-count       use `--retry-count <count>` to set retry count
  --expired-seconds   use `--expired-seconds <seconds>` to specify expiration time
  --config-file,-c    Path of ossutil configuration file, where to dump config in config command, or to load config in other commands that need credentials.
  --endpoint,-e       Base endpoint for oss endpoint(Notice that the value of the option will cover the value in config file). Take notice that it should be second-level domain(SLD).
  --proxy-host        url of network proxy server, which supports http/https/socks5, such as https://120.79.128.211:3128, socks5://120.79.128.211:1080
  --proxy-user        username of network proxy, default is empty
  --proxy-pwd         password of network proxy, default is empty
  --loglevel          log level,default is empty(no log file output),optional value is:info|debug,info will output information logs,debug will output detail logs(including http request and response logs)
  --method            specifies the http method,value is PUT、GET、DELETE...
  --mode              use `--mode {AK|StsToken|RamRoleArn|EcsRamRole|RsaKeyPair|RamRoleArnWithRoleName}` to assign authenticate mode
  --profile,-p        use `--profile <profileName>` to select profile
  --config-path       use `--config-path` to specify the configuration file path
  --ram-role-name     use `--ram-role-name <RamRoleName>` to assign RamRoleName
  --help              print help

Use `website --help` for more information.
[root@test01 ~]#


# Website設定用XMLファイルの用意
[root@test01 ~]# cat index.xml
<?xml version="1.0" encoding="UTF-8"?>
<WebsiteConfiguration>
    <IndexDocument>
        <Suffix>index.html</Suffix>
    </IndexDocument>
    <ErrorDocument>
        <Key>error.html</Key>
    </ErrorDocument>
</WebsiteConfiguration>


# 設定の反映
[root@test01 ~]# aliyun oss website --method put oss://testbucket20200601 index.xml

0.060839(s) elapsed


# 設定の確認
[root@test01 ~]# aliyun oss website --method get oss://testbucket20200601
<?xml version="1.0" encoding="UTF-8"?>
  <WebsiteConfiguration>
      <IndexDocument>
          <Suffix>index.html</Suffix>
      </IndexDocument>
      <ErrorDocument>
          <Key>error.html</Key>
      </ErrorDocument>
      <RoutingRules></RoutingRules>
  </WebsiteConfiguration>


0.013237(s) elapsed

※参考リンク:

ライフサイクル管理

OSSではライフサイクル管理により、バケット内のオブジェクトを定期的に削除・移行することが可能になります。

例えばミーティングの議事録などをtext/text_20200603.txtという形式でバケットに格納しており、一定時間経過したファイルは別のアーカイブ用のバケットに移動したい場合、text/に格納されているオブジェクトを対象に、30日以上経過したものはアーカイブ用のバケットへ移す、といった使い方も可能です。

ライフサイクルはWebコンソールから各ルールを設定することが可能です。

まずは「Basic Settings」→「Lifecycle」へと移動し、ライフサイクルのルールを作成します。

image.png

image.png

Basic Settingsでは、ライフサイクルのルールを適用するオブジェクトを指定します。Clear Policyでは対象のオブジェクトに対する処理を選択し、別のバケットに移動する、あるいは削除を選択することができます。またDelete Partsは大容量ファイルをアップロードする際に利用するマルチパートアップロードイベントに対するライフサイクルを指定します。

image.png

image.png

ライフサイクル管理はaliyun oss lifecycleコマンドから設定することも可能です。

# aliyun oss lifecycleコマンド
[root@test01 ~]# aliyun oss lifecycle --help
Set, get or delete bucket lifecycle configuration

Usage:
  aliyun oss
        ossutil lifecycle --method put oss://bucket local_xml_file [options]
    ossutil lifecycle --method get oss://bucket [local_xml_file] [options]
    ossuitl lifecycle --method delete oss://bucket [options]


Flags:
  --mode              use `--mode {AK|StsToken|RamRoleArn|EcsRamRole|RsaKeyPair|RamRoleArnWithRoleName}` to assign authenticate mode
  --profile,-p        use `--profile <profileName>` to select profile
  --language          use `--language [en|zh]` to assign language
  --region            use `--region <regionId>` to assign region
  --config-path       use `--config-path` to specify the configuration file path
  --access-key-id     use `--access-key-id <AccessKeyId>` to assign AccessKeyId, required in AK/StsToken/RamRoleArn mode
  --access-key-secret use `--access-key-secret <AccessKeySecret>` to assign AccessKeySecret
  --sts-token         use `--sts-token <StsToken>` to assign StsToken
  --ram-role-name     use `--ram-role-name <RamRoleName>` to assign RamRoleName
  --ram-role-arn      use `--ram-role-arn <RamRoleArn>` to assign RamRoleArn
  --role-session-name use `--role-session-name <RoleSessionName>` to assign RoleSessionName
  --private-key       use `--private-key <PrivateKey>` to assign RSA PrivateKey
  --key-pair-name     use `--key-pair-name <KeyPairName>` to assign KeyPairName
  --read-timeout      use `--read-timeout <seconds>` to set I/O timeout(seconds)
  --connect-timeout   use `--connect-timeout <seconds>` to set connect timeout(seconds)
  --retry-count       use `--retry-count <count>` to set retry count
  --expired-seconds   use `--expired-seconds <seconds>` to specify expiration time
  --config-file,-c    Path of ossutil configuration file, where to dump config in config command, or to load config in other commands that need credentials.
  --endpoint,-e       Base endpoint for oss endpoint(Notice that the value of the option will cover the value in config file). Take notice that it should be second-level domain(SLD).
  --proxy-host        url of network proxy server, which supports http/https/socks5, such as https://120.79.128.211:3128, socks5://120.79.128.211:1080
  --proxy-user        username of network proxy, default is empty
  --proxy-pwd         password of network proxy, default is empty
  --loglevel          log level,default is empty(no log file output),optional value is:info|debug,info will output information logs,debug will output detail logs(including http request and response logs)
  --method            specifies the http method,value is PUT、GET、DELETE...
  --mode              use `--mode {AK|StsToken|RamRoleArn|EcsRamRole|RsaKeyPair|RamRoleArnWithRoleName}` to assign authenticate mode
  --profile,-p        use `--profile <profileName>` to select profile
  --config-path       use `--config-path` to specify the configuration file path
  --ram-role-name     use `--ram-role-name <RamRoleName>` to assign RamRoleName
  --help              print help

Use `lifecycle --help` for more information.


# ライフサイクル設定用XMLファイル
# ここでは"testbucket/"を対象に、最終更新から100日経過したファイルを削除するルールを有効化します
[root@test01 ~]#  cat lifecycle.xml
<?xml version="1.0" encoding="UTF-8"?>
<LifecycleConfiguration>
  <Rule>
    <ID>10</ID>
    <Prefix>testbucket/</Prefix>
    <Status>Enabled</Status>
    <Expiration>
      <Days>100</Days>
    </Expiration>
  </Rule>
</LifecycleConfiguration>


# ライフサイクル設定
[root@test01 ~]# aliyun oss lifecycle --method put oss://testbucket20200601 lifecycle.xml

0.019208(s) elapsed


# 設定後の確認
[root@test01 ~]# aliyun oss lifecycle --method get oss://testbucket20200601
<?xml version="1.0" encoding="UTF-8"?>
  <LifecycleConfiguration>
      <Rule>
          <ID>10</ID>
          <Prefix>testbucket/</Prefix>
          <Status>Enabled</Status>
          <Expiration>
              <Days>100</Days>
          </Expiration>
      </Rule>
  </LifecycleConfiguration>


0.013668(s) elapsed

設定後のWebコンソールからの確認画面は以下の通りです。

image.png

最後にライフサイクルのルールを削除します。

# 設定削除
[root@test01 ~]# aliyun oss lifecycle --method delete oss://testbucket20200601

0.019524(s) elapsed



# 削除後の確認
[root@test01 ~]# aliyun oss lifecycle --method get oss://testbucket20200601
ERROR: oss: service returned error: StatusCode=404, ErrorCode=NoSuchLifecycle, ErrorMessage="No Row found in Lifecycle Table.", RequestId=5EDEE8B07188443332107F7C

※参考リンク:

その他

Cross-region replication

OSSはCross-region replicationにより、あるリージョンのバケットを別リージョンのバケットと同期し、非同期でバケットのオブジェクトデータの複製ができます。これによってリージョン規模の災害に備えたDRの構築ができます。

Cross-region replicationは、Webコンソール、またはJava SDKから操作が可能です。Webコンソールでは、送信先となるリージョンとバケットを指定し、オブジェクトの同期のルールを設定します。
image.png

例えばOperationsではAdd/Change Add/Delete/Changeから選択し、どのオペレーションをリモートのバケットに反映させるかを指定します。Add/Changeを選択した場合、オブジェクトを削除してもレプリケーション先にはその操作が反映されません。

またReplicate Historical Dataを有効にした場合、同期前にすでにソースバケットに保存されているデータも複製します。

image.png

※参考リンク:

versioning

OSSはバケット単位でバージョン管理機能が提供されています。これによって、同一名称のオブジェクトをバケットにアップロードした際に、既存のオブジェクトが上書きされるのでなく、同盟オブジェクトが別バージョンとして保存されるようになります。

なお、本記事の執筆時点では、バージョン管理機能は日本リージョンでは提供されていないため、ここではUS(シリコンバレー)を選択した例を載せています。

バケットを一から作成する場合、Webコンソールから有効にすることができます。

image.png

既存のバケットでは、「Redundancy for Fault Tolerance」から有効にすることができます。

image.png

image.png

Versioningを有効化し、Saveをすることで設定が保存されます。

image.png

※参考リンク:

Retention policy

OSSではオブジェクトの削除や上書きがされないようWrite Once Read Many (WORM)を適用することができます。WORMを適用するにはRetention Policyという機能を利用します。

Retention Policyはオブジェクトを保護する期間を設定し、期間内にはバケット内のオブジェクトの上書き・削除ができなくなります。この機能は、ある特定の期間内は対象のデータを保持し続けなければならない場合に利用され、特に金融、保険、医療、証券などの業界に適した機能であると説明されています。

Retention Policyの設定はWebコンソールから行います。設定はバケット単位でポリシーは一つまで設定可能です。一度ポリシーを設定・有効化すると、そのポリシーを削除することができず、また設定した期間を短縮することもできません。またバージョン管理機能と合わせて利用することはできません。

image.png

image.png

設定は「Retention Period」のみとなります。
image.png

ポリシー作成後、該当のポリシーの「Lock」ボタンからそのポリシーを有効にすることでRetention Policyが適用されます。

image.png

image.png

ポリシーを有効にすると、StatusがLOCKEDに変更されます。

image.png

※参考リンク:

Domain Names

OSSではカスタムドメインをバケットごとに設定することで、ドメイン名でアクセスできるよう設定することができます。最も多く使われる例としては、前述の静的Webサイトホスティングを利用する際にカスタムドメインを指定する場合かと思います。

Domain Namesの指定は、Webコンソールから行います。
image.png

image.png

設定画面では、Custom Domain Namesを指定するほか、Alibaba Cloudアカウントによって管理されるCNAMEレコードを自動的に追加することも可能です。

image.png

※参考リンク:

Back-to-Origin

Back-to-Originを設定することで、OSSのバケット内に目的のオブジェクトが存在しない場合の動作を定義することができます。Back-to-Originでは、参照先とするソースへのリンクを指定することができ、利用するバケット内にオブジェクトが存在しない場合、参照先にそのファイルがないかを確認します。目的のオブジェクトが参照先に存在した場合、ミラーリングによるオブジェクトの複製、あるいはリダイレクトにより、そのオブジェクトを利用することができます。

例えば参照先としてAWS S3のバケットを指定することで、OSSバケット内に該当のオブジェクトがない場合にS3を参照できるようになります。ミラーリングを利用することでS3のオブジェクトをOSSへコピーすることも可能になり、データ移行などに利用することも可能です。

Back-to-OriginはWebコンソールから設定することができます。

image.png

image.png

Mirroringの設定画面は以下の通りです。特定のHTTP Headerのパラメータを指定し、送信の許可・拒否を設定することができます。

image.png

Redirectionの設定画面は以下の通りです。

image.png

※参考リンク:

Image Processing

OSSは画像データを処理するAPIを提供しており、バケットに格納した画像データへアクセスする際に画像を加工して出力することができます。

例えばバケットに事前に画像データを格納しておきます。今回はこちらのフリー素材を利用しました。
image.png

画像データを選択すると、以下の様にその画像をコンソールから確認することができます。

image.png

この画像に対してWebブラウザからアクセスすると、以下のように表示されます(バケットのACLはPublic Readに変更しています)。
image.png

この時、例えば以下のようにURLを指定することで、出力される画像を加工したものを表示することもできます。ここでは内接円のサイズを変更し、画像を円形にくりぬくように加工するよう指定しました。

URL: <オブジェクトURL>?x-oss-process=image/circle,r_500
image.png

上記のような画像に対する加工のルールは、OSSのバケットごとに設定することが可能です。バケットに格納された画像データに対して、どのフォーマットの画像にどのような加工を加えるかを指定することができます。これにより、大量の画像データに対して共通の画像処理を行うことが可能となります。

image.png

Image Processingのルールを作成する際は、画像のクオリティを操作してデータ容量を削減したり(JPG or WebP限定)、輝度やコントラストを指定することも可能です。

image.png

image.png

※参考リンク:

Hotlink Protection

OSSではHTTP Refererをホワイトリストとして設定することができます。これにより、指定のバケットに対するアクセスはホワイトリストで指定されたドメイン名のみが許可され、バケットのACLをPublic Read Public Read/Writeに指定しているバケットに対してアクセス制御を行うことができます。

Hotlink ProtectionはWebコンソールやaliyun oss refererなどから設定することができます。

image.png

設定ではRefererが空のアクセスに対してアクセスを許可するかを指定することができます。

image.png

ここではテスト用URLをホワイトリストに登録し、Refererが空のアクセスは許可しないよう設定しました。

image.png

次にcurlコマンドで上記バケットにアクセスしてみます。

# aliyun oss refererコマンド
[root@test01 ~]# aliyun oss referer --help
Set、get or delete bucket referer configuration

Usage:
  aliyun oss
        ossutil referer --method put oss://bucket referer [options]
    ossutil referer --method get oss://bucket [local_file]
    ossuitl referer --method delete oss://bucket


Flags:
  --mode                  use `--mode {AK|StsToken|RamRoleArn|EcsRamRole|RsaKeyPair|RamRoleArnWithRoleName}` to assign authenticate mode
  --profile,-p            use `--profile <profileName>` to select profile
  --language              use `--language [en|zh]` to assign language
  --region                use `--region <regionId>` to assign region
  --config-path           use `--config-path` to specify the configuration file path
  --access-key-id         use `--access-key-id <AccessKeyId>` to assign AccessKeyId, required in AK/StsToken/RamRoleArn mode
  --access-key-secret     use `--access-key-secret <AccessKeySecret>` to assign AccessKeySecret
  --sts-token             use `--sts-token <StsToken>` to assign StsToken
  --ram-role-name         use `--ram-role-name <RamRoleName>` to assign RamRoleName
  --ram-role-arn          use `--ram-role-arn <RamRoleArn>` to assign RamRoleArn
  --role-session-name     use `--role-session-name <RoleSessionName>` to assign RoleSessionName
  --private-key           use `--private-key <PrivateKey>` to assign RSA PrivateKey
  --key-pair-name         use `--key-pair-name <KeyPairName>` to assign KeyPairName
  --read-timeout          use `--read-timeout <seconds>` to set I/O timeout(seconds)
  --connect-timeout       use `--connect-timeout <seconds>` to set connect timeout(seconds)
  --retry-count           use `--retry-count <count>` to set retry count
  --expired-seconds       use `--expired-seconds <seconds>` to specify expiration time
  --config-file,-c        Path of ossutil configuration file, where to dump config in config command, or to load config in other commands that need credentials.
  --endpoint,-e           Base endpoint for oss endpoint(Notice that the value of the option will cover the value in config file). Take notice that it should be second-level domain(SLD).
  --proxy-host            url of network proxy server, which supports http/https/socks5, such as https://120.79.128.211:3128, socks5://120.79.128.211:1080
  --proxy-user            username of network proxy, default is empty
  --proxy-pwd             password of network proxy, default is empty
  --loglevel              log level,default is empty(no log file output),optional value is:info|debug,info will output information logs,debug will output detail logs(including http request and response logs)
  --disable-empty-referer specifies that the referer field is not allowed to be empty,primarily used in referer command
  --method                specifies the http method,value is PUT、GET、DELETE...
  --mode                  use `--mode {AK|StsToken|RamRoleArn|EcsRamRole|RsaKeyPair|RamRoleArnWithRoleName}` to assign authenticate mode
  --profile,-p            use `--profile <profileName>` to select profile
  --config-path           use `--config-path` to specify the configuration file path
  --ram-role-name         use `--ram-role-name <RamRoleName>` to assign RamRoleName
  --help                  print help

Use `referer --help` for more information.


# Referer設定の確認
[root@test01 ~]# aliyun oss referer --method get oss://testbucket20200601
<?xml version="1.0" encoding="UTF-8"?>
  <RefererConfiguration>
      <AllowEmptyReferer>false</AllowEmptyReferer>
      <RefererList>
          <Referer>https://*test.com</Referer>
      </RefererList>
  </RefererConfiguration>


0.073019(s) elapsed



# Refererを指定しない場合
[root@test01 ~]# curl https://testbucket20200601.oss-ap-northeast-1.aliyuncs.com/
<?xml version="1.0" encoding="UTF-8"?>
<Error>
  <Code>AccessDenied</Code>
  <Message>You are denied by bucket referer policy.</Message>
  <RequestId>5EE041C88612F23934204E62</RequestId>
  <HostId>testbucket20200601.oss-ap-northeast-1.aliyuncs.com</HostId>
  <BucketName>testbucket20200601</BucketName>
</Error>


# Refererを指定した場合
[root@test01 ~]# curl -e https://test.com/ https://testbucket20200601.oss-ap-northeast-1.aliyuncs.com/
<html>
  <head>
      <title>Hello OSS! </title>
      <meta charset="utf-8">
  </head>
  <body>
      <p>Welcome to OSS Static Website Hosting.</p>
      <p>This is the homepage.</p>
  </body>
</html>[root@test01 ~]#

※参考リンク:

モニタリング

Alibaba CloudにはCloudMonitorという監視サービスがあり、Alibaba Cloudの各種サービスのモニタリングを行うことができます。CloudMonitorはOSSにも対応しており、OSSの管理画面からCloudMonitorのページへ遷移することもできます。

image.png

OSSのトップ画面から「Manage」ボタンを選択すると、以下のようにCloudMonitorの画面へと遷移します。

image.png

※参考リンク:

AWS S3との対応

最後に、今回紹介しましたOSSの機能とS3との対応表を載せておきます。Alibaba CloudはAWSを参考にして設計された部分がとても多く、OSSに関してもS3と多くの類似点が存在します。S3を既に利用したことがある場合、OSSがそれぞれどの機能に対応しているかを把握することで、比較的スムーズにOSSを利用することができるかと思います。

OSS 対応するAWSツール S3のリンク
OSS s3 AWS - Amazon S3
aliyun ossコマンド aws s3コマンド AWS - AWS CLI での高レベル (s3) コマンドの使用
OSS SDK AWS SDK AWS - SDKとツール
Transfer Acceleration 同名 AWS - AmazonS3: Amazon S3 Transfer Acceleration
Cross-Origin Resource Sharing 同名 AWS - AmazonS3: Cross-Origin Resource Sharing (CORS)
静的Webサイトホスティング 同名 AWS - AmazonS3: Amazon S3 での静的ウェブサイトのホスティング
ライフサイクル管理 同名 AWS - AmazonS3: オブジェクトのライフサイクル管理
Cross-region replication 同名 AWS - AmazonS3: レプリケーション
versioning 同名 AWS - AmazonS3: バージョニングの使用
Retention policy Object Lock AWS - AmazonS3: S3 オブジェクトロック の概要
Domain Names 同名 AWS - AmazonS3: Route 53 に登録されたカスタムドメインを使用した静的ウェブサイトの設定
Back-to-Origin ※該当する機能不明 AWS - Amazon S3 バケット間で大量のデータを転送する最善の方法は何ですか ?
AWS - Amazon S3 バケット間でオブジェクトをコピーする方法を教えてください。
Image Processing Serverless Image Handler AWS - Serverless Image Handler
Hotlink Protection Bucket Policy AWS - AmazonS3: バケットポリシーの例
モニタリング (CloudMonitor) モニタリング (CloudWatch) AWS - AmazonS3: Monitoring Amazon S3

アリババクラウドは日本に2つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
アリババクラウドジャパン公式ページ

2
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
2
0