ステップ 5: マニフェストファイルを作成する
COPY コマンドは、SSH を使用して複数のホストに接続できるだけでなく、各ホストに対して複数の SSH 接続を作成できます。COPY はそれぞれのホスト接続を介してコマンドを実行し、コマンドからの出力を並列的にテーブルにロードします。マニフェストファイルは、Amazon Redshift がホストに接続する際に使用する JSON 形式のテキストファイルです。マニフェストファイルにより、SSH ホストのエンドポイントと、Amazon Redshift にデータを返すためにそのホストで実行されるコマンドを指定します。このほか、ホストのパブリックキー、ログインユーザー名、および各エントリの必須フラグを記載することもできます。
マニフェストファイルをローカルコンピュータで作成します。後の手順で、Amazon S3 にファイルをアップロードします。
マニフェスト ファイルの形式は以下のとおりです。
{ "entries": [ {"endpoint":"<ssh_endpoint_or_IP>", "command": "<remote_command>", "mandatory":true, "publickey": "<public_key>", "username": "<host_user_name>"}, {"endpoint":"<ssh_endpoint_or_IP>", "command": "<remote_command>", "mandatory":true, "publickey": "<public_key>", "username": "host_user_name"} ] }
マニフェストファイルには、SSH 接続ごとに 1 つずつ "entries" 構造が含まれます。各エントリは、1 つの SSH 接続を表します。単一のホストに対して接続を複数作成することも、複数のホストに対して複数の接続を作成することもできます。二重引用符は、フィールド名と値のどちらにも必要です。必須フィールドのなかで二重引用符を必要としない値は、true
または false
のブール値のみです。
以下に、マニフェストファイルのフィールドについて説明します。
- endpoint
-
ホストの URL アドレスまたは IP アドレス。たとえば、"
ec2-111-222-333.compute-1.amazonaws.com
"、"22.33.44.56
" などです。 - コマンド
-
テキストまたはバイナリ (gzip、lzop、または bzip2) の出力を生成する際にホストが実行するコマンド。コマンドは、ユーザー "host_user_name" が実行権限を持つコマンドであれば、どれでも指定できます。ファイルを印刷するなどのシンプルなコマンドでも、データベースにクエリを実行したり、スクリプトを実行したりするコマンドでもかまいません。出力 (テキストファイル、gzip バイナリファイル、lzop バイナリファイル、または bzip2 バイナリファイル) は、Amazon Redshift の COPY コマンドが取り込める形式にする必要があります。詳細については、「入力データを準備する」を参照してください。
- publickey
-
(オプション) ホストのパブリックキー。公開キーが指定されている場合、Amazon Redshift は公開キーを使用してホストを特定します。公開キーが指定されていなければ、Amazon Redshift がホストの特定を試みることはありません。例えば、リモートホストのパブリックキーが
ssh-rsa AbcCbaxxx…xxxDHKJ root@amazon.com
であれば、publickey フィールドにはAbcCbaxxx…xxxDHKJ
と入力してください。 - mandatory
-
(オプション) 接続ができなかった場合に COPY コマンドを失敗とするかどうかを示すものです。デフォルトは
false
です。Amazon Redshift が接続を 1 つも正常に確立できなかった場合に、COPY コマンドが失敗になります。 - username
-
(オプション) ホストシステムにログオンし、リモートコマンドを実行する際に使用するユーザーネーム。ユーザーログイン名は、ステップ 2 でホストの認可されたキーファイルにパブリックキーを追加するときに使用したログイン名と同じものにする必要があります。デフォルトのユーザー名は「redshift」です。
以下の例に、同じホストに対して 4 つの接続を確立し、接続ごとに異なるコマンドを実行するマニフェストの全容を示します。
{ "entries": [ {"endpoint":"ec2-184-72-204-112.compute-1.amazonaws.com", "command": "cat loaddata1.txt", "mandatory":true, "publickey": "ec2publickeyportionoftheec2keypair", "username": "ec2-user"}, {"endpoint":"ec2-184-72-204-112.compute-1.amazonaws.com", "command": "cat loaddata2.txt", "mandatory":true, "publickey": "ec2publickeyportionoftheec2keypair", "username": "ec2-user"}, {"endpoint":"ec2-184-72-204-112.compute-1.amazonaws.com", "command": "cat loaddata3.txt", "mandatory":true, "publickey": "ec2publickeyportionoftheec2keypair", "username": "ec2-user"}, {"endpoint":"ec2-184-72-204-112.compute-1.amazonaws.com", "command": "cat loaddata4.txt", "mandatory":true, "publickey": "ec2publickeyportionoftheec2keypair", "username": "ec2-user"} ] }