0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Redshift のウェアハウスに対する外部からPythonでデータ書き込み方法とIAM権限設定

Last updated at Posted at 2025-04-20

概要

主要クラウドデータウェアハウス(Snowflake、Microsoft Fabric、AWS Redshift、Google Cloud Bigquery)へのPythonからのデータ書き込み手法比較 で紹介したAWS Redshiftのウェアハウスに対する外部からPythonでデータ書き込み方法に関する補足に関する記事となる.

AWS Redshift に外部システム(例:ETLツールやスクリプトなど)からデータを書き込むには,適切な IAM 権限の設定が必要となる.本記事では,AWS マネジメントコンソール上で実施すべき IAM の設定手順を解説する.


1. アクセスキーの作成

外部システムから AWS にアクセスするには,アクセスキー(Access Key ID / Secret Access Key)の作成が必要である.

手順:

IAM > ユーザ > セキュリティ認証情報 > アクセスキー の順に遷移し,新しいアクセスキーを作成する.

image.png

アクセスキーは一度しか表示されないため,必ずダウンロードし安全に保管すること.


2. IAM ポリシーの付与

Redshift へのアクセスや他の AWS リソース操作を許可するためには,ユーザーまたはユーザーグループに対して適切な IAM ポリシーを付与する必要がある.

手順:

IAM > ユーザグループ > 許可 > 許可を追加 より,AWSCostAndUsageReportAutomationPolicy を追加する.

image.png

必要に応じて AmazonRedshiftFullAccess やカスタムポリシーを使用してもよい.


3. ユーザーのユーザーグループへの追加

ポリシーが適用されるように,対象の IAM ユーザーをユーザーグループへ追加する.

手順:

IAM > ユーザグループ > ユーザ > 必要なユーザの追加 を選択する.

image.png


4. Redshift クラスター情報の確認

Python コードで Redshift に接続するには,以下の 2 つの情報が必要である.

  • REDSHIFT_ENDPOINT:クラスターのエンドポイント(JDBC 接続先)
  • REDSHIFT_CLUSTER_ID:クラスター ID(Boto3 経由で一時認証情報を取得する際に必要)

これらの情報は,AWS マネジメントコンソールの Redshift クラスター画面から確認できる.


① Redshift クラスターの一覧画面を開く

AWS 管理コンソールで「Amazon Redshift」を検索し,左メニューの「クラスター」から対象のクラスターを選択する.


② クラスター詳細からエンドポイントを確認

クラスター詳細ページに移動すると,「エンドポイント」欄に REDSHIFT_ENDPOINT が表示されている.以下のような形式である:

image.png

5. 接続確認

IAM 設定後は,外部システム(AWS CLI,SDK,ETLツールなど)から Redshift に対し,正常に接続および書き込みができることを確認する.IAM 設定が完了した後,実際に Redshift にデータを書き込むことで接続確認を行うことができる.以下は Python による簡易な接続およびデータ書き込みのサンプルコードである.

import boto3
import psycopg2
from psycopg2.extras import execute_values

# Redshift クラスター情報
host = '<REDSHIFT_ENDPOINT>'
port = 5439
dbname = 'dev'
cluster_id = '<REDSHIFT_CLUSTER_ID>'
region = 'us-east-1'
db_user = 'awsuser'

# AWS 認証情報
aws_access_key = '<AWS_ACCESS_KEY_ID>'
aws_secret_key = '<AWS_SECRET_ACCESS_KEY>'

# スキーマとテーブル
schema = 'demo_schema'
table = 'sample_data'

# Boto3 経由で一時認証情報を取得
client = boto3.client(
    'redshift',
    region_name=region,
    aws_access_key_id=aws_access_key,
    aws_secret_access_key=aws_secret_key
)

credentials = client.get_cluster_credentials(
    DbUser=db_user,
    DbName=dbname,
    ClusterIdentifier=cluster_id,
    DurationSeconds=3600
)

# psycopg2 を用いて Redshift に接続
conn = psycopg2.connect(
    host=host,
    port=port,
    dbname=dbname,
    user=credentials['DbUser'],
    password=credentials['DbPassword'],
    sslmode='require'
)

cur = conn.cursor()

# テーブル作成(存在しない場合のみ)
cur.execute(f"""
CREATE SCHEMA IF NOT EXISTS {schema};
CREATE TABLE IF NOT EXISTS {schema}.{table} (
    id INT IDENTITY(1,1),
    name VARCHAR(100),
    age INT
)
""")
conn.commit()

# データ挿入
data = [('Alice', 30), ('Bob', 25)]
execute_values(
    cur,
    f"INSERT INTO {schema}.{table} (name, age) VALUES %s",
    data
)
conn.commit()

# 挿入確認
cur.execute(f"SELECT * FROM {schema}.{table} LIMIT 5")
for row in cur.fetchall():
    print(row)

cur.close()
conn.close()

まとめ

ステップ 内容
1 アクセスキーの作成
2 IAM ポリシーの追加
3 ユーザーをグループに追加
4 接続確認

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?