1. 从 Google Cloud 下载服务帐号凭据 JSON 文件

1.1. 点击IAM和管理->服务账号,进入服务账号管理页面

1.2. 选择账号,进入密钥管理

1.3. 创建新密钥,选择json类型,点击创建后,会自动下载json格式的密钥文件到本机。

1.4. 对密钥文件进行base64编码

若为windows机器,请使用在线工具进行编码

若为Linux 和 Mac,您可以使用将文件内容打印为 base64 编码的字符串。

执行base64 service_account_json_file.json,将打印出来的内容复制到文本中,注意删除换行符。

2. 获取GoogleCloud的项目ID

点击项目名称,获取对应项目ID,保存以备用。

3. 使用AWS Secrets Manager管理密钥bigquery_credentials_poc

使用Secrets Manager 控制台,创建密钥,选择其它类型密钥,键输入:credentials,值输入使用base64编码后的字符串

输入密钥名称:bigquery_credentials_poc,其它选项默认填写,点击存储生成密钥。

在密钥列表,点击bigquery_credentials_poc,打开详情信息,复制密钥ARN以备用。

arn:aws:secretsmanager:us-west-2:260527533511:secret:bigquery_credentials_poc-wCHyT3

4. 创建S3桶s3-redshift-glue

4.1. 选择AWS区域(东京)创建S3桶s3-redshift-glue,不开放公有访问权限。

复制的s3-redshift-glue的arn以备用。arn:aws:s3:::s3-redshift-glue

4.2. 在S3桶s3-redshift-glue中创建存放数据的文件夹

文件夹名称可根据要导出的表名进行创建。此次创建文件夹311_service_requests。

5. 创建策略policy_secrets_s3

使用以下json创建策略policy_secrets_s3,允许访问密钥bigquery_credentials_poc,S3桶s3-redshift-glue。

{

    “Version”: “2012-10-17”,

    “Statement”: [

        {

            “Sid”: “GetDescribeSecret”,

            “Effect”: “Allow”,

            “Action”: [

                “secretsmanager:GetResourcePolicy”,

                “secretsmanager:GetSecretValue”,

                “secretsmanager:DescribeSecret”,

                “secretsmanager:ListSecretVersionIds”

            ],

            “Resource”: “arn:aws:secretsmanager:us-west-2:260527533511:secret:bigquery_credentials_poc-wCHyT3”

        },

        {

            “Sid”: “S3Policy”,

            “Effect”: “Allow”,

            “Action”: [

                “s3:GetBucketLocation”,

                “s3:ListBucket”,

                “s3:GetBucketAcl”,

                “s3:GetObject”,

                “s3:PutObject”,

                “s3:DeleteObject”

            ],

            “Resource”: [

                “arn:aws:s3:::s3-redshift-glue”,

                “arn:aws:s3:::s3-redshift-glue/*”

            ]

        }

    ]

}

6. 创建IAM角色roleGlueBigqueryS3

创建角色roleGlueBigqueryS3,受信任实体类型选择Glue,添加以下三个策略:

7. 使用AWS Marketplace订阅 AWS Glue Connector for Google BigQuery

7.1. 点击了解产品,搜索 AWS Glue Connector for Google BigQuery

7.2. 选择继续订阅

7.3. 查看条款和条件、定价和其他详细信息

7.4. 选择继续配置

7.5. 对于Fulfillment option,选择您的交付方式;对于Software version,选择您的软件版本,然后选择继续启动

7.6. 在使用说明下,选择在 AWS Glue Studio 中激活 Glue 连接器

7.7. 创建glue connectors:bigquery

输入连接的名称bigquery,密钥文件选择bigquery_credentials_poc

8. 在 AWS Glue Studio 中创建 ETL 作业

8.1. 创建job

  • 在 Glue Studio 上,选择Jobs。
  • 对于源,选择AWS Glue Connector for Google BigQuery。
  • 对于目标,选择S3。
  • 点击创建。

8.2. 删除ApplyMapping

选中ApplyMapping并删除它。

8.3. 配置AWS Glue Connector…

8.3.1. 连接选择bigguery。
8.3.2. 在连接选项添加以下键值
  • 键: parentProject,值: <<google_project_id>> #第步骤2中获取的项目ID
  • 键: table,值:bigquery-public-data.austin_311.311_service_requests #bigquery中表名

8.4. 配置S3

8.4.1. 选中S3 bucket,选择导出到S3的数据格式,此次POC验证选择JSON
8.4.2. 选择压缩类型
8.4.3. 指定 S3 目标位置

8.5. 配置Job_details

  • 输入Name:Glue_BigQuery_S3
  • 选择IAM Role:roleGlueBigqueryS3   #为步骤6中创建的角色
  • 选择类型:Spark
  • 选择Glue version:Glue 2.0 – Supports Spark 2.4, Scala 2, Python3
  • 其余选项保留为默认值,点击Save保存

9. 运行ETL作业Job

9.1. 点击详情中右上角Run,运行作业

9.2. 点击Runs,查看执行情况

9.3. 执行成功后查看S3桶中文件

9.4. 下载文件,查看文件格式

10. 总结

至此,使用glue自定义规则从BigQuery同步数据到S3桶已完成,若需要将数据加载到redshift,请在redshift中创建对应表,再使用copy命令导入S3数据到表中。详细操作请见上一份POC文档《Redshift测试工作截图》。