タイトル : redshiftを始めよう localstackを試そう 2024
更新日 : 2024-12-29
カテゴリ : プログラミング
タグ :
aws   
python   
boto3   
postgres   

AWS localstackを試そう 2024

Redshiftって何?

AWSで使えるデータベースは、AWS クラウドのデータベース にあります。

Redshiftは、データベースのタイプ:リレーショナルで、リレーショナルには以下の3つがあります。

  • Amazon Aurora : Postgres、MySQL互換。AWS用になっているRDB

  • Amazon RDS : Postgres、MySQLの各RDB

  • Amazon Redshift : RDBとして、一番手がつけやすい

    Amazon Redshiftには、クラウドデータウェアハウジング向けの最適な料金パフォーマンスとあります。

Amazon Redshift および PostgreSQLによると、

Amazon Redshift は PostgreSQL に基づいています。

とのこと。ただ、データ型のサポートが少ないとか違いがあるので注意するらしい(JSONがないとか)。

言い換えると基本的な型を使えってことかな。つまり、Postgresだと思わずにミニマムなRDBだと思って使うことがRedshiftってことかな。

クラスターって何?

【備忘】Amazon Redshiftの概要 がわかりやすいかな。

クラスターを作って、そのクラスター名でやりとりするだけで、RDBを使います。

クラスターの中の構成とかスケールのことは気にしなくて良い、ということ。

クラスターを作ってみましょう

  • クラスターがないことを確認
$ aws redshift describe-clusters
{
    "Clusters": []
}
$ 
  • AWS CLIでクラスターを作成
$ aws redshift create-cluster --cluster-identifier rscluster --node-type dw.hs1.xlarge --master-username rsmaster --master-user-password rsmaster_pass
{
    "Cluster": {
        "ClusterIdentifier": "rscluster",
        "NodeType": "dw.hs1.xlarge",
        "ClusterStatus": "creating",
        "MasterUsername": "rsmaster",
        "DBName": "dev",
        "Endpoint": {
            "Address": "rscluster.cg034hpkmmjt.ap-northeast-1.redshift.amazonaws.com",
            "Port": 5439
        },
        "ClusterCreateTime": "2024-12-29T00:22:16.063000+00:00",
        "AutomatedSnapshotRetentionPeriod": 1,
        "ClusterSecurityGroups": [
            {
                "ClusterSecurityGroupName": "Default",
                "Status": "active"
            }
        ],
        "VpcSecurityGroups": [],
        "ClusterParameterGroups": [
            {
                "ParameterGroupName": "default.redshift-1.0",
                "ParameterApplyStatus": "in-sync"
            }
        ],
        "ClusterSubnetGroupName": "",
        "AvailabilityZone": "ap-northeast-1a",
        "PreferredMaintenanceWindow": "Mon:03:00-Mon:03:30",
        "PendingModifiedValues": {},
        "ClusterVersion": "1.0",
        "AllowVersionUpgrade": true,
        "NumberOfNodes": 1,
        "PubliclyAccessible": false,
        "Encrypted": false,
        "Tags": [],
        "KmsKeyId": "",
        "EnhancedVpcRouting": false,
        "IamRoles": [],
        "TotalStorageCapacityInMegaBytes": 0
    }
}
$ 
  • boto3でクラスターを確認

ソース

import boto3

# SDK for Python (Boto3) を使用した Amazon Redshift の例
# https://docs.aws.amazon.com/ja_jp/code-library/latest/ug/python_3_redshift_code_examples.html
# より


def hello_redshift(redshift_client):
    """
    Use the AWS SDK for Python (Boto3) to create an Amazon Redshift client and list
    the clusters in your account. This list might be empty if you haven't created
    any clusters.
    This example uses the default settings specified in your shared credentials
    and config files.

    :param redshift_client: A Boto3 Redshift Client object.
    """
    print("Hello, Redshift! Let's list your clusters:")
    paginator = redshift_client.get_paginator("describe_clusters")
    clusters = []
    for page in paginator.paginate():
        clusters.extend(page["Clusters"])

    print(f"{len(clusters)} cluster(s) were found.")

    for cluster in clusters:
        print(f"  {cluster['ClusterIdentifier']}")


if __name__ == "__main__":
    hello_redshift(boto3.client("redshift"))

実行例

$ python get_cluster1.py 
Hello, Redshift! Let's list your clusters:
1 cluster(s) were found.
  rscluster
$