データ移行タスクを開始する前に、以下の準備手順を完了してください。
ステップ1:リストファイルのアップロード
HTTP/HTTPS リストファイルは、スキーマを定義する manifest.json ファイルと、実際のファイルリストを含む 1 つ以上の .csv.gz ファイルの 2 つのコンポーネントで構成されます。各 .csv.gz ファイルは 100 MB を超えないようにしてください。
CSV リストファイルの作成
ローカルマシンで CSV 形式のリストファイルを作成します。各行は 1 つのファイルを表します。行は改行 (
\n) で区切られ、各行内の列はカンマ (,) で区切られます。重要[Key] と [Url] は必須です。その他のフィールドはすべてオプションです。
各行は改行で終わる必要があります。改行がないと CSV 解析が失敗し、移行タスクが中断されます。
必須項目
名前
必須
説明
注意事項
Url
はい
Data Online Migration はこの URL を使用してファイルコンテンツをダウンロード (GET リクエスト) し、ファイルメタデータを取得 (HEAD リクエスト) します。
説明[Url] は、
curl --HEAD "$Url"やcurl --GET "$Url"などのコマンドでアクセスできる必要があります。Data Online Migration は URL リダイレクトをサポートしていません。[Url] と [Key] の両方に特殊文字が含まれる場合は、URL エンコードする必要があります。エンコードしないと、移行が失敗する可能性があります。
[Url]:
curlなどのコマンドラインツールで (リダイレクトなしで) アクセスできるように URL を URL エンコードしてください。[Key]:OSS 内のファイルの目的のオブジェクト名を URL エンコードしてください。
重要エンコード後、以下を確認してください。そうしないと、移行が失敗したり、宛先のファイルパスが想定と異なったりする可能性があります。
元の文字列のプラス記号 (+) は %2B としてエンコードされます。
元の文字列のパーセント記号 (%) は %25 としてエンコードされます。
元の文字列のカンマ (,) は %2C としてエンコードされます。
たとえば、元の文字列
a+b%c,d.fileはa%2Bb%25c%2Cd.fileにエンコードされます。Key
はい
移行後の OSS 内のオブジェクト名。最終的な名前は
prefix + Key 値になります。たとえば、プレフィックスがbackup/で、Key がimages/photo.jpgの場合、オブジェクトはbackup/images/photo.jpgとして保存されます。次の例は、
plain_example.csvという名前のプレーン (エンコードされていない) CSV ファイルで、UrlとKeyの 2 つの列があります。URL はcurlコマンドを使用して直接アクセスでき、Key値は OSS 内の目的のオブジェクト名です。https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/1354977961/p486238.jpg,assets/img/zh-CN/1354977961/p486238.jpg https://www.example-fake1.com/url-that-can-be-accessed-only-after-encoding/123.png,url-that-can-be-accessed-only-after-encoding/123.png https://www.example-fake2.com/url-that-can-be-accessed-without-encoding/123.png,url-that-can-be-accessed-without-encoding/123.png https://www.example-fake3.com/Chinese/Japanese/Korean/123.png,Chinese/Japanese/Korean/123.png重要Windows のメモ帳を使用して
manifest.jsonやplain_example.csvを編集しないでください。メモ帳はファイルの最初の 3 バイトにバイトオーダーマーク (BOM) (0xefbbbf) を追加する可能性があり、Data Online Migration で解析エラーが発生します。Linux または macOS では、od -c plain_example.csv | lessを実行して BOM が存在するかどうかを確認してください。Windows では、代わりに Notepad++ または Visual Studio Code を使用してください。URL やキーに特殊文字が含まれている場合は、使用前にエンコードしてください。次の Python スクリプトは、
plain_example.csvを 1 行ずつ読み取り、URL エンコードされた出力をexample.csvに書き込みます。# -*- coding: utf-8 -*- import sys if sys.version_info.major == 3: from urllib.parse import quote_plus else: from urllib import quote_plus reload(sys) sys.setdefaultencoding("utf-8") # ソース CSV ファイルのパス。 src_path = "plain_example.csv" # URL エンコードされたファイルのパス。 out_path = "example.csv" # サンプル CSV には url と key の 2 つの列のみが含まれます。 with open(src_path) as fin, open(out_path, "w") as fout: for line in fin: items = line.strip().split(",") url, key = items[0], items[1] enc_url = quote_plus(url.encode("utf-8")) enc_key = quote_plus(key.encode("utf-8")) # enc_url と enc_key 変数はエンコードされた文字列です。 fout.write(enc_url + "," + enc_key + "\n")スクリプトを実行すると、
example.csvには次のエンコードされたコンテンツが含まれます。https%3A%2F%2Fhelp-static-aliyun-doc.aliyuncs.com%2Fassets%2Fimg%2Fzh-CN%2F1354977961%2Fp486238.jpg,assets%2Fimg%2Fzh-CN%2F1354977961%2Fp486238.jpg https%3A%2F%2Fwww.example-fake1.com%2Furl-that-can-be-accessed-only-after-encoding%2F123.png,url-that-can-be-accessed-only-after-encoding%2F123.png https%3A%2F%2Fwww.example-fake2.com%2Furl-that-can-be-accessed-without-encoding%2F123.png,url-that-can-be-accessed-without-encoding%2F123.png https%3A%2F%2Fwww.example-fake3.com%2FChinese%2FJapanese%2FKorean%2F123.png,Chinese%2FJapanese%2FKorean%2F123.pngすべての項目
名前
必須
注意事項
Key
はい
移行後の OSS 内のオブジェクト名。最終的な名前は
prefix + Key 値になります。Url
はい
Data Online Migration はこの URL を使用してファイルコンテンツをダウンロード (GET リクエスト) し、ファイルメタデータを取得 (HEAD リクエスト) します。
Size
いいえ
移行するファイルのサイズ (バイト単位)。
説明このフィールドは、移行されたファイルのストレージ使用量を計算するために使用されます。省略すると、コンソールのストレージ使用量グラフが利用できません。
説明項目の順序は固定されていませんが、
manifest.jsonの [fileSchema] フィールド内のフィールドの順序と一致する必要があります。
CSV ファイルの圧縮
gzip を使用して各 CSV ファイルを
.csv.gzファイルに圧縮します。単一ファイルの圧縮
example.csvという名前の単一ファイルを圧縮するには、次のコマンドを実行します。gzip -c example.csv > example.csv.gz説明gzipコマンドで-cフラグを指定しないと、圧縮後にソースファイルが削除されます。ソースファイルを保持するには、gzip -c <source_file> > <source_file>.gzを使用してください。これにより、
.csv.gzファイルが生成されます。複数ファイルの圧縮
ディレクトリ内のすべての CSV ファイルを圧縮するには (たとえば、
dirディレクトリ内のexample1.csv、example2.csv、example3.csv)、次のコマンドを実行します。gzip -r dir説明gzipコマンドは、ディレクトリ内の各ファイルを個別に圧縮し、ディレクトリ自体をパッケージ化しません。ソースファイルは保持されません。これにより、
dirディレクトリ内にexample1.csv.gz、example2.csv.gz、example3.csv.gzが生成されます。
manifest.json ファイルの作成
manifest.jsonファイルはスキーマを定義し、すべての CSV リストファイルを参照します。次のフィールドを設定してください。fileFormat:CSVに設定します。fileSchema:CSV ファイル内の列名を、列と同じ順序でリストします。説明CSV ファイル内の列数は、
fileSchema内のフィールド数と一致する必要があります。移行サービスは、タスク作成時にこれを検証します。files:CSV ファイルへの参照の配列。各エントリには次が含まれます。key:バケット内の.csv.gzファイルへのパス。MD5checksum:32 桁の16進数 MD5 チェックサム文字列 (大文字と小文字は区別されません)。例:91A76757B25C8BE78BC321DEEBA6A5AD。チェックサムチェックをスキップするには、空白にします。size:.csv.gzファイルのサイズ。
例:
{ "fileFormat":"CSV", "fileSchema":"Url, Key", "files":[{ "key":"dir/example1.csv.gz", "MD5checksum":"", "size":0 },{ "key":"dir/example2.csv.gz", "MD5checksum":"", "size":0 }] }マニフェストファイルを OSS または AWS S3 にアップロードします。
manifest.jsonとすべての.csv.gzファイルをアップロードします。バケット内のファイル名は、manifest.jsonで参照されているファイル名と一致する必要があります。manifest.jsonへのパスを記録してください。ソースデータアドレスを作成する際に、このパスを指定する必要があります。
ステップ 2: 移行先バケットの作成
移行データを保存するための送信先バケットを作成します。詳細については、「バケットの作成」をご参照ください。
ステップ 3: RAM ユーザーの作成と権限付与
-
この RAM ユーザーを使用してロールを作成し、移行タスクを実行する必要があります。この RAM ユーザーは、ソースバケットまたは送信先バケットを所有する Alibaba Cloud アカウントで作成することを推奨します。
-
RAM ユーザーの作成については、「クイックスタート:RAMユーザーの作成と権限付与」をご参照ください。
Alibaba Cloud アカウントで RAM コンソールにログオンします。[ユーザー] ページで、作成した RAM ユーザーを見つけ、[アクション] 列の [権限の追加] をクリックします。
-
システムポリシー: オンライン移行サービスの管理権限 (AliyunOSSImportFullAccess)。
-
カスタムポリシー: このポリシーには、
ram:CreateRole、ram:CreatePolicy、ram:AttachPolicyToRole、ram:ListRolesの権限が必要です。権限の管理方法の詳細については、「カスタムポリシーの作成」をご参照ください。以下はサンプルポリシーです。
{ "Version":"1", "Statement":[ { "Effect":"Allow", "Action":[ "ram:CreateRole", "ram:CreatePolicy", "ram:AttachPolicyToRole", "ram:ListRoles" ], "Resource":"*" } ] }
ステップ4:インベントリバケットへのアクセス許可の付与
インベントリバケットがお客様のアカウントに属しているかどうかによって手順が異なります。
お客様のアカウント内のインベントリバケット
-
ワンクリック権限付与
Data Online Migration コンソールのワンクリック権限付与機能を使用することを推奨します。このオプションは、[Migration Implementation] > [Step 2] > [Authorize List Role] にあります。
-
手動権限付与
インベントリバケット権限の付与
ロールページで、作成した RAM ロールを見つけ、[Actions] 列の [Add Permissions] をクリックします。-
カスタムポリシー: このポリシーには、
oss:List*およびoss:Get*権限が含まれている必要があります。
カスタムポリシーの作成方法の詳細については、「カスタムポリシーの作成」をご参照ください。以下にポリシーの例を示します。
説明これはポリシーの例です。<myInvBucket> を実際のインベントリバケットの名前に置き換えてください。
OSS の権限ポリシーの詳細については、「RAM ポリシーの一般的な例」をご参照ください。
重要インベントリバケットに KMS で暗号化されたオブジェクトが含まれている場合は、AliyunKMSFullAccess システムポリシーも RAM ロールにアタッチする必要があります。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:List*", "oss:Get*" ], "Resource": [ "acs:oss:*:*:<myInvBucket>", "acs:oss:*:*:<myInvBucket>/*" ] } ] } -
他のアカウントのインベントリバケット
インベントリバケット権限の付与
-
インベントリバケットを所有する Alibaba Cloud アカウントで OSS コンソール にログインします。
-
左側のナビゲーションペインで、バケット をクリックし、インベントリバケットの名前をクリックします。
-
左側のナビゲーションペインで、権限管理 > バケット承認ポリシー を選択します。
-
構文で追加 タブで、編集 をクリックして、次のバケットポリシーを追加します。
-
カスタムポリシー:
RAM ロールに、バケット内のすべてのリソースを一覧表示および読み取りする権限を付与します。
説明これはポリシーの例です。プレースホルダーを実際の値に置き換えます。<otherInvBucket> をインベントリバケット名に、<myuid> を Data Online Migration コンソールへのアクセスに使用するアカウントのAlibaba Cloud アカウント ID に、<otherUid> を[Alibaba Cloud アカウント ID] (インベントリバケット所有者の) に、<roleName> を[ロール名] (作成した) に置き換えます。OSS 権限ポリシーの詳細については、「RAM ポリシーの一般的な例」をご参照ください。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:List*", "oss:Get*" ], "Principal": [ "arn:sts::<myUid>:assumed-role/<roleName>/*" ], "Resource": [ "acs:oss:*:<otherUid>:<otherInvBucket>", "acs:oss:*:<otherUid>:<otherInvBucket>/*" ] } ] }
2. KMS 権限の付与
-
インベントリバケットに KMS で暗号化されたオブジェクトが含まれている場合は、AliyunKMSFullAccess システムポリシーも RAM ロールにアタッチする必要があります。
-
インベントリバケット内のオブジェクトがカスタマーマネージドキーで暗号化されている場合は、次の手順に従って、そのキーへのアクセス権を RAM ロールに付与します。
-
Key Management Service コンソールにログインし、キーを見つけます。
-
Key Policy を設定し、[他のアカウントのユーザー] を選択して、プリンシパル ARN を入力します。 詳細については、「キーポリシーの設定」をご参照ください。 [キーポリシー] をクリックします。 表示されるパネルで、RAM ユーザーまたは RAM ロール名で検索して選択し、[管理者] と [ユーザー] を設定します。 [他のアカウントのユーザー] セクションで、プリンシパル ARN を
acs:ram::<userId>:role/<ramrole>またはacs:ram::<userId>:user/<ramuser>の形式で入力します。 [プリンシパル ARN の追加] をクリックして、複数の ARN を追加します。
-
ステップ5:宛先バケットへのアクセス許可の付与
送信先バケットの所有者に応じて、以下の手順に従ってください。
同一アカウント内の移行先
-
自動権限付与
データオンライン移行 コンソールで 自動ロール権限付与 を使用します: [移行の実装] > [ステップ 3] > [ロールの権限付与]。
-
手動権限付与
説明次の場合に手動権限付与を使用してください。
-
単一の RAM ロールで複数の移行元バケットを管理する場合。
-
アカウントが RAM ロールの上限に近い場合。
-
自動権限付与が適切でない、または利用できない場合。
1. RAM ロールの作成
RAM コンソールにログオンし、ロールページに移動して、[ロールの作成] をクリックします。
-
[信頼できるエンティティを選択] には、[Alibaba Cloud サービス] を選択します。
-
[ロールタイプ] には、[データ転送] を選択します。
-
[ロール名] を入力します。名前はすべて小文字にする必要があります。
たとえば、
role-testと入力します。 ロール名は最大 64 文字で、英字、数字、ハイフン (-)、およびピリオド (.) を使用できます。 名前を入力したら、[OK] をクリックします。2. RAM ロールへの権限付与
[ロール] ページで、RAM ロールを見つけ、[アクション] 列の [権限の追加] をクリックします。
-
次の権限を持つカスタムポリシーを作成してアタッチします:
oss:List*、oss:Get*、oss:Put*、およびoss:AbortMultipartUpload。
「カスタムポリシーの作成」をご参照ください。ポリシーの例:
説明<myDestBucket>を移行先バケット名に置き換えてください。「RAM ポリシーの一般的な例」をご参照ください。
重要移行先バケットが SSE-KMS 暗号化を使用している場合、RAM ロールに AliyunKMSFullAccess システムポリシーもアタッチする必要があります。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:List*", "oss:Get*", "oss:Put*", "oss:AbortMultipartUpload" ], "Resource": [ "acs:oss:*:*:<myDestBucket>", "acs:oss:*:*:<myDestBucket>/*" ] } ] } -
異なるアカウントの移行先
1. RAM ロールの作成
移行に使用する Alibaba Cloud アカウントで RAM コンソールにログインし、ロールページに移動して、[ロールの作成] をクリックします。
-
[信頼できるエンティティの選択] には、[Alibaba Cloud サービス] を選択します。
-
[ロールタイプ] には、[データ転送] を選択します。
-
[ロール名] を入力します。 名前はすべて小文字にする必要があります。
たとえば role-test と入力します。 ロール名は最大 64 文字で、英字、数字、ハイフン (-)、ピリオド (.) を含めることができます。 名前を入力したら、 [OK] をクリックします。
2. 移行先バケットの権限付与
新しいバケットポリシーは既存のポリシーを上書きします。既存の権限を保持するには、以前のすべてのステートメントを含めてください。
-
移行先バケットを所有する Alibaba Cloud アカウントを使用して、OSS コンソールにログインします。
-
左側のナビゲーションペインで、バケット をクリックします。「バケット」ページで、宛先バケットの名前をクリックします。
-
左側のナビゲーションペインで、権限管理 > バケット承認ポリシー を選択します。
-
構文で追加 タブで、編集 をクリックしてカスタムバケットポリシーを定義します。
-
RAM ロールに、バケット内のすべてのオブジェクトのリスト、読み取り、書き込みを行う権限を付与します。
-
<otherDestBucket> を [宛先バケットの名前] に、<otherUid> を宛先バケットを所有する [Alibaba Cloud アカウントの UID] に、<myUid> を [移行コンソールの Alibaba Cloud アカウントの UID] に、<roleName> を上記で作成した [ロールの名前] に置き換えます。RAM ポリシーの一般的な例。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:List*",
"oss:Get*",
"oss:Put*",
"oss:AbortMultipartUpload"
],
"Principal": [
"arn:sts::<myUid>:assumed-role/<roleName>/*"
],
"Resource": [
"acs:oss:*:<otherUid>:<otherDestBucket>",
"acs:oss:*:<otherUid>:<otherDestBucket>/*"
]
}
]
}
3. KMS 権限付与
-
移行先バケットが SSE-KMS 暗号化を使用している場合、移行に使用するアカウントの RAM ロールに AliyunKMSFullAccess システムポリシーもアタッチする必要があります。
-
移行先バケットがカスタム KMS キーを使用している場合、RAM ロールにキーへのアクセス権を付与してください。
-
KMS コンソールにログインし、キーを見つけてください。
-
[キーポリシー] を設定します。[他のアカウントのユーザー] を選択し、承認されたプリンシパルの ARN を入力します。キーポリシーを設定する。
[キーポリシー] ダイアログボックスで、次の承認済みプリンシパルを設定します。
-
[主要管理者]: RAM ユーザーまたは RAM ロールの名前を入力して検索し、追加します。
-
[キーユーザー]: RAM ユーザーまたは RAM ロールの名前を入力して検索し、追加します。
-
[他のアカウントのキーユーザー]: 承認されたプリンシパルの ARN を
acs:ram::<userId>:role/<ramrole>またはacs:ram::<userId>:user/<ramuser>のフォーマットで入力し、[他のアカウントのキーユーザーの ARN を追加] をクリックして複数のエントリを追加します。
-
-