APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

Alibaba Cloud OSSの紹介② ~OSSの周辺ツールについて~

はじめに

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

本記事ではOSSの周辺ツールについてご紹介したいと思います。前回の記事はこちらになります。

OSSの周辺ツール

OSSはそれ自体に様々な機能がありますが、OSSの周辺にはそれを補強・サポートするようなツールが備わっています。ここからはその周辺ツールについて紹介します。

OSSUtil

OSSUtilはOSSを操作することのできるCLIツールです。立ち位置としては、AWS S3におけるs3cmdのようなものかと思います。基本的な操作方法はaliyun ossと同様で、インストール後にAlibaba Cloudへのアクセス情報を設定することで利用可能となります。

# バイナリダウンロード
[root@test01 ~]# wget http://gosspublic.alicdn.com/ossutil/1.4.2/ossutil64?spm=a21mg.p38356.a3.3.67682cd77p6Qgk
[root@test01 ~]# mv ossutil64?spm=a21mg.p38356.a3.3.67682cd77p6Qgk ossutil64
[root@test01 ~]# chmod 755 ossutil64


# ossutilコマンド
[root@test01 ~]# ./ossutil64 --help
Usage of ossutil64:

Options:
  -c, --config-file=        Path of ossutil configuration file, where to dump config in config command, or to load config in other commands that need credentials.
  -i, --access-key-id=      AccessKeyID while access oss(Notice that the value of the option will cover the value in config file).
  -b, --bucket              the option used to make sure the operation will operate on bucket
  --checkpoint-dir=         Path of checkpoint directory(default:.ossutil_checkpoint), the directory is used in resume upload or download, when operate failed, ossutil will create the directory automatically, and record the checkpoint information in the directory, when the operation is succeed, the directory will be removed, so when specify the option, please make sure the directory can be removed.
  --exclude=                Exclude Pattern of key, e.g., *.txt
  --timeout=                time out of signurl, the unit is: s, default value is 60, the value range is: 0-9223372036854775807
  --acl=                    acl information.
  -a, --all-type            Indicate that the subject of the command contains both objects and uncompleted Multipart Uploads.
  --delete                  delete
  --parallel=               amount of concurrency tasks when work with a file, value range is: 1-10000, by default the value will be decided by ossutil intelligently.
  -s, --short-format        Show by short format, if the option is not specified, show long format by default.
  --part-size=              Part size, the unit is: Byte, in default situation, ossutil will calculate the suitable part size according to file size. The option is useful when user has special needs or user need to performance tuning, the value range is: 1-9223372036854775807(Byte)
  -d, --directory           Return matching subdirectory names instead of contents of the subdirectory.
  --storage-class=          set the storage class of bucket(default: Standard), value range is: Standard/IA/Archive.
  --output-dir=             The option specify the directory to place output file in, output file contains: report file generated by cp command when error happens of batch copy operation(for more information about report file, see help of cp command). The default value of the option is: ossutil_output directory in current directory.
  -k, --access-key-secret=  AccessKeySecret while access oss(Notice that the value of the option will cover the value in config file).
  --disable-crc64           Disable crc64, in default situation, ossutil open crc64 check when transmit data.
  --retry-times=            retry times when fail(default: 10), value range is: 1-500
  --payer=                  The payer of the request. You can set this value to "requester" if you want pay for requester
  -m, --multipart           Indicate that the subject of the command are uncompleted Multipart Uploads, instead of objects(which is the subject in default situation.
  -u, --update              update
  -j, --jobs=               amount of concurrency tasks between multi-files(default: 3), value range is: 1-10000
  --include=                Include Pattern of key, e.g., *.jpg
  -L, --language=           set the language of ossutil(default: EN), value range is: CH/EN, if you set it to "CH", please make sure your system language is UTF-8.
  --snapshot-path=          This option is used to accelerate the incremental upload of batch files in certain scenarios(currently, download and copy do not support this option). If you use the option when batch copy files, ossutil will generate files to record the snapshot information in the specified directory. When the next time you upload files with the option, ossutil will read the snapshot information under the specified directory for incremental upload. The snapshot-path you specified must be a local file system directory can be written in, if the directory does not exist, ossutil creates the files for recording snapshot information, else ossutil will read snapshot information from the path for incremental upload(ossutil will only upload the files which has not been successfully upload to oss and the files has been locally modified), and update the snapshot information to the directory. Note: The option record the lastModifiedTime of local files which has been successfully upload in local file system, and compare the lastModifiedTime of local files in the next cp to decided whether to skip the upload of the files, so if you use the option to achieve incremental upload, please make sure no other user modified the corresponding object in oss during the two uploads. If you can not guarantee the scenarios, please use --update option to achieve incremental upload. In addition, ossutil does not automatically delete snapshot-path snapshot information, in order to avoid too much snapshot information, when the snapshot information is useless, please clean up your own snapshot-path on your own.
  --range=                  the range when download objects, the form is like: 3-9 or 3- or -9
  -e, --endpoint=           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).
  -t, --sts-token=          STSToken while access oss(Notice that the value of the option will cover the value in config file), not necessary.
  --upload-id-marker=       the marker of object when list object or Multipart Uploads.
  -r, --recursive           operate recursively, for those commands which support the option, when use them, if the option is specified, the command will operate on all match objects under the bucket, else we will search the specified object and operate on the single object.
  -f, --force               operate silently without asking user to confirm the operation.
  --bigfile-threshold=      the threshold of file size, the file size larger than the threshold will use resume upload or download(default: 104857600), value range is: 0-9223372036854775807
  --encoding-type=          the encoding type of object name or file name that user inputs, currently ossutil only supports url encode, which means the value range of the option is: url, if you do not specify the option, it means the object name or file name that user inputed was not encoded. bucket name does not support url encode. Note, if the option is specified, the cloud_url like: oss://bucket/object should be inputted as: oss://bucket/url_encode(object), the string: oss://bucket/ should not be url encoded.
  --meta=                   Set object meta as [header:value#header:value...], e.g., Cache-Control:no-cache#Content-Encoding:gzip
  -v, --version             Show ossutil version (1.4.2) and exit.
  --limited-num=            the limited number of return results.
  --marker=                 the marker of bucket when list buckets, or the marker of key when list object or Multipart Uploads.
  --type=                   hash type, Default: crc64, value range is: crc64/md5
  -h, --help                Show usage message
  --version                 Show version


#アクセス情報などの設定
[root@test01 ~]# ./ossutil64 config
The command creates a configuration file and stores credentials.

Please enter the config file path(default /root/.ossutilconfig, carriage return will use the default path. If you specified this option to other path, you should specify --config-file option to the path when you use other commands):
No config file entered, will use the default config file /root/.ossutilconfig    # 特に指定せずEnterキーを実行

For the following settings, carriage return means skip the configuration. Please try "help config" to see the meaning of the settings
Please enter language(CH/EN, default is:EN, the configuration will go into effect after the command successfully executed):
# 上記選択時、特に指定せずEnterキーを実行
Please enter endpoint:http://oss-ap-northeast-1-internal.aliyuncs.com    # OSSエンドポイントを入力(今回はECSからOSSにアクセスする際に利用するinternalエンドポイントを選択)
Please enter accessKeyID:<AccessKeyId>    # AccessKeyId情報を入力
Please enter accessKeySecret:<AccessKeySecret>    # AccessKeySecret情報を入力
Please enter stsToken:    # 特に指定せずEnterキーを実行


# ossutil config実行後、config.jsonファイルに設定内容が保存される
[root@test01 ~]# cat .ossutilconfig
[Credentials]
language=EN
endpoint=http://oss-ap-northeast-1-internal.aliyuncs.com
accessKeyID=<AccessKeyId>
accessKeySecret=<AccessKeySecret>


# OSSにアクセス
[root@test01 ~]# ./ossutil64 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.355226(s) elapsed

[root@test01 ~]#


[root@test01 ~]# ./ossutil64 ls oss://testbucket20200601
LastModifiedTime                   Size(B)  StorageClass   ETAG                                  ObjectName
2020-06-02 13:22:06 +0800 CST          193      Standard   2B7B291A99D2F824FAAC39965BDC6323      oss://testbucket20200601/error.html
2020-06-02 13:22:06 +0800 CST          210      Standard   6C63AC2FD94715D4E4E5E64813E5321C      oss://testbucket20200601/index.html
Object Number is: 2
0.011283(s) elapsed


# ファイルのアップロード
[root@test01 ~]# ./ossutil64 cp testfile_ecs_local_20200528 oss://testbucket20200601
Succeed: Total num: 1, size: 1,073,741,824. OK num: 1(upload 1 files).
15.687180(s) elapsed



# 確認
[root@test01 ~]# ./ossutil64 ls oss://testbucket20200601
LastModifiedTime                   Size(B)  StorageClass   ETAG                                  ObjectName
2020-06-02 13:22:06 +0800 CST          193      Standard   2B7B291A99D2F824FAAC39965BDC6323      oss://testbucket20200601/error.html
2020-06-02 13:22:06 +0800 CST          210      Standard   6C63AC2FD94715D4E4E5E64813E5321C      oss://testbucket20200601/index.html
2020-06-11 12:27:41 +0800 CST   1073741824      Standard   679D3C338EF35FADDBA432CA3E2717C3-400  oss://testbucket20200601/testfile_ecs_local_20200528
Object Number is: 3
0.012515(s) elapsed

※参考リンク:

Alibaba Cloud - Ossutil クイックスタート

GitHub - aliyun/ossutil

OSS Browser

OSS Browserはブラウザベースのアプリケーションを起動し、OSSバケットへのアクセスやファイルのアップロード・ダウンロードなどの操作を行うツールです。Windows/Linux/Macで利用可能で、日本語にも対応しています。以下に実際の画面のキャプチャを添付していますが、とてもシンプルで使いやすいUIだと思います。

こちらのページから対象のバージョンのOSS Browserをダウンロードし、解凍ファイルの中にあるoss-browser.exeを起動します。

f:id:FY0323:20200616101218p:plain

起動後、エンドポイント、アクセス情報を入力し、ログインします。エンドポイントは特に指定がなければ入力せず「デフォルト」で問題ありません。

f:id:FY0323:20200616101239p:plain

ログイン後、バケットの一覧が確認できるので、対象のバケットを選択すると、オブジェクトの内容が確認できます。

f:id:FY0323:20200616101722p:plain f:id:FY0323:20200616101732p:plain

また、各オブジェクトのアドレスを生成すると、オブジェクトへのアクセス用アドレスに加え、QRコードも生成されます。このQRコードを読み取ることで、オブジェクトにアクセスすることもできます(QRコードを読み取って得られるURLにはAccessKeyId/AccessKeySecret情報が含まれているので、扱いには注意してください)。

f:id:FY0323:20200616101816p:plain f:id:FY0323:20200618131854p:plain

また設定画面からは、転送設定やメール送信設定なども行うことができます。

f:id:FY0323:20200616101851p:plain

※参考リンク:

Alibaba Cloud - OSS Browser クイックスタート

OSSImport

OSSImportは、オンプレやほかのクラウドストレージからOSSへデータを移行する際に利用するデータ移行ツールです。移行するデータ量に応じて、スタンドアロンモード・分散モードの2つから、移行方法を選択することができます。

OSSImportはJava製のツールです。こちらのページからzipファイル、またはGitHub上のファイルを取得し、データの移行元・移行先の情報などをコンフィグファイルに設定・起動することで動作します。

ここではAzure Blobに保存したデータを、スタンドアロンモードでOSSに移行する例を紹介します。

# Javaがインストールされていることを確認
[root@test01 conf]# java -version
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)


# OSSImportの取得
[root@test01 ~]# wget http://gosspublic.alicdn.com/ossimport/international/standalone/ossimport-2.3.3.zip?spm=a21mg.p38356.a3.2.241722f3123572&file=ossimport-2.3.3.zip
[root@test01 ~]# unzip ossimport-2.3.3.zip\?spm\=a21mg.p38356.a3.2.241722f3123572
Archive:  ossimport-2.3.3.zip?spm=a21mg.p38356.a3.2.241722f3123572
   creating: ossimport-2.3.3/
  inflating: ossimport-2.3.3/.DS_Store
   creating: __MACOSX/
   creating: __MACOSX/ossimport-2.3.3/
  inflating: __MACOSX/ossimport-2.3.3/._.DS_Store
  inflating: ossimport-2.3.3/console.bat
   creating: ossimport-2.3.3/bin/
  inflating: ossimport-2.3.3/bin/.DS_Store
   creating: __MACOSX/ossimport-2.3.3/bin/
  inflating: __MACOSX/ossimport-2.3.3/bin/._.DS_Store
  inflating: ossimport-2.3.3/bin/ossimport2.jar
  inflating: __MACOSX/ossimport-2.3.3/bin/._ossimport2.jar
  inflating: ossimport-2.3.3/README.md
  inflating: ossimport-2.3.3/console.sh
   creating: ossimport-2.3.3/logs/
  inflating: ossimport-2.3.3/import.sh
  inflating: ossimport-2.3.3/import.bat
   creating: ossimport-2.3.3/conf/
  inflating: ossimport-2.3.3/conf/sys.properties
  inflating: ossimport-2.3.3/conf/local_job.cfg


# 内容の確認
[root@test01 ~]# cd ossimport-2.3.3
[root@test01 ossimport-2.3.3]# ll
total 36
-rw-r--r-- 1 root root 6661 Apr 13  2018 README.md
drwxr-xr-x 2 root root 4096 Nov 27  2018 bin
drwxr-xr-x 2 root root 4096 Apr 13  2018 conf
-rw-r--r-- 1 root root 1363 Apr 13  2018 console.bat
-rw-r--r-- 1 root root 3611 Apr 13  2018 console.sh
-rw-r--r-- 1 root root 1740 Apr 13  2018 import.bat
-rw-r--r-- 1 root root 3998 Apr 13  2018 import.sh
drwxr-xr-x 2 root root 4096 Apr 13  2018 logs

[root@test01 ossimport-2.3.3]# cd conf
[root@test01 conf]# ll
total 16
-rw-r--r-- 1 root root 8931 Apr 13  2018 local_job.cfg
-rw-r--r-- 1 root root 1790 Apr 13  2018 sys.properties



# 設定ファイルの修正
[root@test01 conf]# cp -p local_job.cfg local_job.cfg.bk
[root@test01 conf]# vi local_job.cfg

local_job.cfgの内容は以下の通りです。

local_job.cfg

# Flag of enabling incremental mode.
# If true, It scans all the incremental data and upload them to OSS. The suggested value is no less than 1 hour and the minimal value is 900s as too small interval
# leads to unnecessary overhead.
isIncremental=false
incrementalModeInterval=86400

##############################################################Data Source settings##############################################################
# Data source types, it supports the followings.
#1.local(Local file, only srcPrefix is required. srcAccessKey, srcScretKey, srcDomain and srcBucket are not necessary.)
#2.oss (from one oss bucket to another)
#3.qiniu
#4.bos(baidu cloud storage)
#5.ks3(Kingsoft cloud)
#6.s3(Amazon s3)
#7.youpai(Note:it does not support checkpoint when listing files. And thus if a list file process is killed during execution, all files will be listed again)
#8.http (The data source is provided via http hyper links. srcAccessKey,srcSecretKey,srcDomain,srcBucket,srcPrefix are not requried.)
#9.cos(Tecent cloud storage)
#10.azure(Microsoft Azure blob)
srcType=azure # Azureを指定

#Data source access key. Local and http do not require it. All cloud platforms above need access key except youpai. For youpai, use user name as srcAccessKey.
srcAccessKey=<Key> # Azure BlobのKey情報を指定

#Data source secrect key,Local and http do not require it. All cloud platforms above need access secret except youpai. For youpai, use user password as srcSecretKey.
srcSecretKey=<Connection String> # Azure BlobのConnection Stringを指定

#Source endpoint domain. Local and http do not require it. Here're the endpoints helps.
#1.oss: Gets the external or internal domain name from the web console (the secondary domain, without the bucket name, such as oss-cn-hangzhou-internal.aliyuncs.com. Please check out https://help.aliyun.com/document_detail/31834.html for more information).
#       If using ESC VM for data migration, use internal domain as there's no network bandwidth limit and no traffic cost.
#2.qiniu: Gets the bucket's domain name from qiniu's web console.
#3.bos: http://bj.bcebos.com or http://gz.bcebos.com
#4.ks3: http://kss.ksyun.com or http://ks3-cn-beijing.ksyun.com or http://ks3-us-west-1.ksyun.com
#5.s3:  Please check out http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region for each region's endpoint.
#6.youpai: http://v0.api.upyun.com (automatic switch) or http://v1.api.upyun.com  (China Telecom) or http://v2.api.upyun.com (China Unicom) or http://v3.api.upyun.com (China Mobile)
#7.cos: Not needed in cos v3;In cos v4 or above, the location of the bucket is required. Such as gz for South China and tj for North China, sh for East China.
#8.Azure blob: It's the endpoint suffix in connection string, such as core.chinacloudapi.cn
srcDomain=core.windows.net # Azure Blobのエンドポイントを指定

#Source bucket name. Not needed for local or http. No need to append "/". For Azure blob, it's the container name.
srcBucket=<Container Name> # Azure Blobのコンテナ名を指定

#Source object prefix, default is empty. If the source type is local, then the srcPrefix is the prefix of the full path ending with '/', such as "C:/example/". If it's other type, then the srcPrefix is the object name's prefix.
srcPrefix=

##############################################################Destination settings################################################################
#Destination access key
destAccessKey=<AccessKeyID> # Alibaba CloudのAccessKeyID情報

#Destination secret key
destSecretKey=<AccessKeySecret> # Alibaba CloudのAccessKeySecret情報

#Destination endpoint domain. Use the actual oss region's domain. By default it's the hangzhou datacenter (http://oss-cn-hangzhou-internal.aliyuncs.com). If ECS VM is used, please use internal domain for better performance and lower cost.
#Note:domain name does not include the bucket prefix. Please check out https://help.aliyun.com/document_detail/31837.html for more information.
destDomain=http://oss-accelerate.aliyuncs.com # Alibaba Cloud OSSのエンドポイントを指定。ここではTransfer Accelerationによって提供されたエンドポイントを指定している

#Destination bucket,No need to end with "/"
destBucket=<Bucket Name> # OSSバケット名を指定

# 以降は全てデフォルト値

#Destination objects prefix, by default is empty, which means the object will be in bucket directly without folders. Otherwise to put the files under a specific folder, use that folder path (ends with "/") as the prefix.
#For example, for a local file with path of srcPrefix/relativePath, the destnation  file will be destDomain/destbucket/destPrefix + relativePath.
#For file in other cloud storage with path srcDomain/srcBucket/srcPrefix + relativePath, the destination file in OSS will be destMain/destBucket/DestPrefix + relativePath.
destPrefix=

##############################################################srcType=cos specific config###########################################################
#cos's appid, not applicable to other types.
appId=0

##############################################################srcType=http specific config########################################################
#When srcType="http",it requries the full url of the http hyperlinks file. Each line in this file has two columns, one is the prefix of source file and the other is the relative path in the destination.
#For example, for a http link: 127.0.0.1/aa/bb.jpg, different split ways will lead to different destination paths in OSS:
#Option #1 127.0.0.1/aa/              bb.jpg
#Option #2 127.0.0.1/                 aa/bb.jpg
#The option #1's oss desitnation path will be destDomain/destBucket/destPrefix + "bb.jpg"---"aa" will not appear in the destination path.
#The option #2's oss desination path will be "destDomain/destBucket/destPrefix" + "aa/bb.jpg"---"aa" will be the subfolder.
httpListFilePath=c:/example/http.list
httpPrefixColumn=1
relativePathColumn=2

##############################################################Task configurations,optional#################################################
#Job name, it's unique for each job. Do not change it in single machine mode.
jobName=local_test

#Job type---either import or audit. Import is to sync the data to oss and check the consistency afterwards. While audit is just to check if the source data is same as the oss destination data.
jobType=import

#Last modified timestamp filter. Only import files whose last modified is less than this value. By default it's 0 means no filter on timestamp.
#The value is the unix time (or epoch time) in seconds.
importSince=0

#When jobType is import, if the files whose last modified time is greater than this value, skip the consistency check on that file. By default it's 0, which means all files need the check.
#Not applicable to audit jobType.
lastModify=0

#When doing data migration, whether to skip existing files or not. If it is set to true, it will skip the existing files based on size and LastModifiedTime field. If it is set to false, it will ovewrite the existing files.
#Not applicable to audit jobType.
isSkipExistFile=false

#Max object count per task. Typically it's the total_file_counts/(total_worker_count * workerTaskThreadNum). If not sure about total file counts, use the default value.
taskObjectCountLimit=10000

#Max file size (in bytes) limits per task. Default size is 1G.
taskObjectSizeLimit=1000000000

#Warning:Do not change it in most cases.
#The thread count for scaning files. It only impacts the file scan's efficency.
scanThreadCount=1

#Warning: Do not change it in most cases.Otherwise too big number would consume too much resource and lead to job failure.
#The max depth of source bucket to scan in parallel. By default it's 1 which means only concurrently scan top folders.
maxMultiThreadScanDepth=1

#The file larger than this value uses multipart upload; otherwise, use simple upload. Set this value greater than 1 MB. Examples of valid values are 50m, 1024m, and 5g.
multipartUploadThreshold=150m

#The part size of multipart upload. This value must be greater than 100 KB. The default value is 50 MB. Examples of valid values are 500k, 50m, and 2g.
multipartUploadPartSize=50m

#Thread number in multipart upload of a large file. By default, the large file is greater than 150 MB, the part size is 50 MB. This setting is valid only when srcType is local.
#When uploadThreadNumPerLargeFile is greater than 1, workerRecordMd5 is invalid.
uploadThreadNumPerLargeFile=3

#Whether to encrypt data in OSS. The default value is not to encrypt.
isServerSideEncryption=false

#Whether to upload the linked file in local mode. The default value is not to upload. This setting only supports linked files, not including linked directory.
isAllowSymbolicLink=false

#The mode in which Qiniu cloud storage gets Meta. The valid values are head and stat. The default value is stat. In head mode, Meta is got through HTTP HEAD; in stat mode, Meta is got through BucketManager.stat.
getObjectMetaMode=stat

#Whether to audit data after migration. The default value is to audit.
isAuditAfterImport=true

#The data audit mode. Valid values are simple, general, and detailed. The default value is general. In simple mode, only the file size is audited. In general mode, the file size, lastModify, and header are audited. In detailed mode (under development), the file CRC or MD5 is audited.
auditMode=general

設定ファイルの準備ができたのでimport.shを起動し、データ移行を開始します。statオプションを追加することで、データの移行状況を定期的に出力します。

# データ移行開始
[root@test01 ossimport-2.3.3]# bash import.sh stat
submit job:/root/ossimport-2.3.3/conf/local_job.cfg
submit job:local_test success!
Start import service completed.
-------------- job stats ---------------
---------------- job stat ------------------
JobName:local_test
JobState:Running
PendingTasks:1
DispatchedTasks:0
RunningTasks:0
SucceedTasks:0
FailedTasks:0
ScanFinished:true
RunningTasks Progress:
----------------------------------------
-------------- job stats ---------------

(中略)

# DispatchedTasksが更新される

---------------- job stat ------------------
JobName:local_test
JobState:Running
PendingTasks:0
DispatchedTasks:1
RunningTasks:0
SucceedTasks:0
FailedTasks:0
ScanFinished:true
RunningTasks Progress:
----------------------------------------
-------------- job stats ---------------

(中略)

# RunningTasksが更新される

---------------- job stat ------------------
JobName:local_test
JobState:Running
PendingTasks:0
DispatchedTasks:1
RunningTasks:1
SucceedTasks:0
FailedTasks:0
ScanFinished:true
RunningTasks Progress:
B4FD7975A4850C1F411043F615B2BC83_1590559413429:1073741824/1073741824 1/1
----------------------------------------
-------------- job stats ---------------

(中略)

# SucceedTasksが更新される

---------------- job stat ------------------
JobName:local_test
JobState:Succeed
PendingTasks:0
DispatchedTasks:0
RunningTasks:0
SucceedTasks:1
FailedTasks:0
ScanFinished:true
RunningTasks Progress:
----------------------------------------
Import to oss completed.
Stop import service, Yes or No: Yes
import.sh: line 48:  1257 Killed                  nohup java ${java_heap_max} ${import_opts} -jar ${import_jar} -c ${import_sys_conf} start > ${work_dir}/logs/ossimport2.log 2>&1
Stop import service completed.
[root@test01 ossimport-2.3.3]#

※参考リンク:

Alibaba Cloud - OSSImport: アーキテクチャと構成

GitHub - aliyun/ossimport

GitHub - aliyun/ossimport: job.cfg (Azure Blobの例)

OSSFS

OSSFSは、OSSのバケットをLinux/Macのローカルファイルにマウントすることを実現するCLIツールです。OSSFSはS3FSをベースに開発されており、利用用途としてはECSなどのインスタンス間でOSSに格納されたファイルを共有したい場合などが当てはまります。

# OSSFSインストール
[root@test01 ~]# wget http://gosspublic.alicdn.com/ossfs/ossfs_1.80.5_centos7.0_x86_64.rpm?spm=a21mg.p38356.a3.4.2b92e8de2pNYw2&file=ossfs_1.80.5_centos7.0_x86_64.rpm
[root@test01 ~]# mv ossfs_1.80.5_centos7.0_x86_64.rpm?spm=a21mg.p38356.a3.4.2b92e8de2pNYw2 ossfs_1.80.5_centos7.0_x86_64.rpm
[root@test01 ~]# yum localinstall ossfs_1.80.5_centos7.0_x86_64.rpm


# ossfsコマンド
[root@test01 ~]# ossfs --help
Usage: ossfs BUCKET:[PATH] MOUNTPOINT [OPTION]...

Mount an Aliyun OSS bucket as a file system.

   General forms for ossfs and FUSE/mount options:
      -o opt[,opt...]
      -o opt [-o opt] ...

ossfs Options:

   Most ossfs options are given in the form where "opt" is:

             <option_name>=<option_value>

   default_acl (default="private")
     - the default canned acl to apply to all written oss objects
          see https://help.aliyun.com/document_detail/oss/api-reference/access-control/bucket-acl.html
          for the full list of canned acls

   retries (default="2")
      - number of times to retry a failed oss transaction

   use_cache (default="" which means disabled)
      - local folder to use for local file cache

   del_cache (delete local file cache)
      - delete local file cache when ossfs starts and exits.

   storage_class (default="standard")
      - store object with specified storage class.  Possible values:
        standard, standard_ia, and reduced_redundancy.

   use_sse (default is disable)
      - Specify two type Aliyuns Server-Site Encryption: SSE-S3,
        SSE-C. SSE-S3 uses Aliyun OSS-managed encryption
        keys, SSE-C uses customer-provided encryption keys.
        You can specify "use_sse" or "use_sse=1" enables SSE-S3
        type(use_sse=1 is old type parameter).
        Case of setting SSE-C, you can specify "use_sse=custom",
        "use_sse=custom:<custom key file path>" or
        "use_sse=<custom key file path>"(only <custom key file path>
        specified is old type parameter). You can use "c" for
        short "custom".
        The custom key file must be 600 permission. The file can
        have some lines, each line is one SSE-C key. The first line
        in file is used as Customer-Provided Encryption Keys for
        uploading and changing headers etc. If there are some keys
        after first line, those are used downloading object which
        are encrypted by not first key. So that, you can keep all
        SSE-C keys in file, that is SSE-C key history.
        If you specify "custom"("c") without file path, you
        need to set custom key by load_sse_c option or OSSSSECKEYS
        environment.(OSSSSECKEYS environment has some SSE-C keys
        with ":" separator.) This option is used to decide the
        SSE type. So that if you do not want to encrypt a object
        object at uploading, but you need to decrypt encrypted
        object at downloaing, you can use load_sse_c option instead
        of this option.
        For setting SSE-KMS, specify "use_sse=kmsid" or
        "use_sse=kmsid:<kms id>". You can use "k" for short "kmsid".
        If you san specify SSE-KMS type with your <kms id> in OSS
        KMS, you can set it after "kmsid:"(or "k:"). If you
        specify only "kmsid"("k"), you need to set OSSSSEKMSID
        environment which value is <kms id>. You must be careful
        about that you can not use the KMS id which is not same EC2
        region.

   load_sse_c - specify SSE-C keys
        Specify the custom-provided encription keys file path for decrypting
        at duwnloading.
        If you use the custom-provided encription key at uploading, you
        specify with "use_sse=custom". The file has many lines, one line
        means one custom key. So that you can keep all SSE-C keys in file,
        that is SSE-C key history. OSSSSECKEYS environment is as same as this
        file contents.

   public_bucket (default="" which means disabled)
      - anonymously mount a public bucket when set to 1

   passwd_file (default="")
      - specify which ossfs password file to use

   ahbe_conf (default="" which means disabled)
      - This option specifies the configuration file path which
      file is the additional HTTP header by file(object) extension.
      The configuration file format is below:
      -----------
      line         = [file suffix] HTTP-header [HTTP-values]
      file suffix  = file(object) suffix, if this field is empty,
                     it means "*"(all object).
      HTTP-header  = additional HTTP header name
      HTTP-values  = additional HTTP header value
      -----------
      Sample:
      -----------
      .gz      Content-Encoding     gzip
      .Z       Content-Encoding     compress
               X-OSSFS-MYHTTPHEAD    myvalue
      -----------
      A sample configuration file is uploaded in "test" directory.
      If you specify this option for set "Content-Encoding" HTTP
      header, please take care for RFC 2616.

   connect_timeout (default="300" seconds)
      - time to wait for connection before giving up

   readwrite_timeout (default="60" seconds)
      - time to wait between read/write activity before giving up

   max_stat_cache_size (default="1000" entries (about 4MB))
      - maximum number of entries in the stat cache

   stat_cache_expire (default is no expire)
      - specify expire time(seconds) for entries in the stat cache.

   enable_noobj_cache (default is disable)
      - enable cache entries for the object which does not exist.
      ossfs always has to check whether file(or sub directory) exists
      under object(path) when ossfs does some command, since ossfs has
      recognized a directory which does not exist and has files or
      sub directories under itself. It increases ListBucket request
      and makes performance bad.
      You can specify this option for performance, ossfs memorizes
      in stat cache that the object(file or directory) does not exist.

   no_check_certificate
      - server certificate wont be checked against the available
      certificate authorities.

   nodnscache (disable dns cache)
      - ossfs is always using dns cache, this option make dns cache disable.

   nosscache (disable ssl session cache)
      - ossfs is always using ssl session cache, this option make ssl
      session cache disable.

   multireq_max (default="20")
      - maximum number of parallel request for listing objects.

   parallel_count (default="5")
      - number of parallel request for uploading big objects.
      ossfs uploads large object(over 20MB) by multipart post request,
      and sends parallel requests.
      This option limits parallel request count which ossfs requests
      at once. It is necessary to set this value depending on a CPU
      and a network band.

   multipart_size (default="10")
      - part size, in MB, for each multipart request.

   ensure_diskfree (default same multipart_size value)
      - sets MB to ensure disk free space. ossfs makes file for
        downloading, uploading and caching files. If the disk free
        space is smaller than this value, ossfs do not use diskspace
        as possible in exchange for the performance.

   singlepart_copy_limit (default="5120")
      - maximum size, in MB, of a single-part copy before trying
      multipart copy.

   url (default="")
      - sets the url to use to access aliyun oss

   default_permission (default=777)
      - when the file do not have permission meta, ossfs will use this
      defalut value.

   endpoint (default="")
      - sets the endpoint to use on signature version 4
      If the ossfs could not connect to the region specified
      by this option, ossfs could not run. But if you do not specify this
      option, and if you can not connect with the default region, ossfs
      will retry to automatically connect to the other region. So ossfs
      can know the correct region name, because ossfs can find it in an
      error from the OSS server.

   mp_umask (default is "0000")
      - sets umask for the mount point directory.
      If allow_other option is not set, ossfs allows access to the mount
      point only to the owner. In the opposite case ossfs allows access
      to all users as the default. But if you set the allow_other with
      this option, you can control the permissions of the
      mount point by this option like umask.

   nomultipart (disable multipart uploads)

   noxattr (disable xattr)

   enable_content_md5 (default is disable)
      - ensure data integrity during writes with MD5 hash.

   ram_role (default is no role)
      - set the RAM Role that will supply the credentials from the
      instance meta-data.

   noxmlns (disable registering xml name space)
        disable registering xml name space for response of
        ListBucketResult and ListVersionsResult etc.
        This option should not be specified now, because ossfs looks up
        xmlns automatically after v1.66.

   nocopyapi (for other incomplete compatibility object storage)
        For a distributed object storage which is compatibility OSS
        API without PUT(copy api).
        If you set this option, ossfs do not use PUT with
        "x-oss-copy-source"(copy api). Because traffic is increased
        2-3 times by this option, we do not recommend this.

   norenameapi (for other incomplete compatibility object storage)
        For a distributed object storage which is compatibility OSS
        API without PUT(copy api).
        This option is a subset of nocopyapi option. The nocopyapi
        option does not use copy-api for all command(ex. chmod, chown,
        touch, mv, etc), but this option does not use copy-api for
        only rename command(ex. mv). If this option is specified with
        nocopyapi, then ossfs ignores it.

   use_path_request_style (use legacy API calling style)
        Enble compatibility with OSS-like APIs which do not support
        the virtual-host request style, by using the older path request
        style.

   dbglevel (default="crit")
        Set the debug message level. set value as crit(critical), err
        (error), warn(warning), info(information) to debug level.
        default debug level is critical. If ossfs run with "-d" option,
        the debug level is set information. When ossfs catch the signal
        SIGUSR2, the debug level is bumpup.

   curldbg - put curl debug message
        Put the debug message from libcurl when this option is specified.

FUSE/mount Options:

   Most of the generic mount options described in 'man mount' are
   supported (ro, rw, suid, nosuid, dev, nodev, exec, noexec, atime,
   noatime, sync async, dirsync).  Filesystems are mounted with
   '-onodev,nosuid' by default, which can only be overridden by a
   privileged user.

   There are many FUSE specific mount options that can be specified.
   e.g. allow_other  See the FUSEs README for the full set.

Miscellaneous Options:

 -h, --help        Output this help.
     --version     Output version info.
 -d  --debug       Turn on DEBUG messages to syslog. Specifying -d
                   twice turns on FUSE debug messages to STDOUT.
 -f                FUSE foreground option - do not run as daemon.
 -s                FUSE singlethread option
                   disable multi-threaded operation


ossfs home page: <https://github.com/aliyun/ossfs>



# アクセス情報を設定
# /etc/passwd-ossfsというファイルを作成し、<Bucket名>:<AccessKeyId>:<AccessKeySecret>という形式でアクセス情報を指定する
[root@test01 ~]# touch /etc/passwd-ossfs
[root@test01 ~]# vi /etc/passwd-ossfs
[root@test01 ~]# cat /etc/passwd-ossfs
testbucket20200601:<AccessKeyId>:<AccessKeySecret>


# OSSのマウント
[root@test01 ~]# mkdir /mnt/ossfs
[root@test01 ~]# ossfs testbucket20200601 /mnt/ossfs -ourl=http://oss-ap-northeast-1-internal.aliyuncs.com


# マウント後の確認
[root@test01 ~]#  df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G  480K  1.9G   1% /run
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/vda1        40G  3.8G   34G  10% /
tmpfs           379M     0  379M   0% /run/user/0
ossfs           256T     0  256T   0% /mnt/ossfs

[root@test01 ~]# dd if=/dev/zero of=/mnt/ossfs/testfile_1G.txt bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 67.4375 s, 15.9 MB/s


# マウントの解除
[root@test01 ~]# fusermount -u /mnt/ossfs
[root@test01 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G  464K  1.9G   1% /run
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/vda1        40G  2.7G   35G   8% /
tmpfs           379M     0  379M   0% /run/user/0

※参考リンク:

Alibaba Cloud - OSSFS: クイックインストール

GitHub - aliyun/ossfs

OSSFTP

OSSFTPは、FTPによるファイル・フォルダへの操作をOSSにマッピングするFTPサーバーを提供するツールです。OSSFTPはWindows/Linux/Macで利用することができ、OSSFTPを起動後にFileZillaなどのFTPクライアントツールを利用してFTPサーバに接続することが推奨されています。OSSFTPは個人ユーザー向けに提供されているツールのため、本番環境ではOSS SDKなどを利用することが推奨されています。

OSSFTPはこちらのページから圧縮ファイルをダウンロードし、解凍したフォルダからstart.vbsを実行します。実行するとWebブラウザが開き、以下のような画面が表示されます。なおデフォルトでは中国語が選択されていますが、ここには言語を英語に変更した後の画面を載せています。

f:id:FY0323:20200618135306p:plain

次にFileZillaなどのFTPクライアントアプリを起動し、以下のようにアクセスします。

  • ホスト: 127.0.0.1
  • ユーザー: <AccessKeyId情報>/<OSSのバケット名>
  • パスワード: <AccessKeySecret情報>
  • ポート:2048

アクセスすると以下のようにバケット内のオブジェクトが確認できます。これでローカルとOSSとの間でファイルをやり取りすることができます。

f:id:FY0323:20200618135715p:plain

なお、OSSFTPではほかにもログを確認することもできます。以下はOSSFTPを起動した直後のログ画面です。

f:id:FY0323:20200618135825p:plain

※参考リンク:

Alibaba Cloud - OSS FTPのクイックインストール

GitHub - aliyun/oss-ftp

Cloud Storage Gateway

Cloud Storage Gatewayは、オブジェクトストレージであるOSSを、ファイルストレージ・ブロックストレージとして利用することを可能にするGatewayを提供する機能です。Cloud Storage Gatewayは、オブジェクトストレージをバックエンドストレージとして利用し、ファイルストレージとしてNFS/SMB、ブロックストレージとしてiSCSIを、ECSやオンプレのサーバーに提供します。

AWSにもStorage Gatewayという同様の機能がありますが、Cloud Storage GatewayではECSなどのインスタンスを別途作成する必要がない、というのが大きな違いとなります。

今回はECS(CentOS)からファイルストレージを利用する例を紹介します。Cloud Storage GatewayはWebコンソール画面から作成することができます。

まずはコンソール画面からCloud Storage Gatewayを選択し、Gateway Clusterを作成します。

f:id:FY0323:20200618140424p:plain f:id:FY0323:20200618140432p:plain

Gateway Clusterが作成されると、以下のように作成したClusterを確認することができます。

f:id:FY0323:20200618140440p:plain

Gateway Cluster作成後は作成したClusterを選択し、Gatewayの作成を行います。先ほど作成したGateway Clusterを選択し、以下の画面から「Create」を選択します。

f:id:FY0323:20200618140958p:plain

Gatewayの作成画面に遷移します。ここではGatewayを作成する場所(Alibaba Cloudかオンプレミスか)や、Gatewayのタイプ(ファイルストレージ、またはブロックストレージ)を選択します。

f:id:FY0323:20200618141233p:plain

続いてGateway作成後にそのGatewayを利用するVPC・Vswitchを選択します。また、希望する帯域幅などのキャパシティに応じて4つのタイプから選択することができます(詳細はこちらのページからどうぞ)。

f:id:FY0323:20200618141542p:plain

次に支払方法を選択します。

f:id:FY0323:20200618141628p:plain

最後に確認画面が表示されます。

f:id:FY0323:20200618141705p:plain

なお、オンプレから利用する場合を選択すると、Gateway Cluster作成後にVsphere / Hyper-V / KVM用のイメージダウンロードページに遷移します。

f:id:FY0323:20200618141937p:plain

f:id:FY0323:20200618141946p:plain

Gateway作成後はファイル共有の作成を行うのですが、ファイル共有を作成する際にキャッシュディスクを指定する必要があります。そのため、まずはキャッシュディスクを作成します。

f:id:FY0323:20200618142337p:plain

作成したGatewayを選択し、「Cache」を選択します。

f:id:FY0323:20200618142348p:plain

f:id:FY0323:20200618142422p:plain

作成するキャッシュの値を設定します。今回はデフォルト値で作成します。

f:id:FY0323:20200618142530p:plain f:id:FY0323:20200618142605p:plain

キャッシュディスクが作成できたので、ファイル共有を作成します。「Share」画面に遷移し、「Create」を選択します。

f:id:FY0323:20200618142832p:plain

ファイル共有の作成画面が表示されます。まずは利用するOSSのエンドポイントやバケットを選択します。

f:id:FY0323:20200618142958p:plain

続いてファイル共有の名称や利用するプロトコル、キャッシュディスクを選択します。

f:id:FY0323:20200618143110p:plain

確認画面が表示されるので「OK」を選択します。

f:id:FY0323:20200618143158p:plain

ファイル共有が作成されると、以下のように表示されます。

f:id:FY0323:20200618143315p:plain

ファイル共有が作成できましたので、ECSからOSSをマウントしてみます。

# Cloud Storage Gatewayのマウント
[root@test01 ~]# yum install rpcbind nfs-utils
[root@test01 ~]# mkdir /mnt/csg
[root@test01 ~]# mount.nfs 192.168.0.75:/testfileshare /mnt/csg


# マウント後の確認
[root@test01 ~]# df -h
Filesystem                   Size  Used Avail Use% Mounted on
devtmpfs                     1.9G     0  1.9G   0% /dev
tmpfs                        1.9G     0  1.9G   0% /dev/shm
tmpfs                        1.9G  480K  1.9G   1% /run
tmpfs                        1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/vda1                     40G  3.8G   34G  10% /
tmpfs                        379M     0  379M   0% /run/user/0
192.168.0.75:/testfileshare  128T     0  128T   0% /mnt/csg

[root@test01 ~]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,size=1929816k,nr_inodes=482454,mode=755)

(中略)

tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=388020k,mode=700)
192.168.0.75:/testfileshare on /mnt/csg type nfs4 (rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.0.46,local_lock=none,addr=192.168.0.75)


# マウント先でファイルを作成してみる
[root@test01 ~]# dd if=/dev/zero of=/mnt/csg/testfile_20200611.txt bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 15.8898 s, 67.6 MB/s


# アンマウント
[root@test01 ~]# umount /mnt/csg


# 確認
[root@test01 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G  476K  1.9G   1% /run
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/vda1        40G  3.8G   34G  10% /
tmpfs           379M     0  379M   0% /run/user/0

[root@test01 ~]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,size=1929816k,nr_inodes=482454,mode=755)

(中略)

tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=388020k,mode=700)

※参考リンク

Alibaba Cloud - What is CSG?

Alibaba Cloud - Access NFS shares

その他

Data Transport

Data Transportはオンライン・オフラインのデータ移行をサポートするサービスです。

オフラインの場合、ローカルからOSSへのデータ移行オーダーをすると、データ移行用デバイスが送られ、デバイスにデータを格納しAlibaba Cloudへ返送することで、OSSへのデータ移行を実現することができます。用途としては、データ移行元のローカルのデータセンターがネットワークの帯域幅が狭い、あるいはインターネットへのアクセスができない場合に、テラバイト・ペタバイト級のデータ移行を行う際に有効となります。

オンラインの場合、移行元・移行先としてはOSSやAWS S3、Azure Blobなど様々なソースを指定することができます。イメージとしてはOSSImportをブラウザから実行できるようなものと考えるとよいかもしれません。

※参考リンク:

Alibaba Cloud - What is Data Transport?

Alibaba Cloud - オンライン移行サービス(中国語)https://help.aliyun.com/document_detail/95074.html?spm=a2c4g.11174283.3.1.6b4051ccq25icN

Hybrid Backup Recovery

Hybrid Backup Recovery (HBR)は、オンプレ・クラウドを含むハイブリッドな環境に対してバックアップ・リストア機能を提供するサービスです。以下の概要図にもあるように、HBRはOSSに対してもバックアップ機能を提供しており、バックアップを有効にするとHBRバックアップ用のVaultにデータが保存されます。

Alibaba Cloud Hybrid Backup Recovery figure

Alibaba Cloud公式ページより

HBRはWebコンソールから操作が可能です。まずバックアップのプランを作成し、それからバックアップを実行します。

バックアッププランの作成画面では、バックアップ対象のバケットや開始時刻、バックアップの頻度やデータ保持期間などを指定できます。

f:id:FY0323:20200618150114p:plain

バックアッププランを作成すると以下のようにプランが確認できます。対象のプランの「Execute」を選択するとバックアップが実行されます。

f:id:FY0323:20200618150335p:plainf:id:FY0323:20200618150343p:plain

※参考リンク:

Alibaba Cloud - What is Hybrid Backup Recovery?

Alibaba Cloud - Hybrid Backup Recovery: Back up OSS data

AWS S3との対応

最後に、今回紹介したツールとS3との対応表を載せておきます。

OSS 対応するAWSツール リンク
OSSUtil s3cmd GitHub - s3tools/s3cmd
OSS Browser S3 Browser S3 Browser
OSSImport s3Import PyPI - s3import
OSSFTP s3ftp GitHub - yob/s3ftp
OSSFS s3fs GitHub - s3fs-fuse/s3fs-fuse
Cloud Storage Gateway AWS Storage Gateway AWS - AWS Storage Gateway
Data Transport AWS Snow Familyなど AWS - クラウドへのデータの移行
Hybrid Backup Recovery AWS Backup AWS - AWS Backup