Apache Spark 用の Amazon Redshift インテグレーションを使用した認証 - Amazon EMR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Apache Spark 用の Amazon Redshift インテグレーションを使用した認証

AWS Secrets Manager を使用して認証情報を取得し、Amazon Redshift に接続する

次のコードサンプルは、 AWS Secrets Manager を使用して、Python の Apache Spark 用の PySpark インターフェイスを使用して Amazon Redshift クラスターに接続するための認証情報を取得する方法を示しています。

from pyspark.sql import SQLContext import boto3 sc = # existing SparkContext sql_context = SQLContext(sc) secretsmanager_client = boto3.client('secretsmanager') secret_manager_response = secretsmanager_client.get_secret_value( SecretId='string', VersionId='string', VersionStage='string' ) username = # get username from secret_manager_response password = # get password from secret_manager_response url = "jdbc:redshift://redshifthost:5439/database?user=" + username + "&password=" + password # Read data from a table df = sql_context.read \ .format("io.github.spark_redshift_community.spark.redshift") \ .option("url", url) \ .option("dbtable", "my_table") \ .option("tempdir", "s3://path/for/temp/data") \ .load()

IAM を使用して認証情報を取得し、Amazon Redshift に接続する

Amazon Redshift が提供する JDBC バージョン 2 ドライバーを使用し、Spark コネクタで Amazon Redshift に接続できます。 AWS Identity and Access Management (IAM) を使用するには、IAM 認証を使用するように JDBC URL を設定します。Amazon EMR から Redshift クラスターに接続するには、IAM ロールに一時的な IAM 認証情報を取得する権限を付与する必要があります。次の権限を IAM ロールに割り当てて、認証情報を取得して Amazon S3 オペレーションを実行できるようにします。

GetClusterCredentials の詳細については、「GetClusterCredentials のリソースポリシー」を参照してください。

また、COPY および UNLOAD オペレーション中に Amazon Redshift が IAM ロールを引き継げるようにする必要があります。

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

以下の例では、Spark と Amazon Redshift の間で IAM 認証を使用しています。

from pyspark.sql import SQLContext import boto3 sc = # existing SparkContext sql_context = SQLContext(sc) url = "jdbc:redshift:iam://redshift-host:redshift-port/db-name" iam_role_arn = "arn:aws:iam::account-id:role/role-name" # Read data from a table df = sql_context.read \ .format("io.github.spark_redshift_community.spark.redshift") \ .option("url", url) \ .option("aws_iam_role", iam_role_arn) \ .option("dbtable", "my_table") \ .option("tempdir", "s3a://path/for/temp/data") \ .mode("error") \ .load()