はじめに
こんにちは、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 クイックスタート
OSS Browser
OSS Browserはブラウザベースのアプリケーションを起動し、OSSバケットへのアクセスやファイルのアップロード・ダウンロードなどの操作を行うツールです。Windows/Linux/Macで利用可能で、日本語にも対応しています。以下に実際の画面のキャプチャを添付していますが、とてもシンプルで使いやすいUIだと思います。
こちらのページから対象のバージョンのOSS Browserをダウンロードし、解凍ファイルの中にあるoss-browser.exe
を起動します。
起動後、エンドポイント、アクセス情報を入力し、ログインします。エンドポイントは特に指定がなければ入力せず「デフォルト」で問題ありません。
ログイン後、バケットの一覧が確認できるので、対象のバケットを選択すると、オブジェクトの内容が確認できます。
また、各オブジェクトのアドレスを生成すると、オブジェクトへのアクセス用アドレスに加え、QRコードも生成されます。このQRコードを読み取ることで、オブジェクトにアクセスすることもできます(QRコードを読み取って得られるURLにはAccessKeyId/AccessKeySecret情報が含まれているので、扱いには注意してください)。
また設定画面からは、転送設定やメール送信設定なども行うことができます。
※参考リンク:
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: 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: クイックインストール
OSSFTP
OSSFTPは、FTPによるファイル・フォルダへの操作をOSSにマッピングするFTPサーバーを提供するツールです。OSSFTPはWindows/Linux/Macで利用することができ、OSSFTPを起動後にFileZillaなどのFTPクライアントツールを利用してFTPサーバに接続することが推奨されています。OSSFTPは個人ユーザー向けに提供されているツールのため、本番環境ではOSS SDKなどを利用することが推奨されています。
OSSFTPはこちらのページから圧縮ファイルをダウンロードし、解凍したフォルダからstart.vbs
を実行します。実行するとWebブラウザが開き、以下のような画面が表示されます。なおデフォルトでは中国語が選択されていますが、ここには言語を英語に変更した後の画面を載せています。
次にFileZillaなどのFTPクライアントアプリを起動し、以下のようにアクセスします。
ホスト
: 127.0.0.1ユーザー
: <AccessKeyId情報>/<OSSのバケット名>パスワード
: <AccessKeySecret情報>ポート
:2048
アクセスすると以下のようにバケット内のオブジェクトが確認できます。これでローカルとOSSとの間でファイルをやり取りすることができます。
なお、OSSFTPではほかにもログを確認することもできます。以下はOSSFTPを起動した直後のログ画面です。
※参考リンク:
Alibaba Cloud - 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を作成します。
Gateway Clusterが作成されると、以下のように作成したClusterを確認することができます。
Gateway Cluster作成後は作成したClusterを選択し、Gatewayの作成を行います。先ほど作成したGateway Clusterを選択し、以下の画面から「Create」を選択します。
Gatewayの作成画面に遷移します。ここではGatewayを作成する場所(Alibaba Cloudかオンプレミスか)や、Gatewayのタイプ(ファイルストレージ、またはブロックストレージ)を選択します。
続いてGateway作成後にそのGatewayを利用するVPC・Vswitchを選択します。また、希望する帯域幅などのキャパシティに応じて4つのタイプから選択することができます(詳細はこちらのページからどうぞ)。
次に支払方法を選択します。
最後に確認画面が表示されます。
なお、オンプレから利用する場合を選択すると、Gateway Cluster作成後にVsphere / Hyper-V / KVM用のイメージダウンロードページに遷移します。
Gateway作成後はファイル共有の作成を行うのですが、ファイル共有を作成する際にキャッシュディスクを指定する必要があります。そのため、まずはキャッシュディスクを作成します。
作成したGatewayを選択し、「Cache」を選択します。
作成するキャッシュの値を設定します。今回はデフォルト値で作成します。
キャッシュディスクが作成できたので、ファイル共有を作成します。「Share」画面に遷移し、「Create」を選択します。
ファイル共有の作成画面が表示されます。まずは利用するOSSのエンドポイントやバケットを選択します。
続いてファイル共有の名称や利用するプロトコル、キャッシュディスクを選択します。
確認画面が表示されるので「OK」を選択します。
ファイル共有が作成されると、以下のように表示されます。
ファイル共有が作成できましたので、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 - 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にデータが保存されます。
HBRはWebコンソールから操作が可能です。まずバックアップのプランを作成し、それからバックアップを実行します。
バックアッププランの作成画面では、バックアップ対象のバケットや開始時刻、バックアップの頻度やデータ保持期間などを指定できます。
バックアッププランを作成すると以下のようにプランが確認できます。対象のプランの「Execute」を選択するとバックアップが実行されます。
※参考リンク:
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 |