アリババクラウドのパートナーの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 ライセンスを申請する必要がある
※参考リンク:
#OSSの利用方法
###ブラウザ
Alibaba CloudのサービスであるOSSは、Alibaba CloudのWebコンソールから利用することが可能です。なお、本記事ではWebコンソール上の言語は英語を指定していますが、日本語の利用も可能です。
バケットを作成する場合は、まず「Create Bucket」を選択します。
バケット作成画面が表示されるので、バケット名やリージョンなどを指定します。Storage Classには以下の3種類が存在します。
-
標準(Standard)
:頻繁なデータへのアクセスをサポート。3種類の中では最もコストが高い。 -
低頻度アクセス(IA、Infrequent Access)
:長期間(1か月以上)保存する必要があり、アクセスは月に1~2回程度のデータ保存に適している。 -
アーカイブ(Archive)
:長期間(半年以上)保存し、めったにアクセスをしないデータに適する。3種類のクラスで最もコストが低い。
※参考リンク:
バケットごとのアクセスできる範囲を指定するAccess Control List(ACL)は、バケット作成後も変更することができます。
なお、選択したリージョンによっては、選択できないサービスも存在します。例えば本記事執筆時点では、中国リージョンを選択した場合、以下のようにZone-Redundant Storage
Versioning
が利用できますが、日本リージョンでは表示されません。また中国リージョンを利用する場合はいくつか注意しなければならない項目もあるため、今回は日本リージョンを選択しました。
作成が完了した場合、バケット画面に遷移します。これでオブジェクトを格納することができます。
「File」を選択し、オブジェクトの一覧を表示するページに遷移します。
Web管理画面からファイルをアップロードする場合、「Upload」を選択すれば、以下のような画面が表示され、ファイル名の指定・ドラッグ&ドロップなどで指定のファイルをアップロードできます。
アップロードが完了した場合、StatusがUploaded
となります。これでファイルのアップロードが完了しました。
アップロードしたオブジェクトは、アップロード完了後もタグ付けやACLの設定を行うことができます。
#aliyunコマンド
Alibaba Cloudではaliyun
CLIを通じて各種リソースの操作を行うことができます。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 | - |
※参考リンク:
-
Alibaba Cloud - SDKリファレンス
今回はGo言語を利用し、テストファイルをアップロードする例を下に載せます。
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)
}
}
今回は以下のような値を指定しました。
-
Endpoint
: http://oss-ap-northeast-1.aliyuncs.com -
Bucket名
: testbucket20200601 -
格納後のObject名
: testfile_20200526.txt -
ローカルファイル名
: testfile.txt
# 実行
[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分程度は時間が必要になります。
「Enable」ボタンを選択すると、以下のようにTransfer Accelerationの説明と注意書きが表示されます。
表示画面下部の「Transfer Acceleration」をクリックし、有効にしたうえで「Save」を選択します。
Transfer Accelerationのエンドポイントが表示され、利用可能になっていることが確認できます。
Transfer Accelerationを有効化することで、Webコンソール画面から以下のようにTransfer Accelerationの設定画面へアクセスすることができます。
設定画面では、Transfer Accelerationを有効化・無効化を変更することができます。
上記のように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アプリケーションから別のオリジンにあるリソースへのアクセス権限を付与する機能です。
※参考リンク:
-
Qiita - なんとなく CORS がわかる...はもう終わりにする。
CORSは以下のようにWebコンソールから設定することができます。
CORSのルールを作成する際は、Source
AllowedMethods
は必須項目となり、ここで許可する送信元とメソッドを指定します。
また、先ほどの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コンソールからも確認できるようになります。
以降は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」にて各ファイル名を入力することで完了します。
「Static Pages」では、デフォルトページとエラーページをhtmlファイル名を指定して設定します。
htmlファイルの設定後、ACLを変更し、OSSバケットへのアクセス権を変更して、Webブラウザからアクセスできるようにします。
ここではPublic Read
を指定することで、外部からのReadアクセスを許可し、Webサイトにアクセスできるようになります。また、アクセス元を制限する機能もOSSは備えており、それについては後述します。
Public Read
選択時に以下のようなメッセージが表示されるので、「Configure」を選択します。
設定後は以下のようにPublic Read
と表示されます。セキュリティの問題となる可能性がある設定のため、文字の色が変化しています。
これでバケットにアクセスすることが可能となりました。WebブラウザからURLを入力すると、以下のようにデフォルトのページが表示されます。
またエラーページも以下のように表示されます。
静的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」へと移動し、ライフサイクルのルールを作成します。
Basic Settings
では、ライフサイクルのルールを適用するオブジェクトを指定します。Clear Policy
では対象のオブジェクトに対する処理を選択し、別のバケットに移動する、あるいは削除を選択することができます。またDelete Parts
は大容量ファイルをアップロードする際に利用するマルチパートアップロードイベントに対するライフサイクルを指定します。
ライフサイクル管理は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コンソールからの確認画面は以下の通りです。
最後にライフサイクルのルールを削除します。
# 設定削除
[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コンソールでは、送信先となるリージョンとバケットを指定し、オブジェクトの同期のルールを設定します。
例えばOperations
ではAdd/Change
Add/Delete/Change
から選択し、どのオペレーションをリモートのバケットに反映させるかを指定します。Add/Change
を選択した場合、オブジェクトを削除してもレプリケーション先にはその操作が反映されません。
またReplicate Historical Data
を有効にした場合、同期前にすでにソースバケットに保存されているデータも複製します。
※参考リンク:
###versioning
OSSはバケット単位でバージョン管理機能が提供されています。これによって、同一名称のオブジェクトをバケットにアップロードした際に、既存のオブジェクトが上書きされるのでなく、同盟オブジェクトが別バージョンとして保存されるようになります。
なお、本記事の執筆時点では、バージョン管理機能は日本リージョンでは提供されていないため、ここではUS(シリコンバレー)を選択した例を載せています。
バケットを一から作成する場合、Webコンソールから有効にすることができます。
既存のバケットでは、「Redundancy for Fault Tolerance」から有効にすることができます。
Versioningを有効化し、Saveをすることで設定が保存されます。
※参考リンク:
###Retention policy
OSSではオブジェクトの削除や上書きがされないようWrite Once Read Many (WORM)を適用することができます。WORMを適用するにはRetention Policyという機能を利用します。
Retention Policyはオブジェクトを保護する期間を設定し、期間内にはバケット内のオブジェクトの上書き・削除ができなくなります。この機能は、ある特定の期間内は対象のデータを保持し続けなければならない場合に利用され、特に金融、保険、医療、証券などの業界に適した機能であると説明されています。
Retention Policyの設定はWebコンソールから行います。設定はバケット単位でポリシーは一つまで設定可能です。一度ポリシーを設定・有効化すると、そのポリシーを削除することができず、また設定した期間を短縮することもできません。またバージョン管理機能と合わせて利用することはできません。
ポリシー作成後、該当のポリシーの「Lock」ボタンからそのポリシーを有効にすることでRetention Policyが適用されます。
ポリシーを有効にすると、StatusがLOCKED
に変更されます。
※参考リンク:
###Domain Names
OSSではカスタムドメインをバケットごとに設定することで、ドメイン名でアクセスできるよう設定することができます。最も多く使われる例としては、前述の静的Webサイトホスティングを利用する際にカスタムドメインを指定する場合かと思います。
Domain Namesの指定は、Webコンソールから行います。
設定画面では、Custom Domain Namesを指定するほか、Alibaba Cloudアカウントによって管理されるCNAMEレコードを自動的に追加することも可能です。
※参考リンク:
###Back-to-Origin
Back-to-Originを設定することで、OSSのバケット内に目的のオブジェクトが存在しない場合の動作を定義することができます。Back-to-Originでは、参照先とするソースへのリンクを指定することができ、利用するバケット内にオブジェクトが存在しない場合、参照先にそのファイルがないかを確認します。目的のオブジェクトが参照先に存在した場合、ミラーリングによるオブジェクトの複製、あるいはリダイレクトにより、そのオブジェクトを利用することができます。
例えば参照先としてAWS S3のバケットを指定することで、OSSバケット内に該当のオブジェクトがない場合にS3を参照できるようになります。ミラーリングを利用することでS3のオブジェクトをOSSへコピーすることも可能になり、データ移行などに利用することも可能です。
Back-to-OriginはWebコンソールから設定することができます。
Mirroring
の設定画面は以下の通りです。特定のHTTP Headerのパラメータを指定し、送信の許可・拒否を設定することができます。
Redirection
の設定画面は以下の通りです。
※参考リンク:
###Image Processing
OSSは画像データを処理するAPIを提供しており、バケットに格納した画像データへアクセスする際に画像を加工して出力することができます。
例えばバケットに事前に画像データを格納しておきます。今回はこちらのフリー素材を利用しました。
画像データを選択すると、以下の様にその画像をコンソールから確認することができます。
この画像に対してWebブラウザからアクセスすると、以下のように表示されます(バケットのACLはPublic Read
に変更しています)。
この時、例えば以下のようにURLを指定することで、出力される画像を加工したものを表示することもできます。ここでは内接円のサイズを変更し、画像を円形にくりぬくように加工するよう指定しました。
URL: <オブジェクトURL>?x-oss-process=image/circle,r_500
上記のような画像に対する加工のルールは、OSSのバケットごとに設定することが可能です。バケットに格納された画像データに対して、どのフォーマットの画像にどのような加工を加えるかを指定することができます。これにより、大量の画像データに対して共通の画像処理を行うことが可能となります。
Image Processingのルールを作成する際は、画像のクオリティを操作してデータ容量を削減したり(JPG or WebP限定)、輝度やコントラストを指定することも可能です。
※参考リンク:
###Hotlink Protection
OSSではHTTP Refererをホワイトリストとして設定することができます。これにより、指定のバケットに対するアクセスはホワイトリストで指定されたドメイン名のみが許可され、バケットのACLをPublic Read
Public Read/Write
に指定しているバケットに対してアクセス制御を行うことができます。
Hotlink ProtectionはWebコンソールやaliyun oss referer
などから設定することができます。
設定ではRefererが空のアクセスに対してアクセスを許可するかを指定することができます。
ここではテスト用URLをホワイトリストに登録し、Refererが空のアクセスは許可しないよう設定しました。
次に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のページへ遷移することもできます。
OSSのトップ画面から「Manage」ボタンを選択すると、以下のようにCloudMonitorの画面へと遷移します。
※参考リンク:
###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ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
アリババクラウドジャパン公式ページ