# 练习 7-3:将 CSV 数据从 Amazon S3 存储桶导入 TiDB Cloud

## 概述
+ 在本练习中,您将从 Amazon S3 存储桶导入 CSV 数据到 TiDB Cloud 集群。

## 注意事项:
+ 在此任务之前,请确保您可以使用 AWS S3 并在存储段中存放示例 CSV 数据文件。

## 持续时间
+ 完成此练习大约需要 15 分钟。

## 任务
1. 获取 `TiDB Cloud Account ID` 和 `TiDB Cloud External ID`。
2. 为 Amazon S3 存储桶创建访问策略。
3. 为 TiDB Cloud 创建访问角色。
4. 将 CSV 数据导入 TiDB Cloud 集群

## 解决方案步骤
1. 在 `Clusters` 页面上,点击集群的名称,进入该集群的 `Overview` 页面。
<img src="./diagram/GoDedicatedTierOverview_aa_001_20230111.png" width="50%" align="top"/>

2. 在左侧导航窗格中单击 `Import`。 

3. 在 `Import` 页面上,点击 `import data from S3`。如果您的集群是 `Dedicated Tier`,点击 `Import Data`；如果您的集群是 `Serverless Tier`,点击 `Import Data`。

4. 单击 `Guide for getting the required Role-ARN` 获取集群的 `TiDB Cloud account ID` 和 `TiDB Cloud External ID`。
<img src="./diagram/ch09-2-02.png" width="50%" align="top"/>


5. 打开 [Amazon S3 控制台](https://console.aws.amazon.com/s3/) 然后点击 `Buckets`。
<img src="./diagram/ch09-2-03.png" width="50%" align="top"/>
  
6. 单击 `Copy ARN` 获取您的 S3 存储桶 ARN。
<img src="./diagram/ch09-2-04.png" width="50%" align="top"/>

7. 打开 [IAM 控制台](https://console.aws.amazon.com/iam/) 然后点击 `Policies`。
<img src="./diagram/ch09-2-05.png" width="50%" align="top"/>

8. 单击 `Create Policy`。
<img src="./diagram/ch09-2-06.png" width="50%" align="top"/>

9. 在 `Create policy` 页面上,您可以选择点击 `Visual editor` 选项卡或点击 `JSON` 选项卡。
<img src="./diagram/ch09-2-07.png" width="50%" align="top"/>

如果您选择 `JSON` 选项卡来创建访问策略,则可以参考以下模板。
<img src="./diagram/ch09-2-08.png" width="50%" align="top"/>

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": "<Your S3 bucket ARN>/universe-csv/*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "<Your S3 bucket ARN>"
        }
    ]
}
```
  
10. 点击 `Next:Tags`,添加标签,然后单击 `Next:Review`。
<img src="./diagram/ch09-2-09.png" width="50%" align="top"/>
    
11. 在下一页上设置策略 `Name` 和 `Description` ,然后点击 `Create policy`。
<img src="./diagram/ch09-2-10.png" width="50%" align="top"/>
 

12. 打开 [IAM 控制台](https://console.aws.amazon.com/iam/),然后点击 `Roles`。
<img src="./diagram/ch09-2-11.png" width="50%" align="top"/>

13. 单击 `Create role`。
<img src="./diagram/ch09-2-12.png" width="50%" align="top"/>
  
14. 在 `Trusted entity type` 部分中,选择 `AWS account`。接下来,在 `An AWS account` 部分中选择 `Another AWS account`,然后在 `Account ID` 中输入 `TiDB Cloud account ID`。在 `Options` 部分中,点击 `Require external ID (Best practice when a third party will assume this role)`,然后在 `External ID` 中输入 `TiDB Cloud External ID`。单击 `Next`。
<img src="./diagram/ch09-2-13.png" width="50%" align="top"/>

15. 为角色选择策略,然后点击 `Next`。
<img src="./diagram/ch09-2-14.png" width="50%" align="top"/>

16. 在 `Role details` 部分中,设置 `Role name` 和 `Description`,然后点击 `Create role`。
<img src="./diagram/ch09-2-15.png" width="50%" align="top"/>

17. 在 `Roles` 页面上,点击刚才创建的角色的名称。
<img src="./diagram/ch09-2-16.png" width="50%" align="top"/>

18. 注意 `ARN` 的值。把这个写下来,你以后会需要的。
<img src="./diagram/ch09-2-17.png" width="50%" align="top"/>


19. 返回 [TiDB Cloud 控制台](https://tidbcloud.com/console/clusters),点击集群名称进入集群的 `Overview` 页面。
<img src="./diagram/GoDedicatedTierOverview_aa_001_20230111.png" width="50%" align="top"/>

20. 在左侧导航窗格中单击 `Import`。

21. 在 `Import` 页面上,点击 `import data from S3`。如果您的集群是 `Dedicated Tier`,点击 `Import Data`；如果您的集群是 `Serverless Tier`,点击 `Import Data`。

22. 在 `Source` 部分,在 `Data format` 部分中选择 `CSV`,然后填写示例 `CSV` 数据的 `Bucket URI`,然后输入你刚才得到的 `Role ARN`。单击 `Next`。
<img src="./diagram/ImportCSVData_aa_001_20230202.png" width="50%" align="top"/>

23. 在下一页上,修改文件模式并根据需要添加表筛选规则,然后点击 `Next`。
<img src="./diagram/ModifyPatternsAndAddFilter_aa_001_20230202.png" width="50%" align="top"/>

24. 在 `Preview` 页面上,确认要导入的数据,然后点击 `Start Import`。
<img src="./diagram/Preview_aa_001_20230202.png" width="50%" align="top"/>

25. 等待您的数据导入完成。
<img src="./diagram/WaitCSVImport_aa_001_20230202.png" width="50%" align="top"/>

26. 连接 TiDB Cloud 集群并验证数据是否已导入。
<img src="./diagram/ch09-2-21.png" width="50%" align="top"/>