リモートホスト (SSH) からの COPY
COPY コマンドでは、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスをはじめとするコンピュータなど、1 つ以上のリモートホストから同時にデータをロードすることができます。COPY では Secure Shell (SSH) を使用してリモートホストに接続し、そのホストのコマンドを実行してテキスト出力を生成します。リモートホストになることができるのは、EC2 の Linux インスタンスか、SSH 接続を許可するように設定されている Unix コンピュータまたは Linux コンピュータです。Amazon Redshift は複数のホストに接続でき、各ホストに対して複数の SSH 接続を開くことができます。Amazon Redshift は、各接続を介して一意のコマンドを送信し、ホストの標準出力にテキスト出力を生成します。Amazon Redshift は、テキストファイルと同じようにそれを読み込みます。
FROM 句を使用してマニフェストファイルの Amazon S3 オブジェクトキーを指定します。そのマニフェストファイルは、COPY が SSH 接続を開いてリモートコマンドを実行するために使用する情報を提供します。
重要
マニフェストファイルを保持する S3 バケットがクラスターと同じ AWS リージョンに存在しない場合は、REGION パラメータを使用して、バケットがあるリージョンを指定する必要があります。
構文
FROM 's3://'ssh_manifest_file' } authorization SSH | optional-parameters
例
次の例では、マニフェストファイルを使用し、SSH を使用してリモートホストからデータをロードします。
copy sales from 's3://amzn-s3-demo-bucket/ssh_manifest' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' ssh;
パラメータ
- FROM
-
ロードするデータのソースです。
- 's3://copy_from_ssh_manifest_file'
-
COPY コマンドは、SSH を使用して複数のホストに接続できるだけでなく、各ホストに対して複数の SSH 接続を作成できます。COPY はそれぞれのホスト接続を介してコマンドを実行し、コマンドからの出力を並列的にテーブルにロードします。s3://copy_from_ssh_manifest_file 引数は、マニフェストファイルの Amazon S3 オブジェクトキーを指定します。そのマニフェストファイルは、COPY が SSH 接続を開いてリモートコマンドを実行するために使用する情報を提供します。
s3://copy_from_ssh_manifest_file 引数は 1 つのファイルを明示的に参照する必要があります。これをキープレフィックスにすることはできません。例を以下に示します。
's3://amzn-s3-demo-bucket/ssh_manifest.txt'
マニフェストファイルは、Amazon Redshift がホストに接続する際に使用する JSON 形式のテキストファイルです。マニフェストファイルでは、SSH ホストのエンドポイント、ならびに、Amazon Redshift にデータを返すためにホストで実行されるコマンドを指定します。このほか、ホストのパブリックキー、ログインユーザー名、および各エントリの必須フラグを記載することもできます。次の例は、2 つの SSH 接続を作成するマニフェストファイルを示しています。
{ "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"
構造が含まれます。単一のホストに対して接続を複数作成することも、複数のホストに対して複数の接続を作成することもできます。例に示すように、フィールド名と値のどちらにも二重引用符が必要です。引用符の文字は、傾きの付いた "高機能な" 引用符ではなくシンプルな引用符 (0x22) にする必要があります。"mandatory"
フィールドの中で二重引用符を必要としない値は、true
またはfalse
のブール値のみです。次のリストでは、マニフェストファイルのフィールドについて説明します。
- endpoint
-
ホストの URL アドレスまたは IP アドレス (
"ec2-111-222-333.compute-1.amazonaws.com"
や"198.51.100.0"
など)。 - コマンド
-
テキスト出力またはバイナリ出力を gzip、lzop、bzip2、zstd 形式で生成する際にホストが実行するコマンド。コマンドは、ユーザー "host_user_name" が実行権限を持つコマンドであれば、どれでも指定できます。ファイルを印刷するなどのシンプルなコマンドでも、データベースにクエリを実行したり、スクリプトを実行したりするコマンドでもかまいません。出力 (テキストファイル、gzip バイナリファイル、lzop バイナリファイル、または bzip2 バイナリファイル) は、Amazon Redshift の COPY コマンドが取り込める形式にする必要があります。詳細については、「入力データを準備する」を参照してください。
- publickey
-
(オプション) ホストのパブリックキー。公開キーが指定されている場合、Amazon Redshift は公開キーを使用してホストを特定します。公開キーが指定されていなければ、Amazon Redshift がホストの特定を試みることはありません。例えば、リモートホストのパブリックキーが
ssh-rsa AbcCbaxxx…Example root@amazon.com
であれば、パブリックキーのフィールドには"AbcCbaxxx…Example"
と入力してください。 - mandatory
-
(オプション) 接続ができなかった場合に COPY コマンドを失敗とするかどうかを示す句です。デフォルト:
false
。Amazon Redshift が接続を 1 つも正常に確立できなかった場合に、COPY コマンドが失敗になります。 - username
-
(オプション) ホストシステムにログオンし、リモートコマンドを実行する際に使用するユーザー名。ユーザーログイン名は、ホストの認可されたキーファイルに Amazon Redshift クラスターの公開キーを追加するときに使用したログイン名と同じものにする必要があります。デフォルトのユーザー名は
redshift
です。
マニフェストファイルの作成の詳細については、「データをロードする手順」を参照してください。
リモートホストから COPY を実行するには、COPY コマンドに SSH パラメータを指定する必要があります。SSH パラメータを指定しない場合、COPY では、FROM で指定されたファイルがデータファイルであると想定され、COPY は失敗します。
自動圧縮を使用する場合には、COPY コマンドでデータの読み込みオペレーションが 2 回実行されます。つまり、COPY コマンドではリモートコマンドが 2 回実行されることになります。初回の読み取り操作は圧縮の分析用データサンプルを提供するためのものであり、実際にデータがロードされるのは 2 回目の読み取り操作です。リモートコマンドを 2 回実行することが問題になるようであれば、自動圧縮は無効にする必要があります。自動圧縮を無効にするには、COMPUPDATE パラメータを OFF に設定して COPY コマンドを実行します。詳細については、「自動圧縮ありでテーブルをロードする」を参照してください。
SSH から COPY を使用するための詳細な手順については、「リモートホストからデータをロードする」を参照してください。
- authorization
-
COPY コマンドが、他の AWS リソース (Amazon S3、Amazon EMR、Amazon DynamoDB、Amazon EC2 など) のデータにアクセスするにためには承認が必要です。この認可を付与するには、クラスターにアタッチした AWS Identity and Access Management (IAM) ロールを参照 (ロールベースのアクセスコントロール) するか、ユーザーのアクセス認証情報を指定 (キーベースのアクセスコントロール) します。セキュリティと柔軟性を強化するために、IAM ロールベースのアクセスコントロールを使用することをお勧めします。詳細については、「認可パラメータ」を参照してください。
- SSH
-
SSH プロトコルを使用してリモートホストからデータがロードされることを指定する句です。SSH を指定する場合は、s3://copy_from_ssh_manifest_file引数を使用してマニフェストファイルを指定する必要もあります。
注記
SSH を使用してリモート VPC でプライベート IP アドレスを使用しているホストからコピーしている場合、VPC は拡張された VPC ルーティングを有効化する必要があります。拡張された VPC ルーティングの詳細については、「Amazon Redshift 拡張 VPC ルーティング」を参照してください。
任意指定のパラメータ
SSH からの COPY では、オプションで次のパラメータを指定できます。
サポートされないパラメータ
SSH からの COPY では、次のパラメータは使用できません。
-
ENCRYPTED
-
MANIFEST
-
READRATIO