

# ゼロ ETL 統合を設定するための前提条件
<a name="zero-etl-prerequisites"></a>

ソースとターゲットの統合を設定するには、AWS Glue がソースからデータにアクセスしてターゲットに書き込むために使用する IAM ロールの設定や、中間地点またはターゲットの場所にあるデータを暗号化するための KMS キーの使用など、いくつかの前提条件が必要です。

**Topics**
+ [ソースリソースの設定](#zero-etl-setup-source-resources)
+ [ターゲットリソースの設定](#zero-etl-setup-target-resources)
+ [Amazon Redshift データウェアハウスの作成](#zero-etl-setup-target-redshift-data-warehouse)
+ [ゼロ ETL 統合用の VPC のセットアップ](#zero-etl-setup-vpc)
+ [ゼロ ETL クロスアカウント統合の設定](#zero-etl-setup-cross-account-integration)

## ソースリソースの設定
<a name="zero-etl-setup-source-resources"></a>

ソースの必要に応じて、次のセットアップタスクを実行します。

### ソースロールのセットアップ
<a name="zero-etl-setup-source-role"></a>

このセクションでは、ゼロ ETL 統合が接続にアクセスできるようにソースロールを渡す方法について説明します。これは SaaS ソースにのみ適用されます。

**注記**  
アクセスを少数の接続のみに制限するには、まず接続を作成して接続 ARN を取得します。「[ゼロ ETL 統合のソースの設定](zero-etl-sources.md)」を参照してください。

統合が接続にアクセスするためのアクセス許可を持つロールを作成します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GlueConnections",
            "Effect": "Allow",
            "Action": [
                "glue:GetConnections",
                "glue:GetConnection"
            ],
            "Resource": [
							"arn:aws:glue:*:111122223333:catalog",
							"arn:aws:glue:us-east-1:111122223333:connection/*"
            ]
        },
        {
            "Sid": "GlueActionBasedPermissions",
            "Effect": "Allow",
            "Action": [
                "glue:ListEntities",
                "glue:RefreshOAuth2Tokens"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------

信頼ポリシー:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "glue.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

## ターゲットリソースの設定
<a name="zero-etl-setup-target-resources"></a>

必要に応じて、AWS Glue Data Catalog または Amazon RedshiftA データウェアハウス統合ターゲットに以下のセットアップタスクを実行します。

AWS Glue データベースターゲットとの統合の場合:
+ [AWS Glue データベースのセットアップ](#zero-etl-setup-target-resources-glue-database)
+ [カタログリソースベースアクセス (RBAC) ポリシーの指定](#zero-etl-setup-target-resources-rbac-policy)
+ [ターゲット IAM ロールの作成](#zero-etl-setup-target-resources-target-iam-role)

Amazon Redshift データウェアハウスターゲットとの統合の場合:
+ [https://docs.aws.amazon.com/glue/latest/dg/zero-etl-prerequisites.html#zero-etl-setup-target-redshift-data-warehouse](https://docs.aws.amazon.com/glue/latest/dg/zero-etl-prerequisites.html#zero-etl-setup-target-redshift-data-warehouse)

### AWS Glue データベースのセットアップ
<a name="zero-etl-setup-target-resources-glue-database"></a>

AWS Glue データベースを使用する統合の場合:

Amazon S3 の場所を使用して AWS Glue Data Catalog にターゲットデータベースを設定するには:

1. AWS Glue コンソールのホームページで、[データカタログ] から **[データベース]** を選択します。

1. 右上にある **[データベースを追加]** を選択します。既にデータベースを作成している場合は、Amazon S3 URI がある場所がデータベースに設定されていることを確認してください。

1. 名前と**場所** (Amazon S3 URI) を入力します。ゼロ ETL 統合には場所が必要であることに注意してください。完了したら、**[データベースの作成]** をクリックします。
**注記**  
Amazon S3 バケットは、AWS Glue データベースと同じリージョンに存在する必要があります。

AWS Glue で新しいデータベースを作成する方法については、「[Getting started with the AWS Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/start-data-catalog.htm)」を参照してください。

[https://docs.aws.amazon.com/cli/latest/reference/glue/create-database.html](https://docs.aws.amazon.com/cli/latest/reference/glue/create-database.html) CLI を使用して AWS Glue にデータベースを作成することもできます。`--database-input` の `LocationUri` は必須であることにご注意ください。

#### Iceberg テーブルの最適化
<a name="zero-etl-common-setup-table-optimization"></a>

ターゲットデータベースで AWS Glue によってテーブルが作成されると、圧縮を有効にして Amazon Athena でのクエリを高速化できます。圧縮用のリソース (IAM ロール) の設定については、「[テーブル最適化の前提条件](https://docs.aws.amazon.com/glue/latest/dg/optimization-prerequisites.html)」を参照してください。

統合によって作成された AWS Glue テーブルで圧縮を設定する方法の詳細については、「[Iceberg テーブルの最適化](https://docs.aws.amazon.com/glue/latest/dg/table-optimizers.html)」を参照してください。

### カタログリソースベースアクセス (RBAC) ポリシーの指定
<a name="zero-etl-setup-target-resources-rbac-policy"></a>

AWS Glue データベースを使用する統合の場合、ソースとターゲット間の統合を許可するには、カタログ RBAC ポリシーに次のアクセス許可を追加します。

**注記**  
クロスアカウント統合の場合、Alice (統合を作成するユーザー) ロールポリシーとカタログリソースポリシーの両方がリソースで `glue:CreateInboundIntegration` を許可する必要があります。同じアカウントの場合は、リソースポリシーまたはリソースで `glue:CreateInboundIntegration` を許可するロールポリシーのいずれかで十分です。どちらのシナリオでも、`glue.amazonaws.com` を `glue:AuthorizeInboundIntegration` に許可する必要があります。

**[データカタログ]** から **[カタログの設定]** にアクセスできます。次に、次のアクセス許可を指定し、不足している情報を入力します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Principal": {
        "AWS": [
        	"arn:aws:iam::123456789012:user/Alice"
        ]
      },
      "Effect": "Allow",
      "Action": [
        "glue:CreateInboundIntegration"
      ],
      "Resource": [
      	"arn:aws:glue:us-east-1:111122223333:catalog",
				"arn:aws:glue:us-east-1:111122223333:database/DatabaseName"
      ],
      "Condition": {
        "StringLike": {
        "aws:SourceArn": "arn:aws:dynamodb:us-east-1:444455556666:table/<table-name>"
        }
      }
    },
    {
      "Principal": {
        "Service": [
          "glue.amazonaws.com"
        ]
      },
      "Effect": "Allow",
      "Action": [
        "glue:AuthorizeInboundIntegration"
      ],
      "Resource": [
      	"arn:aws:glue:us-east-1:111122223333:catalog",
				"arn:aws:glue:us-east-1:111122223333:database/DatabaseName"
      ],
      "Condition": {
        "StringEquals": {
        "aws:SourceArn": "arn:aws:dynamodb:us-east-1:444455556666:table/<table-name>"
        }
      }
    }
  ]
}
```

------

### ターゲット IAM ロールの作成
<a name="zero-etl-setup-target-resources-target-iam-role"></a>

以下の許可と信頼関係を持つターゲット IAM ロールを作成します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
            "Effect": "Allow"
        },
        {
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "glue:GetDatabase"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:111122223333:catalog",
                "arn:aws:glue:us-east-1:111122223333:database/DatabaseName"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "glue:CreateTable",
                "glue:GetTable",
                "glue:GetTables",
                "glue:DeleteTable",
                "glue:UpdateTable",
                "glue:GetTableVersion",
                "glue:GetTableVersions",
                "glue:GetResourcePolicy"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:111122223333:catalog",
                "arn:aws:glue:us-east-1:111122223333:database/DatabaseName",
                "arn:aws:glue:us-east-1:111122223333:table/DatabaseName/*"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "cloudwatch:PutMetricData"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "cloudwatch:namespace": "AWS/Glue/ZeroETL"
                }
            },
            "Effect": "Allow"
        },
        {
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
```

------

AWS Glue サービスがロールを引き受けるには、次の信頼ポリシーを追加します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "glue.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

## Amazon Redshift データウェアハウスの作成
<a name="zero-etl-setup-target-redshift-data-warehouse"></a>

ゼロ ETL 統合ターゲットが Amazon Redshift データウェアハウスの場合、データウェアハウスをまだ作成していない場合は作成します。Amazon Redshift Serverless ワークグループを作成するには、「[名前空間を伴うワークグループの作成](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-console-workgroups-create-workgroup-wizard.html)」を参照してください。Amazon Redshift クラスターを作成するには、「[クラスターの作成](https://docs.aws.amazon.com/redshift/latest/mgmt/create-cluster.html)」を参照してください。

正常に統合するには、ターゲットの Amazon Redshift ワークグループまたはクラスターで `enable_case_sensitive_identifier` パラメータが有効になっている必要があります。大文字と小文字の区別を有効にする方法の詳細については、Amazon Redshift 管理ガイドの[「データウェアハウスの大文字と小文字の区別を有効にする](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-setting-up.case-sensitivity.html)」を参照してください。

Amazon Redshift ワークグループまたはクラスターのセットアップが完了したら、データウェアハウスを設定する必要があります。詳細については、Amazon Redshift 管理ガイドの「[ゼロ ETL 統合の開始方法](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.setting-up.html)」を参照してください。

## ゼロ ETL 統合用の VPC のセットアップ
<a name="zero-etl-setup-vpc"></a>

ゼロ ETL 統合用の VPC のセットアップをするには、以下を行います。

1. **[VPC]** > [VPC] で、**[VPC を作成]** を選択します。

   1. **[VPC など]** を選択します。

   1. VPC 名を設定します。

   1. IPv4 CIDR: 10.0.0.0/16 を設定します。

   1. AZ の数を 1 に設定します。

   1. パブリックサブネットとプライベートサブネットの数を 1 に設定します。

   1. **[NAT ゲートウェイ]** を None に設定します。

   1. **[VPC エンドポイント]** を S3 ゲートウェイに設定します。

   1. [DNS ホスト名] と [DNS 解決] を有効にします。

1. **[エンドポイント]** で、**[エンドポイントの作成]** を選択します。

1. VPC のプライベートサブネットにこれらのサービスのエンドポイントを作成します (デフォルトのセキュリティグループを使用します)。

   1. com.amazonaws.us-east-1.lambda

   1. com.amazonaws.us-east-1.glue

   1. com.amazonaws.us-east-1.sts

AWS Glue 接続を作成するには:

1. **AWS Glue** > **[データ接続]** に移動し、**[接続を作成]** を選択します。

1. **[ネットワーク]** を選択します。

1. 作成した VPC、サブネット (プライベート)、デフォルトのセキュリティグループを選択します。

### VPC のターゲットロールの設定
<a name="zero-etl-setup-vpc-target-role"></a>

ターゲットロールには、ゼロ ETL 統合に必要な他のアクセス許可に加えて、以下のアクセス許可が必要です

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CustomerVpc",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateTags",
        "ec2:DeleteTags",
        "ec2:DescribeRouteTables",
        "ec2:DescribeVpcEndpoints",
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeSubnets",
        "ec2:CreateNetworkInterface",
        "ec2:DeleteNetworkInterface",
        "glue:GetConnection"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
```

------

### ターゲットレッグリソースプロパティの設定
<a name="zero-etl-setup-vpc-target-leg"></a>



CLI を使用している場合は、ターゲットレッグリソースプロパティを、作成したターゲット AWS Glue データベースに設定します。ターゲットロール ARN と AWS Glue 接続名を渡します。

```
aws glue create-integration-resource-property \
--resource-arn arn:aws:glue:us-east-1:<account-id>:database/exampletarget \
--target-processing-properties '{"RoleArn" : "arn:aws:iam::<account-id>:role/example-role", "ConnectionName":"example-vpc-3"}' \
--endpoint-url https://example.amazonaws.com --region us-east-1
```

### 発生する可能性のあるクライアントエラー
<a name="zero-etl-setup-vpc-client-errors"></a>

VPC を使用して設定された統合で発生する可能性のあるクライアントエラーは以下のとおりです。


| エラーメッセージ | 必要なアクション | 
| --- | --- | 
| 指定されたロールは、接続時に glue:GetConnection を実行する権限がありません。このアクセス許可をロールポリシーに追加し、統合が復旧するのを待ちます。 | ロールポリシーの更新 | 
| 指定されたロールには、ec2:DescribeSubnets を実行する権限がありません。このアクセス許可をロールポリシーに追加し、統合が復旧するのを待ちます。 | ロールポリシーの更新 | 
| 指定されたロールには、ec2:DescribeSecurityGroups を実行する権限がありません。このアクセス許可をロールポリシーに追加し、統合が復旧するのを待ちます。 | ロールポリシーの更新 | 
| 指定されたロールには、ec2:DescribeVpcEndpoints を実行する権限がありません。このアクセス許可をロールポリシーに追加し、統合が復旧するのを待ちます。 | ロールポリシーの更新 | 
| 指定されたロールには、ec2:DescribeRouteTables を実行する権限がありません。このアクセス許可をロールポリシーに追加し、統合が復旧するのを待ちます。 | ロールポリシーの更新 | 
| 提供されたロールには、ec2:CreateTags を実行する権限がありません。このアクセス許可をロールポリシーに追加し、統合が復旧するのを待ちます。 | ロールポリシーの更新 | 
| 指定されたロールには、ec2:CreateNetworkInterface を実行する権限がありません。このアクセス許可をロールポリシーに追加し、統合が復旧するのを待ちます。 | ロールポリシーの更新 | 
| 指定された接続サブネットには有効な S3 エンドポイントまたは NAT ゲートウェイが含まれていません。サブネットを更新し、統合が復旧するのを待ちます。 | VPC サブネットエンドポイントの更新 | 
| 接続サブネットが見つかりません。接続サブネットを更新し、統合が復旧するのを待ちます。 | AWS Glue 接続の更新 | 
| 接続セキュリティグループが見つかりません。接続セキュリティグループを更新し、統合が復旧するのを待ちます。 | AWS Glue 接続の更新 | 
| 提供された VPC 接続を介して S3 に接続することはできません。サブネット設定を更新し、統合が復旧するのを待ちます。 | VPC サブネットエンドポイントの更新 | 
| 提供された VPC 接続を介して Lambda に接続することはできません。サブネット設定を更新し、統合が復旧するのを待ちます。 | VPC サブネットエンドポイントの更新 | 

## ゼロ ETL クロスアカウント統合の設定
<a name="zero-etl-setup-cross-account-integration"></a>

ゼロ ETL クロスアカウント統合を設定するには:

1. 「[カタログリソースベースアクセス (RBAC) ポリシーの指定](#zero-etl-setup-target-resources-rbac-policy)」の説明に従って、ターゲットリソースポリシーを設定します。ソースアカウントロールがターゲットリソースで明示的に許可されていることを確認します。

1. ソースアカウントロール (統合の作成に使用されるロール) に以下が設定されていることを確認します。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Stmt123456789012",
               "Action": [
                   "glue:CreateInboundIntegration"
               ],
               "Effect": "Allow",
               "Resource": [
               	"arn:aws:glue:us-east-1:111122223333:catalog",
   							"arn:aws:glue:us-east-1:111122223333:database/DatabaseName"
               ]
           }
       ]
   }
   ```

------

1. 「[統合の作成](zero-etl-common-integration-tasks.md#zero-etl-creating)」の説明に従って統合を作成します。