

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# Amazon EMR からのデータのロード
<a name="loading-data-from-emr"></a>

COPY コマンドを使用することで、クラスターの Hadoop Distributed File System (HDFS) に、固定幅ファイル、文字区切りファイル、CSV ファイル、または JSON 形式ファイルでテキストファイルを書き込むように設定された Amazon EMR クラスターから、データを並列にロードできます。

## Amazon EMR からデータをロードするプロセス
<a name="load-from-emr-process"></a>

このセクションでは、Amazon EMR クラスターからデータをロードする手順について説明します。以下のセクションでは、各ステップで必要な操作の詳細を説明します。
+ **[ステップ 1: IAM のアクセス許可を設定する](#load-from-emr-steps-configure-iam)**

  Amazon EMR クラスターを作成して Amazon Redshift の COPY コマンドを実行するユーザーには、そのための許可が必要です。
+ **[ステップ 2: Amazon EMR クラスターを作成する](#load-from-emr-steps-create-cluster)**

  テキストファイルを Hadoop Distributed File System（HDFS）に出力するようにクラスターの設定を変更します。Amazon EMR クラスター ID およびそのクラスターのメインの公開 DNS (クラスターをホストする Amazon EC2 インスタンスのエンドポイント) が必要になります。
+ **[ステップ 3: Amazon Redshift クラスターの公開キーおよびクラスターノード IP アドレスを取得する](#load-from-emr-steps-retrieve-key-and-ips)**

  公開キーは、Amazon Redshift クラスターノードがホストへの SSH 接続を確立するために使用されます。ホストのセキュリティグループに各クラスターノードの IP アドレスを設定し、その IP アドレスで Amazon Redshift クラスターからアクセスできるようにします。
+ **[ステップ 4: 各 Amazon EC2 ホストの承認されたキーファイルに Amazon Redshift クラスターの公開キーを追加する](#load-from-emr-steps-add-key-to-host)** 

  ホストが Amazon Redshift クラスターを認識し、SSH 接続を許可するように、ホストの認可されたキーファイルに Amazon Redshift クラスターの公開キーを追加します。
+ **[ステップ 5: Amazon Redshift クラスターの IP アドレスすべてを許可するようにホストを設定する](#load-from-emr-steps-configure-security-groups)** 

  Amazon EMR インスタンスのセキュリティグループを変更して、Amazon Redshift の IP アドレスを許可する入力ルールを追加します。
+ **[ステップ 6: COPY コマンドを実行してデータをロードする](#load-from-emr-steps-run-copy)**

  Amazon Redshift データベースから COPY コマンドを実行して、Amazon Redshift テーブルにデータをロードします。

## ステップ 1: IAM のアクセス許可を設定する
<a name="load-from-emr-steps-configure-iam"></a>

Amazon EMR クラスターを作成して Amazon Redshift の COPY コマンドを実行するユーザーには、そのための許可が必要です。

**IAM のアクセス許可を設定するには**

1. Amazon EMR クラスターを作成するユーザーに以下のアクセス許可を追加します。

   ```
   ec2:DescribeSecurityGroups
   ec2:RevokeSecurityGroupIngress
   ec2:AuthorizeSecurityGroupIngress
   redshift:DescribeClusters
   ```

1. COPY コマンドを実行する IAM ロールまたはユーザーに以下のアクセス許可を追加します。

   ```
   elasticmapreduce:ListInstances
   ```

1. Amazon EMR クラスターの IAM ロールに次のアクセス許可を追加します。

   ```
   redshift:DescribeClusters
   ```

## ステップ 2: Amazon EMR クラスターを作成する
<a name="load-from-emr-steps-create-cluster"></a>

COPY コマンドでは、Amazon EMR の Hadoop Distributed File System (HDFS) のファイルからデータをロードします。Amazon EMR クラスターを作成する場合には、クラスターの HDFS にデータファイルを出力するようにクラスターを設定する必要があります。

**Amazon EMR クラスターを作成するには**

1. Amazon Redshift クラスターと同じ AWS リージョンに Amazon EMR クラスターを作成します。

   Amazon Redshift クラスターが VPC にある場合、Amazon EMR クラスターも同じ VPC グループにある必要があります。Amazon Redshift クラスターで EC2-Classic モードを使用する (つまり、そのクラスターが VPC にない) 場合は、Amazon EMR クラスターでも EC2 Classic モードを使用する必要があります。詳細については、「*Amazon Redshift 管理ガイド*」の「[仮想プライベートクラウド (VPC) でクラスターを管理する](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-clusters-vpc.html)」を参照してください。

1. クラスターの HDFS にデータファイルを出力するようにクラスターを設定します。HDFS ファイル名にアスタリスク (\$1) と疑問符 (?) は使用できません。
**重要**  
ファイル名にアスタリスク (\$1) と疑問符 (?) は使用できません。

1. COPY コマンドの実行中もクラスターを継続して使用できるように、Amazon EMR クラスター設定の **[Auto-terminate]** (自動終了) オプションで **[No]** (いいえ) を指定します。
**重要**  
COPY が完了する前にデータ ファイルのいずれかが変更または削除されると、予期しない結果を招いたり、COPY 操作が失敗したりする可能性があります。

1. クラスター ID およびメインの公開 DNS (クラスターをホストする Amazon EC2 インスタンスのエンドポイント) を書き留めておいてください。この情報は、後のステップで使用します。

## ステップ 3: Amazon Redshift クラスターの公開キーおよびクラスターノード IP アドレスを取得する
<a name="load-from-emr-steps-retrieve-key-and-ips"></a>

ホストのセキュリティグループに各クラスターノードの IP アドレスを設定し、その IP アドレスで Amazon Redshift クラスターからアクセスできるようにします。

**コンソールを使用して Amazon Redshift クラスター公開キーとクラスターのクラスターノード IP アドレスを取得する方法は、以下のとおりです。**

1. Amazon Redshift マネジメントコンソールにアクセスします。

1. ナビゲーションペインで **[Clusters]** (クラスター) リンクを選択します。

1. リストからクラスターを選択します。

1. [**SSH 取り込み設定**] グループを探します。

   [**クラスターパブリックキー**] と [**ノード IP アドレス**] の内容を書き留めておきます。この 2 つは、後のステップで使用します。  
![\[クラスターのパブリックキーとノードの IP アドレスを示す SSH 取り込み設定グループのスクリーンショット。\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/images/copy-from-ssh-console-2.png)

   このプライベート IP アドレスは、ステップ 3 で Amazon Redshift からの接続を許可するように Amazon EC2 ホストを設定するために使用します。

Amazon Redshift CLI を使用してクラスター公開キーとクラスターノード の IP アドレスを取得するには、describe-clusters コマンドを実行します。例: 

```
aws redshift describe-clusters --cluster-identifier <cluster-identifier> 
```

応答には、以下のような ClusterPublicKey 値とプライベートおよびパブリック IP アドレスのリストが含まれます。

```
{
    "Clusters": [
        {
            "VpcSecurityGroups": [], 
            "ClusterStatus": "available", 
            "ClusterNodes": [
                {
                    "PrivateIPAddress": "10.nnn.nnn.nnn", 
                    "NodeRole": "LEADER", 
                    "PublicIPAddress": "10.nnn.nnn.nnn"
                }, 
                {
                    "PrivateIPAddress": "10.nnn.nnn.nnn", 
                    "NodeRole": "COMPUTE-0", 
                    "PublicIPAddress": "10.nnn.nnn.nnn"
                }, 
                {
                    "PrivateIPAddress": "10.nnn.nnn.nnn", 
                    "NodeRole": "COMPUTE-1", 
                    "PublicIPAddress": "10.nnn.nnn.nnn"
                }
            ], 
            "AutomatedSnapshotRetentionPeriod": 1, 
            "PreferredMaintenanceWindow": "wed:05:30-wed:06:00", 
            "AvailabilityZone": "us-east-1a", 
            "NodeType": "dc2.large", 
            "ClusterPublicKey": "ssh-rsa AAAABexamplepublickey...Y3TAl Amazon-Redshift", 
             ...
             ...
}
```

Amazon Redshift API を使用してクラスターの公開キーとクラスターノード IP アドレスを取得するには、`DescribeClusters` アクションを使用します。詳細については、*Amazon Redshift CLI ガイド*の [describe-clusters](https://docs.aws.amazon.com/cli/latest/reference/redshift/describe-clusters.html) または Amazon Redshift API ガイドの [DescribeClusters](https://docs.aws.amazon.com/redshift/latest/APIReference/API_DescribeClusters.html) を参照してください。

## ステップ 4: 各 Amazon EC2 ホストの承認されたキーファイルに Amazon Redshift クラスターの公開キーを追加する
<a name="load-from-emr-steps-add-key-to-host"></a>

Amazon EMR クラスターノードすべてについて、各ホストの承認されたキーファイルにクラスターの公開キーを追加し、ホストが Amazon Redshift を認識して SSH 接続を許可できるようにします。

**Amazon Redshift クラスターの公開キーをホストの認可されたキーファイルに追加するには**

1. SSH 接続を使用してホストにアクセスします。

   SSH を使用したインスタンスへの接続については、*Amazon EC2 ユーザーガイド*の [インスタンスへの接続](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-connect-to-instance-linux.html)を参照してください。

1. コンソールまたは CLI 応答のテキストから Amazon Redshift の公開キーをコピーします。

1. パブリックキーの内容をコピーして、ホストの `/home/<ssh_username>/.ssh/authorized_keys` ファイルに貼り付けます。プレフィックス "`ssh-rsa`" やサフィックス "`Amazon-Redshift`" も含めた完全な文字列を入力してください。次に例を示します。

   ```
   ssh-rsa AAAACTP3isxgGzVWoIWpbVvRCOzYdVifMrh… uA70BnMHCaMiRdmvsDOedZDOedZ Amazon-Redshift
   ```

## ステップ 5: Amazon Redshift クラスターの IP アドレスすべてを許可するようにホストを設定する
<a name="load-from-emr-steps-configure-security-groups"></a>

 ホストインスタンスへのインバウンドトラフィックを許可するには、セキュリティグループを編集して、Amazon Redshift クラスターノードごとに 1 つのインバウンドルールを追加します。[**タイプ**] として、ポート 22 での TCP プロトコルを使用した SSH を選択します。**[Source]** (ソース) としては、[ステップ 3: Amazon Redshift クラスターの公開キーおよびクラスターノード IP アドレスを取得する](#load-from-emr-steps-retrieve-key-and-ips) で取得した Amazon Redshift クラスターノードのプライベート IP アドレスを入力します。Amazon EC2 セキュリティグループへのルール追加の詳細については、*Amazon EC2 ユーザーガイド*から[インスタンスのインバウンドトラフィックの認可](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/authorizing-access-to-an-instance.html)を参照してください。

## ステップ 6: COPY コマンドを実行してデータをロードする
<a name="load-from-emr-steps-run-copy"></a>

[COPY](r_COPY.md) コマンドを実行して Amazon EMR クラスターに接続し、Amazon Redshift テーブルにデータをロードします。Amazon EMR クラスターは、COPY コマンドが完了するまで稼動している必要があります。例えば、クラスターに対して自動終了は設定しないようにしてください。

**重要**  
COPY が完了する前にデータ ファイルのいずれかが変更または削除されると、予期しない結果を招いたり、COPY 操作が失敗したりする可能性があります。

COPY コマンドでは、Amazon EMR クラスター ID と、HDFS のファイルパスおよびファイル名を指定します。

```
COPY sales
FROM 'emr://myemrclusterid/myoutput/part*' CREDENTIALS 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

ファイル名の引数にはワイルドカード文字としてアスタリスク (`*`) および疑問符 (`?`) を使用できます。例えば、`part*` であれば、`part-0000`、`part-0001` などのファイルがロードされます。COPY コマンドでフォルダー名のみを指定した場合には、フォルダー内のすべてのファイルがロードされます。

**重要**  
ワイルドカード文字を使用する場合や、フォルダー名のみを指定する場合には、フォルダーを確認して不要なファイルがロードされることのないようにしてください。不要なファイルがロードされると、COPY コマンドが失敗します。例えば、一部のプロセスでは出力フォルダにログファイルが書き込まれることがあります。