以下是一组步骤,可用于解决 AWS Glue 与 Snowflake 连接问题:
在 IAM 控制台上,确保已在 AWS Glue 根据实际情况创建了一个 IAM 角色。至少应该有 AWSServiceRoleForAWSGlueService 和 Snowflake 粘合剂 Snowflake Connector 权限。您可以使用以下代码示例创建 IAM 角色。
aws iam create-role --role-name my-glue-snowflake-role --assume-role-policy-document file://trustpolicyforec2.json
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/service-role/AWSServiceRoleForAWSGlueService --role-name my-glue-snowflake-role
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess --role-name my-glue-snowflake-role
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess --role-name my-glue-snowflake-role
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/PowerUserAccess --role-name my-glue-snowflake-role
您还需要在 Snowflake 中创建具有必要权限的 Snowflake 用户。有关如何创建 Snowflake 用户的信息,请参见 Snowflake 文档。
创建 AWS Glue 作业时切换到启用 VPC。确保 VPC 中的所有 SG 都包含 Snowflake 部分的入站/出站规则。
请使用以下代码示例手动连接到 Snowflake。
import boto3
from awsglue.dynamicframe import DynamicFrame
from awsglue.context import GlueContext
from pyspark.context import SparkContext
from pyspark.sql.functions import col
from awsglue.job import Job
from awsglue.transforms import *
sc = SparkContext()
glueContext = GlueContext(sc)
job = Job(glueContext)
snowflakeSource = glueContext.create_dynamic_frame.from_options(
'snowflake',
connection_options={
'url': 'jdbc:snowflake://..snowflakecomputing.com/',
'user': '',
'password': '',
'dbtable': '.