amazon-web-services - AWS : How to programmatically create a RDS Aurora Cluster in Python/Boto3

标签 amazon-web-services amazon-rds boto3 amazon-aurora

我的应用程序托管在 Amazon Web Services 上,我开始编写应用程序所有基础设施(VPC、安全组、Beanstalk 等)的创建脚本。我没有找到创建 RDS Aurora 集群的正确方法,并且无法使用 Boto3 在 Python 中重现 RDS 向导(帮助您创建数据库实例和集群)。也许我缺乏基础设施和网络方面的知识,但我认为创建 Aurora 集群对我来说一定是可以的。

这是我的问题: 假设我有一个 VPC ID、一个安全组 ID 和一些数据库信息(用户、密码...),创建集群并使其可供我的应用程序使用的最少 API 调用是什么?该过程必须以集群读取器/写入器端点和仅读取器端点结束。

最佳答案

以下是我如何在 Python/BOTO3 中创建 Aurora MySQL 实例。你必须自己实现一些缺失的功能。

def create_aurora(
    instance_identifier, # used for instance name and cluster name
    db_username,
    db_password,
    db_name,
    db_port,
    vpc_id,
    vpc_sg, # Must be an array
    dbsubnetgroup_name,
    public_access = False,
    AZ = None,
    instance_type = "db.t2.small",
    multi_az = True,
    nb_instance = 1,
    extratags = []
):
    rds = boto3.client('rds')
    # Assume a DB SUBNET Groups exists before creating the cluster. You must have created a DBSUbnetGroup associated to the Subnet of the VPC of your cluster. AWS will find it automatically.

    # 
    # Search if the cluster exists
    try:    
        db_cluster = rds.describe_db_clusters(
            DBClusterIdentifier = instance_identifier
        )['DBClusters']    
        db_cluster = db_cluster[0]
    except botocore.exceptions.ClientError   as e:
        psa.printf("Creating empty cluster\r\n");
        res = rds.create_db_cluster(
            DBClusterIdentifier = instance_identifier,
            Engine="aurora",
            MasterUsername=db_username,
            MasterUserPassword=db_password,
            DBSubnetGroupName=dbsubnetgroup_name,
            VpcSecurityGroupIds=vpc_sg,
            AvailabilityZones=AZ
        )
        db_cluster = res['DBCluster']


    cluster_name = db_cluster['DBClusterIdentifier']
    instance_identifier = db_cluster['DBClusterIdentifier']
    psa.printf("Cluster identifier : %s, status : %s, members : %d\n", instance_identifier , db_cluster['Status'], len(db_cluster['DBClusterMembers']))
    if (db_cluster['Status'] == 'deleting'):
        psa.printf(" Please wait for the cluster to be deleted and try again.\n")
        return None
    psa.printf("   Writer Endpoint : %s\n", db_cluster['Endpoint'])
    psa.printf("   Reader Endpoint : %s\n", db_cluster['ReaderEndpoint'])
    # Now create instances
    # Loop on requested number of instance, and balance them on AZ
    for i in range(1, nb_instance+1):
        if AZ != None:
            the_AZ = AZ[i -1 % len(AZ)]
            dbinstance_id = instance_identifier+"-"+str(i)+"-"+the_AZ
        else:
            the_AZ = None
            dbinstance_id = instance_identifier+"-"+str(i)
        psa.printf("Creating instance %d named '%s' in AZ %s\n", i, dbinstance_id, the_AZ)

        try:
            res = rds.create_db_instance(
                DBInstanceIdentifier=dbinstance_id,
                DBInstanceClass=instance_type,
                Engine='aurora',
                PubliclyAccessible=False,
                AvailabilityZone=the_AZ,
                DBSubnetGroupName=dbsubnetgroup_name,
                DBClusterIdentifier=instance_identifier,
                Tags = psa.tagsKeyValueToAWStags(extratags)
            )['DBInstance']
            psa.printf(" DbiResourceId=%s\n", res['DbiResourceId'])

        except botocore.exceptions.ClientError   as e:
            psa.printf(" Instance seems to exists.\n")
            res = rds.describe_db_instances(DBInstanceIdentifier = dbinstance_id)['DBInstances']
            psa.printf(" Status is %s\n", res[0]['DBInstanceStatus'])
    return db_cluster

关于amazon-web-services - AWS : How to programmatically create a RDS Aurora Cluster in Python/Boto3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43854880/

相关文章:

MariaDB 不会让我使列独一无二

python - AWS Python boto3 描述所有区域的所有实例并输出到 CSV

amazon-web-services - 从 CloudFormation 模板生成代码(java、python 等)

java - 使用log4j2在AWS日志中记录垃圾值

amazon-web-services - 将 AWS 架构图标导入 Google 幻灯片

mysql - 监控 AWS RDS 实例

postgresql - Postgres 角色和用户 - 表的权限被拒绝

python - boto3 列出与 ec2 实例关联的安全组

amazon-web-services - 如何在 Amazon Redshift 上执行预定的 SQL 脚本?

amazon-web-services - 属性投影不能为空