Coder Social home page Coder Social logo

terraform-aws-modules / terraform-aws-rds-aurora Goto Github PK

View Code? Open in Web Editor NEW
378.0 22.0 552.0 3.19 MB

Terraform module to create AWS RDS Aurora resources ๐Ÿ‡บ๐Ÿ‡ฆ

Home Page: https://registry.terraform.io/modules/terraform-aws-modules/rds-aurora/aws

License: Apache License 2.0

HCL 100.00%
aws rds-aurora terraform-module rds

terraform-aws-rds-aurora's Introduction

AWS RDS Aurora Terraform module

Terraform module which creates AWS RDS Aurora resources.

SWUbanner

Available Features

  • Autoscaling of read-replicas
  • Global cluster
  • Enhanced monitoring
  • Serverless cluster (v1 and v2)
  • Import from S3
  • Fine grained control of individual cluster instances
  • Custom endpoints
  • RDS multi-AZ support (not Aurora)

Usage

module "cluster" {
  source  = "terraform-aws-modules/rds-aurora/aws"

  name           = "test-aurora-db-postgres96"
  engine         = "aurora-postgresql"
  engine_version = "14.5"
  instance_class = "db.r6g.large"
  instances = {
    one = {}
    2 = {
      instance_class = "db.r6g.2xlarge"
    }
  }

  vpc_id               = "vpc-12345678"
  db_subnet_group_name = "db-subnet-group"
  security_group_rules = {
    ex1_ingress = {
      cidr_blocks = ["10.20.0.0/20"]
    }
    ex1_ingress = {
      source_security_group_id = "sg-12345678"
    }
  }

  storage_encrypted   = true
  apply_immediately   = true
  monitoring_interval = 10

  enabled_cloudwatch_logs_exports = ["postgresql"]

  tags = {
    Environment = "dev"
    Terraform   = "true"
  }
}

Cluster Instance Configuration

There are a couple different configuration methods that can be used to create instances within the cluster:

โ„น๏ธ Only the pertinent attributes are shown for brevity

  1. Create homogenous cluster of any number of instances
  • Resources created:
    • Writer: 1
    • Reader(s): 2
  instance_class = "db.r6g.large"
  instances = {
    one   = {}
    two   = {}
    three = {}
  }
  1. Create homogenous cluster of instances w/ autoscaling enabled. This is redundant and we'll show why in the next example.
  • Resources created:
    • Writer: 1
    • Reader(s):
      • At least 4 readers (2 created directly, 2 created by appautoscaling)
      • At most 7 reader instances (2 created directly, 5 created by appautoscaling)

โ„น๏ธ Autoscaling uses the instance class specified by instance_class.

  instance_class = "db.r6g.large"
  instances = {
    one   = {}
    two   = {}
    three = {}
  }

  autoscaling_enabled      = true
  autoscaling_min_capacity = 2
  autoscaling_max_capacity = 5
  1. Create homogeneous cluster scaled via autoscaling. At least one instance (writer) is required
  • Resources created:
    • Writer: 1
    • Reader(s):
      • At least 1 reader
      • At most 5 readers
  instance_class = "db.r6g.large"
  instances = {
    one = {}
  }

  autoscaling_enabled      = true
  autoscaling_min_capacity = 1
  autoscaling_max_capacity = 5
  1. Create heterogenous cluster to support mixed-use workloads

    It is common in this configuration to independently control the instance promotion_tier paired with endpoints to create custom endpoints directed at select instances or instance groups.

  • Resources created:
    • Writer: 1
    • Readers: 2
  instance_class = "db.r5.large"
  instances = {
    one = {
      instance_class      = "db.r5.2xlarge"
      publicly_accessible = true
    }
    two = {
      identifier     = "static-member-1"
      instance_class = "db.r5.2xlarge"
    }
    three = {
      identifier     = "excluded-member-1"
      instance_class = "db.r5.large"
      promotion_tier = 15
    }
  }
  1. Create heterogenous cluster to support mixed-use workloads w/ autoscaling enabled
  • Resources created:
    • Writer: 1
    • Reader(s):
      • At least 3 readers (2 created directly, 1 created through appautoscaling)
      • At most 7 readers (2 created directly, 5 created through appautoscaling)

โ„น๏ธ Autoscaling uses the instance class specified by instance_class.

  instance_class = "db.r5.large"
  instances = {
    one = {
      instance_class      = "db.r5.2xlarge"
      publicly_accessible = true
    }
    two = {
      identifier     = "static-member-1"
      instance_class = "db.r5.2xlarge"
    }
    three = {
      identifier     = "excluded-member-1"
      instance_class = "db.r5.large"
      promotion_tier = 15
    }
  }

  autoscaling_enabled      = true
  autoscaling_min_capacity = 1
  autoscaling_max_capacity = 5

Conditional Creation

The following values are provided to toggle on/off creation of the associated resources as desired:

# This RDS cluster will not be created
module "cluster" {
  source  = "terraform-aws-modules/rds-aurora/aws"

  # Disable creation of cluster and all resources
  create = false

  # Disable creation of subnet group - provide a subnet group
  create_db_subnet_group = false

  # Disable creation of security group - provide a security group
  create_security_group = false

  # Disable creation of monitoring IAM role - provide a role ARN
  create_monitoring_role = false

  # ... omitted
}

Examples

  • Autoscaling: A PostgreSQL cluster with enhanced monitoring and autoscaling enabled
  • Global Cluster: A PostgreSQL global cluster with clusters provisioned in two different region
  • Multi-AZ: A multi-AZ RDS cluster (not using Aurora engine)
  • MySQL: A simple MySQL cluster
  • PostgreSQL: A simple PostgreSQL cluster
  • S3 Import: A MySQL cluster created from a Percona Xtrabackup stored in S3
  • Serverless: Serverless V1 and V2 (PostgreSQL and MySQL)

Documentation

Terraform documentation is generated automatically using pre-commit hooks. Follow installation instructions here.

Requirements

Name Version
terraform >= 1.0
aws >= 5.42

Providers

Name Version
aws >= 5.42

Modules

No modules.

Resources

Name Type
aws_appautoscaling_policy.this resource
aws_appautoscaling_target.this resource
aws_cloudwatch_log_group.this resource
aws_db_parameter_group.this resource
aws_db_subnet_group.this resource
aws_iam_role.rds_enhanced_monitoring resource
aws_iam_role_policy_attachment.rds_enhanced_monitoring resource
aws_rds_cluster.this resource
aws_rds_cluster_activity_stream.this resource
aws_rds_cluster_endpoint.this resource
aws_rds_cluster_instance.this resource
aws_rds_cluster_parameter_group.this resource
aws_rds_cluster_role_association.this resource
aws_secretsmanager_secret_rotation.this resource
aws_security_group.this resource
aws_security_group_rule.this resource
aws_iam_policy_document.monitoring_rds_assume_role data source
aws_partition.current data source

Inputs

Name Description Type Default Required
allocated_storage The amount of storage in gibibytes (GiB) to allocate to each DB instance in the Multi-AZ DB cluster. (This setting is required to create a Multi-AZ DB cluster) number null no
allow_major_version_upgrade Enable to allow major engine version upgrades when changing engine versions. Defaults to false bool false no
apply_immediately Specifies whether any cluster modifications are applied immediately, or during the next maintenance window. Default is false bool null no
auto_minor_version_upgrade Indicates that minor engine upgrades will be applied automatically to the DB instance during the maintenance window. Default true bool null no
autoscaling_enabled Determines whether autoscaling of the cluster read replicas is enabled bool false no
autoscaling_max_capacity Maximum number of read replicas permitted when autoscaling is enabled number 2 no
autoscaling_min_capacity Minimum number of read replicas permitted when autoscaling is enabled number 0 no
autoscaling_policy_name Autoscaling policy name string "target-metric" no
autoscaling_scale_in_cooldown Cooldown in seconds before allowing further scaling operations after a scale in number 300 no
autoscaling_scale_out_cooldown Cooldown in seconds before allowing further scaling operations after a scale out number 300 no
autoscaling_target_connections Average number of connections threshold which will initiate autoscaling. Default value is 70% of db.r4/r5/r6g.large's default max_connections number 700 no
autoscaling_target_cpu CPU threshold which will initiate autoscaling number 70 no
availability_zones List of EC2 Availability Zones for the DB cluster storage where DB cluster instances can be created. RDS automatically assigns 3 AZs if less than 3 AZs are configured, which will show as a difference requiring resource recreation next Terraform apply list(string) null no
backtrack_window The target backtrack window, in seconds. Only available for aurora engine currently. To disable backtracking, set this value to 0. Must be between 0 and 259200 (72 hours) number null no
backup_retention_period The days to retain backups for number null no
ca_cert_identifier The identifier of the CA certificate for the DB instance string null no
cloudwatch_log_group_kms_key_id The ARN of the KMS Key to use when encrypting log data string null no
cloudwatch_log_group_retention_in_days The number of days to retain CloudWatch logs for the DB instance number 7 no
cluster_members List of RDS Instances that are a part of this cluster list(string) null no
cluster_tags A map of tags to add to only the cluster. Used for AWS Instance Scheduler tagging map(string) {} no
cluster_timeouts Create, update, and delete timeout configurations for the cluster map(string) {} no
cluster_use_name_prefix Whether to use name as a prefix for the cluster bool false no
copy_tags_to_snapshot Copy all Cluster tags to snapshots bool null no
create Whether cluster should be created (affects nearly all resources) bool true no
create_cloudwatch_log_group Determines whether a CloudWatch log group is created for each enabled_cloudwatch_logs_exports bool false no
create_db_cluster_activity_stream Determines whether a cluster activity stream is created. bool false no
create_db_cluster_parameter_group Determines whether a cluster parameter should be created or use existing bool false no
create_db_parameter_group Determines whether a DB parameter should be created or use existing bool false no
create_db_subnet_group Determines whether to create the database subnet group or use existing bool false no
create_monitoring_role Determines whether to create the IAM role for RDS enhanced monitoring bool true no
create_security_group Determines whether to create security group for RDS cluster bool true no
database_name Name for an automatically created database on cluster creation string null no
db_cluster_activity_stream_kms_key_id The AWS KMS key identifier for encrypting messages in the database activity stream string null no
db_cluster_activity_stream_mode Specifies the mode of the database activity stream. Database events such as a change or access generate an activity stream event. One of: sync, async string null no
db_cluster_db_instance_parameter_group_name Instance parameter group to associate with all instances of the DB cluster. The db_cluster_db_instance_parameter_group_name is only valid in combination with allow_major_version_upgrade string null no
db_cluster_instance_class The compute and memory capacity of each DB instance in the Multi-AZ DB cluster, for example db.m6g.xlarge. Not all DB instance classes are available in all AWS Regions, or for all database engines string null no
db_cluster_parameter_group_description The description of the DB cluster parameter group. Defaults to "Managed by Terraform" string null no
db_cluster_parameter_group_family The family of the DB cluster parameter group string "" no
db_cluster_parameter_group_name The name of the DB cluster parameter group string null no
db_cluster_parameter_group_parameters A list of DB cluster parameters to apply. Note that parameters may differ from a family to an other list(map(string)) [] no
db_cluster_parameter_group_use_name_prefix Determines whether the DB cluster parameter group name is used as a prefix bool true no
db_parameter_group_description The description of the DB parameter group. Defaults to "Managed by Terraform" string null no
db_parameter_group_family The family of the DB parameter group string "" no
db_parameter_group_name The name of the DB parameter group string null no
db_parameter_group_parameters A list of DB parameters to apply. Note that parameters may differ from a family to an other list(map(string)) [] no
db_parameter_group_use_name_prefix Determines whether the DB parameter group name is used as a prefix bool true no
db_subnet_group_name The name of the subnet group name (existing or created) string "" no
delete_automated_backups Specifies whether to remove automated backups immediately after the DB cluster is deleted bool null no
deletion_protection If the DB instance should have deletion protection enabled. The database can't be deleted when this value is set to true. The default is false bool null no
domain The ID of the Directory Service Active Directory domain to create the instance in string null no
domain_iam_role_name (Required if domain is provided) The name of the IAM role to be used when making API calls to the Directory Service string null no
enable_global_write_forwarding Whether cluster should forward writes to an associated global cluster. Applied to secondary clusters to enable them to forward writes to an aws_rds_global_cluster's primary cluster bool null no
enable_http_endpoint Enable HTTP endpoint (data API). Only valid when engine_mode is set to serverless bool null no
enable_local_write_forwarding Whether read replicas can forward write operations to the writer DB instance in the DB cluster. By default, write operations aren't allowed on reader DB instances. bool null no
enabled_cloudwatch_logs_exports Set of log types to export to cloudwatch. If omitted, no logs will be exported. The following log types are supported: audit, error, general, slowquery, postgresql list(string) [] no
endpoints Map of additional cluster endpoints and their attributes to be created any {} no
engine The name of the database engine to be used for this DB cluster. Defaults to aurora. Valid Values: aurora, aurora-mysql, aurora-postgresql string null no
engine_mode The database engine mode. Valid values: global, multimaster, parallelquery, provisioned, serverless. Defaults to: provisioned string "provisioned" no
engine_native_audit_fields_included Specifies whether the database activity stream includes engine-native audit fields. This option only applies to an Oracle DB instance. By default, no engine-native audit fields are included bool false no
engine_version The database engine version. Updating this argument results in an outage string null no
final_snapshot_identifier The name of your final DB snapshot when this DB cluster is deleted. If omitted, no final snapshot will be made string null no
global_cluster_identifier The global cluster identifier specified on aws_rds_global_cluster string null no
iam_database_authentication_enabled Specifies whether or mappings of AWS Identity and Access Management (IAM) accounts to database accounts is enabled bool null no
iam_role_description Description of the monitoring role string null no
iam_role_force_detach_policies Whether to force detaching any policies the monitoring role has before destroying it bool null no
iam_role_managed_policy_arns Set of exclusive IAM managed policy ARNs to attach to the monitoring role list(string) null no
iam_role_max_session_duration Maximum session duration (in seconds) that you want to set for the monitoring role number null no
iam_role_name Friendly name of the monitoring role string null no
iam_role_path Path for the monitoring role string null no
iam_role_permissions_boundary The ARN of the policy that is used to set the permissions boundary for the monitoring role string null no
iam_role_use_name_prefix Determines whether to use iam_role_name as is or create a unique name beginning with the iam_role_name as the prefix bool false no
iam_roles Map of IAM roles and supported feature names to associate with the cluster map(map(string)) {} no
instance_class Instance type to use at master instance. Note: if autoscaling_enabled is true, this will be the same instance class used on instances created by autoscaling string "" no
instance_timeouts Create, update, and delete timeout configurations for the cluster instance(s) map(string) {} no
instances Map of cluster instances and any specific/overriding attributes to be created any {} no
instances_use_identifier_prefix Determines whether cluster instance identifiers are used as prefixes bool false no
iops The amount of Provisioned IOPS (input/output operations per second) to be initially allocated for each DB instance in the Multi-AZ DB cluster number null no
is_primary_cluster Determines whether cluster is primary cluster with writer instance (set to false for global cluster and replica clusters) bool true no
kms_key_id The ARN for the KMS encryption key. When specifying kms_key_id, storage_encrypted needs to be set to true string null no
manage_master_user_password Set to true to allow RDS to manage the master user password in Secrets Manager. Cannot be set if master_password is provided bool true no
manage_master_user_password_rotation Whether to manage the master user password rotation. Setting this value to false after previously having been set to true will disable automatic rotation. bool false no
master_password Password for the master DB user. Note that this may show up in logs, and it will be stored in the state file. Required unless manage_master_user_password is set to true or unless snapshot_identifier or replication_source_identifier is provided or unless a global_cluster_identifier is provided when the cluster is the secondary cluster of a global database string null no
master_user_password_rotate_immediately Specifies whether to rotate the secret immediately or wait until the next scheduled rotation window. bool null no
master_user_password_rotation_automatically_after_days Specifies the number of days between automatic scheduled rotations of the secret. Either master_user_password_rotation_automatically_after_days or master_user_password_rotation_schedule_expression must be specified number null no
master_user_password_rotation_duration The length of the rotation window in hours. For example, 3h for a three hour window. string null no
master_user_password_rotation_schedule_expression A cron() or rate() expression that defines the schedule for rotating your secret. Either master_user_password_rotation_automatically_after_days or master_user_password_rotation_schedule_expression must be specified string null no
master_user_secret_kms_key_id The Amazon Web Services KMS key identifier is the key ARN, key ID, alias ARN, or alias name for the KMS key string null no
master_username Username for the master DB user. Required unless snapshot_identifier or replication_source_identifier is provided or unless a global_cluster_identifier is provided when the cluster is the secondary cluster of a global database string null no
monitoring_interval The interval, in seconds, between points when Enhanced Monitoring metrics are collected for instances. Set to 0 to disable. Default is 0 number 0 no
monitoring_role_arn IAM role used by RDS to send enhanced monitoring metrics to CloudWatch string "" no
name Name used across resources created string "" no
network_type The type of network stack to use (IPV4 or DUAL) string null no
performance_insights_enabled Specifies whether Performance Insights is enabled or not bool null no
performance_insights_kms_key_id The ARN for the KMS key to encrypt Performance Insights data string null no
performance_insights_retention_period Amount of time in days to retain Performance Insights data. Either 7 (7 days) or 731 (2 years) number null no
port The port on which the DB accepts connections string null no
predefined_metric_type The metric type to scale on. Valid values are RDSReaderAverageCPUUtilization and RDSReaderAverageDatabaseConnections string "RDSReaderAverageCPUUtilization" no
preferred_backup_window The daily time range during which automated backups are created if automated backups are enabled using the backup_retention_period parameter. Time in UTC string "02:00-03:00" no
preferred_maintenance_window The weekly time range during which system maintenance can occur, in (UTC) string "sun:05:00-sun:06:00" no
publicly_accessible Determines whether instances are publicly accessible. Default false bool null no
putin_khuylo Do you agree that Putin doesn't respect Ukrainian sovereignty and territorial integrity? More info: https://en.wikipedia.org/wiki/Putin_khuylo! bool true no
replication_source_identifier ARN of a source DB cluster or DB instance if this DB cluster is to be created as a Read Replica string null no
restore_to_point_in_time Map of nested attributes for cloning Aurora cluster map(string) {} no
s3_import Configuration map used to restore from a Percona Xtrabackup in S3 (only MySQL is supported) map(string) {} no
scaling_configuration Map of nested attributes with scaling properties. Only valid when engine_mode is set to serverless map(string) {} no
security_group_description The description of the security group. If value is set to empty string it will contain cluster name in the description string null no
security_group_name The security group name. Default value is (var.name) string "" no
security_group_rules Map of security group rules to add to the cluster security group created any {} no
security_group_tags Additional tags for the security group map(string) {} no
security_group_use_name_prefix Determines whether the security group name (var.name) is used as a prefix bool true no
serverlessv2_scaling_configuration Map of nested attributes with serverless v2 scaling properties. Only valid when engine_mode is set to provisioned map(string) {} no
skip_final_snapshot Determines whether a final snapshot is created before the cluster is deleted. If true is specified, no snapshot is created bool false no
snapshot_identifier Specifies whether or not to create this cluster from a snapshot. You can use either the name or ARN when specifying a DB cluster snapshot, or the ARN when specifying a DB snapshot string null no
source_region The source region for an encrypted replica DB cluster string null no
storage_encrypted Specifies whether the DB cluster is encrypted. The default is true bool true no
storage_type Determines the storage type for the DB cluster. Optional for Single-AZ, required for Multi-AZ DB clusters. Valid values for Single-AZ: aurora, "" (default, both refer to Aurora Standard), aurora-iopt1 (Aurora I/O Optimized). Valid values for Multi-AZ: io1 (default). string null no
subnets List of subnet IDs used by database subnet group created list(string) [] no
tags A map of tags to add to all resources map(string) {} no
vpc_id ID of the VPC where to create security group string "" no
vpc_security_group_ids List of VPC security groups to associate to the cluster in addition to the security group created list(string) [] no

Outputs

Name Description
additional_cluster_endpoints A map of additional cluster endpoints and their attributes
cluster_arn Amazon Resource Name (ARN) of cluster
cluster_database_name Name for an automatically created database on cluster creation
cluster_endpoint Writer endpoint for the cluster
cluster_engine_version_actual The running version of the cluster database
cluster_hosted_zone_id The Route53 Hosted Zone ID of the endpoint
cluster_id The RDS Cluster Identifier
cluster_instances A map of cluster instances and their attributes
cluster_master_password The database master password
cluster_master_user_secret The generated database master user secret when manage_master_user_password is set to true
cluster_master_username The database master username
cluster_members List of RDS Instances that are a part of this cluster
cluster_port The database port
cluster_reader_endpoint A read-only endpoint for the cluster, automatically load-balanced across replicas
cluster_resource_id The RDS Cluster Resource ID
cluster_role_associations A map of IAM roles associated with the cluster and their attributes
db_cluster_activity_stream_kinesis_stream_name The name of the Amazon Kinesis data stream to be used for the database activity stream
db_cluster_cloudwatch_log_groups Map of CloudWatch log groups created and their attributes
db_cluster_parameter_group_arn The ARN of the DB cluster parameter group created
db_cluster_parameter_group_id The ID of the DB cluster parameter group created
db_cluster_secretsmanager_secret_rotation_enabled Specifies whether automatic rotation is enabled for the secret
db_parameter_group_arn The ARN of the DB parameter group created
db_parameter_group_id The ID of the DB parameter group created
db_subnet_group_name The db subnet group name
enhanced_monitoring_iam_role_arn The Amazon Resource Name (ARN) specifying the enhanced monitoring role
enhanced_monitoring_iam_role_name The name of the enhanced monitoring role
enhanced_monitoring_iam_role_unique_id Stable and unique string identifying the enhanced monitoring role
security_group_id The security group ID of the cluster

Authors

Module is maintained by Anton Babenko with help from these awesome contributors.

License

Apache 2 Licensed. See LICENSE for full details.

Additional information for users from Russia and Belarus

terraform-aws-rds-aurora's People

Contributors

antonbabenko avatar betajobot avatar blokje5 avatar bryantbiggs avatar dev-slatto avatar estahn avatar futuresharks avatar gungoren avatar komljen avatar krewenki avatar legal90 avatar magreenbaum avatar max-rocket-internet avatar melechi avatar michaelgmcd avatar miguelaferreira avatar narqo avatar naseemkullah avatar ohmer avatar pdeva avatar ricardo-mng avatar samuelm333 avatar semantic-release-bot avatar stephenking avatar tanmng avatar theherk avatar thomasplarsson avatar tomasbackman avatar tpounds avatar travis-jorge avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

terraform-aws-rds-aurora's Issues

DBClusterParameterGroup not found: default.aurora5.6 when no param group specified

I've actually just commented out these:,

  #db_parameter_group_name         = "default"
  #db_cluster_parameter_group_name = "default"

I'm not even sure why I need them. And then I've got error:


module.db.aws_rds_cluster.this: Creating...

Error: error creating RDS cluster: DBClusterParameterGroupNotFound: DBClusterParameterGroup not found: default.aurora5.6
        status code: 404, request id: 8b417ecc-9600-4d03-b24d-9c525d320894

  on .terraform/modules/db/terraform-aws-modules-terraform-aws-rds-aurora-08cef85/main.tf line 24, in resource "aws_rds_cluster" "this":
  24: resource "aws_rds_cluster" "this" {

The default param also doesn't work:

 DBClusterParameterGroup not found: default

Also tried to use the one which I've found on aws: default.postgres10 as I'm using 10.7 postgresql version, but it's also saying it's not found

So what should I put in here?

Output is missing the DB resource identifier

The resource identifier is needed when creating rds-db connect IAM policies for example and is returned by the aws_rds_cluster.cluster_resource_id.

as an example of where this is needed:

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
             "rds-db:connect"
         ],
         "Resource": [
             "arn:aws:rds-db:us-east-2:1234567890:dbuser:db-ABCDEFGHIJKL01234/db_user"
         ]
      }
   ]
}

currently there is no way to retrieve the resource identifier db-ABCDEFGHIJKL01234 from the module.

Data API

Hi,

Is there a way to enable the Data API for a Aurora Serverless? Enabling it manually is not too much work, but it would be great if it could be done through code.

Thanks!

Setting create_security_group to false fails

If you set create_security_group to false the quoted line below fails in the compact call.

Error: Invalid index

  on .terraform/modules/db_cluster/terraform-aws-modules-terraform-aws-rds-aurora-9bd85d0/main.tf line 48, in resource "aws_rds_cluster" "this":
  48:   vpc_security_group_ids              = compact(concat([aws_security_group.this[0].id], var.vpc_security_group_ids))
    |----------------
    | aws_security_group.this is empty tuple

The given key does not identify an element in this collection value.

Would it work to include a ternary within that contact call - something like?

compact(concat(var.create_security_group ? [aws_security_group.this[0].id] : [], var.vpc_security_group_ids))

aws_security_group_this fails to create

I don't try to pass in any security groups, and just stick with what the module creates out of the box:

module "application-db" {
  source  = "terraform-aws-modules/rds-aurora/aws"
  version = "0.0.1"

  name = "${var.environment}db-tf"

  engine         = "aurora-postgresql"
  engine_version = "9.6.8"

  vpc_id = "${data.terraform_remote_state.network.qa_vpc_id}"

  subnets            = ["${data.terraform_remote_state.network.qa_vpc_private_subnets}"]
  availability_zones = ["us-east-1a", "us-east-1b", "us-east-1c"]

  replica_count                   = 1
  instance_type                   = "db.r4.large"
  storage_encrypted               = "false"
  apply_immediately               = "false"
  monitoring_interval             = 10
  db_parameter_group_name         = "default.aurora-postgresql9.6"
  db_cluster_parameter_group_name = "default.aurora-postgresql9.6"
  skip_final_snapshot             = true

  snapshot_identifier = "${var.db-snapshot}"
  username            = "${var.db-user}"
  password            = "${var.db-password}"

  tags = "${var.tags}"
}

On creation, I run into this error:
* aws_security_group.this: from_port (3306) and to_port (5432) must both be 0 to use the 'ALL' "-1" protocol!

I'm not entirely sure what changed, but this module worked a few days ago

AmazonRDSEnhancedMonitoringRole arn is different in US Gov Regions

We see the following error when trying to create an RDS cluster with this module in a US Gov region:

Error: Provider produced inconsistent result after apply

When applying changes to
module.rds.module.rds.aws_iam_role_policy_attachment.rds_enhanced_monitoring[0],
provider "aws" produced an unexpected new value for was present, but now
absent.

This is a bug in the provider, which should be reported in the provider's own
issue tracker.

I don't think it's a provider issue, but rather an issue with how this module is coded. It looks like the policy_arn in in main.tf (line 133) is hard coded to:
arn:aws:iam::aws:policy/service-role/AmazonRDSEnhancedMonitoringRole

However that arn isn't valid in US Gov regions, it is actually:
arn:aws-us-gov:iam::aws:policy/service-role/AmazonRDSEnhancedMonitoringRole

See AWS docs on this: https://docs.aws.amazon.com/govcloud-us/latest/UserGuide/using-govcloud-arns.html
(note this is also an issue for China which has "aws-cn" instead of "aws" or "aws-us-gov")

feature request: default_egress rules to security groups

I have a use case that involves outgoing connections from the aurora rds cluster

I propose an additional resource to main.tf like so:

resource "aws_security_group_rule" "default_egress" {
  count = "${var.allowed_security_groups_count}"

  type                     = "egress"
  from_port                = "${aws_rds_cluster.this.port}"
  to_port                  = "${aws_rds_cluster.this.port}"
  protocol                 = "tcp"
  source_security_group_id = "${element(var.allowed_security_groups, count.index)}"
  security_group_id        = "${aws_security_group.this.id}"
}

AWS Secrets Manager + Aurora RDS module

Hi,

I would like to make use of AWS Secrets Manager to rotate root credentials for the aurora db mysql. Could you advise how to do it using this module or maybe you have some useful example where this is being done?

Error deleting security group: DependencyViolation: sg- has a dependent object

Introduced in v2.10.0 by #80

"aws_security_group" "this" is being recreated due to description change.

# module.aurora.aws_security_group.this[0] must be replaced
-/+ resource "aws_security_group" "this" {
      ~ arn                    = "arn:aws:ec2:us-east-1:xxx:security-group/sg-xxx" -> (known after apply)
      ~ description            = "Managed by Terraform" -> "Control traffic to/from RDS Aurora xxx" # forces replacement
      ~ egress                 = [
          - {
              - cidr_blocks      = []
              - description      = ""
              - from_port        = 5432
              - ipv6_cidr_blocks = []
              - prefix_list_ids  = []
              - protocol         = "tcp"

Error:

module.aurora.aws_security_group.this[0]: Still destroying... [id=sg-xxx, 9m20s elapsed]
module.aurora.aws_security_group.this[0]: Still destroying... [id=sg-xxx, 9m30s elapsed]
module.aurora.aws_security_group.this[0]: Still destroying... [id=sg-xxx, 9m40s elapsed]
module.aurora.aws_security_group.this[0]: Still destroying... [id=sg-xxx, 9m50s elapsed]
module.aurora.aws_security_group.this[0]: Still destroying... [id=sg-xxx, 10m0s elapsed]

Error: Error deleting security group: DependencyViolation: resource sg-xxx has a dependent object
	status code: 400, request id: 2e5e5ee3-0a88-459d-a5d6-177979d94bcd

Output is missing DB Instance IDs

Currently, when Aurora Cluster is created, only Cluster ID is exposed in output.

We have a use case where we need instance IDs as well to setup CloudWatch Alarms on each instance.

It would be helpful if we can get the instance IDs as well in outputs.

Thanks.

Add permissions boundary aws iam role

In my case, my AWS account I am using permissions boundary to avoid creating a new role with bigger permissions. So any new role must set these permissions.
To run the resource aws_iam_role. rds_enhanced_monitoring, it is needed to set these permissions boundary.
Example:

resource "aws_iam_role" "rds_enhanced_monitoring" {

  name               = "rds-enhanced-monitoring-${var.name}"
  assume_role_policy = data.aws_iam_policy_document.monitoring_rds_assume_role.json

  permissions_boundary = var.permissions_boundary
}

random_passord may create invalid postgres master passwords

Issue introduced in #99 - maybe we should create random_password with special = true ?

module.postgres1.aws_rds_cluster.this: Modifying... [id=postgres1-test-ee9e0b3a]

Error: Failed to modify RDS Cluster (postgres1-test-ee9e0b3a): InvalidParameterValue: The parameter MasterUserPassword is not a valid password. Only printable ASCII characters besides '/', '@', '"', ' ' may be used.
	status code: 400, request id: 5ad5b26f-e191-4e19-a673-9900b360a966

  on .terraform/modules/postgres1/terraform-aws-modules-terraform-aws-rds-aurora-3c73cc9/main.tf line 33, in resource "aws_rds_cluster" "this":
  33: resource "aws_rds_cluster" "this" {

variable names

The variable names and descriptions are a bit confusing in some cases:

  1. skip_final_snapshot. If True, then no snapshot will be taken when the cluster is destroyed. However, the description states "Should a final snapshot be created on cluster destroy," which if true, would mean that a final snapshot will be created. (the opposite) Something like "Skip the creation of a final snapshot on cluster destruction" would align with the variable name.
  2. The variable names, like db_name/name subnets/subnet_ids, are not consistent between your terraform-aws-rds and terraform-aws-rds-aurora modules. It would be helpful to have consistent variable names and descriptions for the same variables across your modules.

Thanks for the helpful modules!

J

Few suggestions to improve

Remaining things to fix before big announcements on the registry:

  • Add all outputs for all resources (get names from official documentation for each resource))
  • Review all variables for all resources (get names from official documentation for each resource)). Also copy defaults which are in the official documentation.
  • Make examples executable, add README there, add outputs. And run them all.

After the release (any time later):

  • Review the code. It should be possible to create several RDS clusters with the same name, so use name_prefix or synonyms on all resources.
  • Add conditional creation of optional resources (security group, db subnet group can be provided externally).
  • Add conditional creation of RDS cluster also.

changing cluster-instances one by one?

Hi,

i just started experimenting with this. While testing an upgrade of the instance_type i noticed that both instances would be upgrade at the same time, which causes downtime.

Is it possible to upgrade the nodes one at a time with this module? (And therefore make use of the failver)

module "rds"{
  source = "git::ssh://..."
  name = "internal-mysql"

  vpc_id  = module.vpc.vpc_id
  subnets = module.vpc.intra_subnets

  engine         = "aurora-mysql"
  engine_version = "5.7.12"

  replica_count = 1


  password = "testing123"

  # performance_insights_enabled = true

  instance_type       = "db.r3.large"
  apply_immediately   = true
  skip_final_snapshot = true
  storage_encrypted   = true


  backup_retention_period = 7

  deletion_protection = false

  db_parameter_group_name         = aws_db_parameter_group.aurora_db_57_parameter_group.id
  db_cluster_parameter_group_name = aws_rds_cluster_parameter_group.aurora_57_cluster_parameter_group.id
  enabled_cloudwatch_logs_exports = ["audit", "error", "general", "slowquery"]
  allowed_cidr_blocks             = local.subnets["private"]

  create_security_group = true

  tags = merge(local.tags, {
    type   = "mysql",
    backup = "daily"
  })
}

regards,
strowi

allowed_security_groups value of 'count' cannot be computed

Hello everyone,

I'd like to know how I can use the "allowed_security_groups" with outputs from other modules.
Currently, when I do this :
allowed_security_groups = ["${module.bastion_access.bastion_security_group_id}"]
I have the famous : aws_security_group_rule.default_ingress: value of 'count' cannot be computed

Thanks for your help !

How to provision a Multi-AZ Cluster?

Hi,

How can i provision Multi-AZ? Is this supported?
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html

I'm using these two modules.

module "vpc_rds" {
  source = "terraform-aws-modules/vpc/aws"

  name = "vpc-${var.environment}"
  cidr = "10.0.0.0/16"

  create_database_subnet_group           = true
  create_database_subnet_route_table     = true
  create_database_internet_gateway_route = true

  enable_dns_hostnames                   = true
  enable_dns_support                     = true

  # Three Availability Zone
  azs              = var.availability_zones
  private_subnets  = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
  public_subnets   = ["10.0.11.0/24", "10.0.12.0/24", "10.0.13.0/24"]
  database_subnets = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]

  enable_nat_gateway = false

  tags = {
    Creator : "me"
  }
}
module "aurora" {
  source                              = "terraform-aws-modules/rds-aurora/aws"
  version                             = "~> 2.0"
  name                                = "aurora-api-mysql-${var.environment}"
  engine                              = "aurora-mysql"
  engine_version                      = "5.7.mysql_aurora.2.04.6"

  # Creds
  username                            = var.username
  password                            = var.password
  iam_database_authentication_enabled = false

  # Misc
  deletion_protection                 = false
  replica_count                       = 1
  instance_type                       = "db.t3.small"
  apply_immediately                   = true
  skip_final_snapshot                 = true
  db_parameter_group_name             = aws_db_parameter_group.aurora_db_57_parameter_group.id
  db_cluster_parameter_group_name     = aws_rds_cluster_parameter_group.aurora_57_cluster_parameter_group.id
  enabled_cloudwatch_logs_exports     = ["audit", "error", "general", "slowquery"]

  # Network
  subnets                             = module.vpc_rds.database_subnets
  vpc_id                              = module.vpc_rds.vpc_id
  publicly_accessible                 = true

  allowed_cidr_blocks                 = ["0.0.0.0/0", "10.0.1.0/24"]
  create_security_group = true
}

Cannot pass in security group from other module to allowed_security_groups

When setting up a cluster resource like so...

module "database" {
    source = "../modules/terraform-aws-modules/rds-aurora/aws"
    [...]
    allowed_security_groups = ["${module.asg_resources.asg_security_group_id}"]
    [...]
}

I get this well-known terraform error:
* module.database.aws_security_group_rule.default_ingress: aws_security_group_rule.default_ingress: value of 'count' cannot be computed

This is despite the fact that module.asg_resources.asg_security_group_id is a string and not a list.

Autoscaling group not created when using customer managed KMS keys

Hi!

When I switch from the default kms/rds key to a self managed kms key, the autoscaling group is not created anymore.

The apply succeeds, but instead a single-region single instance cluster is created rather than a multi-az cluster even though my module arguments didn't change and the replica count is still at 2, no replicas is created and no error is thrown during apply.

Aurora Backtrack Mysql

HI,

is this module support backtrack on aurora mysql(5.6) ?

I got this error:
"Error: module "db_ecomm_mysql": "backtrack_window" is not a valid argument"

Terraform destroy aws aurora cluster instances and tries to create a new cluster when performance insights parameter is changed and terraform reapplied.

Hi,
I am creating a aws aurora cluster and adding to it 2 instances. At first terraform apply, i have kept performance insights enabled parameter as false and the cluster is successfully created. After this I am changing the performance insights enabled parameter to true and re applying terraform. At this point, terraform is destroying my instances and recreating them which is not the expected behavior. Can you please help me on this issue, maybe I am missing something.

No support for AWS IAM Authentication

There is no support for AWS IAM authentication in the module. This would be an improvement to the current module. Enabling it should be simple enough, however since not all versions and engines are supported it is probably good to validate the engine to see if it is possible.

Aurora Postgres Engine Upgrade is not respecting apply_immediately = false

I was trying to schedule an Aurora Postgres engine upgrade from 10.7 to 10.11 for the next maintenance window. I have explicit apply_immediately = false in the module. However when I went to apply the changes, it just immediately tried to update and actually failed.

The change I made to attempt to schedule the upgrade was engine_version = "10.7" to engine_version = "10.11"

Here's a snippet of the plan with most of the irrelevant information redacted

  # module.vault_db.aws_rds_cluster.this will be updated in-place
  ~ resource "aws_rds_cluster" "this" {
        apply_immediately                   = false
        engine                              = "aurora-postgresql"
        engine_mode                         = "provisioned"
      ~ engine_version                      = "10.7" -> "10.11"

        preferred_maintenance_window        = "sun:05:00-sun:06:00"

    }

  # module.vault_db.aws_rds_cluster_instance.this[0] must be replaced
-/+ resource "aws_rds_cluster_instance" "this" {
        apply_immediately               = false
        auto_minor_version_upgrade      = true
        engine                          = "aurora-postgresql"
      ~ engine_version                  = "10.7" -> "10.11" # forces replacement
        preferred_maintenance_window    = "sun:05:00-sun:06:00"

    }

I was hoping that the warning about the DB Instance being replaced was a false alarm, and that it would just be replaced during the maintenance window, but it immediately started to delete the instance. What's worse is that it even failed to upgrade the cluster. It deleted the two DB Instances but then couldn't upgrade the cluster itself because no instances were running.

module.vault_db.aws_rds_cluster_instance.this[1]: Destroying... [id=redacted-2]
module.vault_db.aws_rds_cluster_instance.this[0]: Destroying... [id=redacted-1]
module.vault_db.aws_rds_cluster.this: Modifying... [id=redacted]
module.vault_db.aws_rds_cluster_instance.this[1]: Still destroying... [id=redacted-2, 10s elapsed]
module.vault_db.aws_rds_cluster_instance.this[0]: Still destroying... [id=redacted-1, 10s elapsed]
module.vault_db.aws_rds_cluster.this: Still modifying... [id=redacted, 10s elapsed]
module.vault_db.aws_rds_cluster_instance.this[1]: Still destroying... [id=redacted-2, 20s elapsed]
module.vault_db.aws_rds_cluster_instance.this[0]: Still destroying... [id=redacted-1, 20s elapsed]
module.vault_db.aws_rds_cluster.this: Still modifying... [id=redacted, 20s elapsed]
module.vault_db.aws_rds_cluster_instance.this[1]: Still destroying... [id=redacted-2, 30s elapsed]
module.vault_db.aws_rds_cluster_instance.this[0]: Still destroying... [id=redacted-1, 30s elapsed]
module.vault_db.aws_rds_cluster.this: Still modifying... [id=redacted, 30s elapsed]
module.vault_db.aws_rds_cluster.this: Modifications complete after 33s [id=redacted]
...
Error: error creating RDS DB Instance: InvalidParameterCombination: The engine version that you requested for your DB instance (10.11) does not match the engine version of your DB cluster (10.7).
        status code: 400, request id: 8cce8f94-7ba3-4dc6-97b0-610d177f6e27

  on .terraform/modules/vault_db/main.tf line 81, in resource "aws_rds_cluster_instance" "this":
  81: resource "aws_rds_cluster_instance" "this" {

I'm not sure if this is user error, a bug in the module, or in the provider. I searched in both this module and the provider for anything relating to this, but couldn't find anything.

VPC Security Groups Not Updated on Replace

Using the module.example_security_group.this_security_group_id output from the Security Group module (https://github.com/terraform-aws-modules/terraform-aws-security-group) to apply security groups to this module fails to update if the security group is replaced for some reason (eg. description change).

The new replacement security group is created, but not attached to the Aurora cluster. The old group fails to delete, and stays attached to the Aurora cluster with all inbound and outbound rules removed.

I am able to manually fix it by adding the new SGs and removing the old ones to the Aurora cluster from the RDS Console, then deleting the old ones in the EC2 console, but this is not ideal.

parameter group names should default to null

If these values are null AWS will create and pick the correct default group for the engine type being deployed.

variable "db_parameter_group_name" {
  description = "The name of a DB parameter group to use"
  type        = string
  default     = null
}

variable "db_cluster_parameter_group_name" {
  description = "The name of a DB Cluster parameter group to use"
  type        = string
  default     = null
}

Unable to use the module in Terraform

Hi,

I'm not able to use your module in terraform. This is the first time this happens to me with a terraform module.

Here is the result of a terraform get command :

Initializing modules...

module.security_group-db
Found version 2.7.0 of terraform-aws-modules/security-group/aws on registry.terraform.io
Getting source "terraform-aws-modules/security-group/aws"
module.aurora
Found version 0.0.1 of terraform-aws-modules/rds-aurora/aws on registry.terraform.io
Getting source "terraform-aws-modules/rds-aurora/aws"
Error downloading modules: Error loading modules: module aurora: No Terraform configuration files found in directory: .terraform/modules/3a6b6096207200690f118584dd370e00/terraform-aws-modules-terraform-aws-rds-aurora-7db32bb

When I go in the temporary folder, there is only a README file :

# terraform-aws-rds-aurora
Terraform module which creates RDS Aurora resources on AWS

WORK IN PROGRESS

Can you help me ?
Thanks

Creating a serverless Aurora db with the rds-aurora module fails

I was trying to create a serverless Aurora database using the rds-aurora aurora module. I noticed that on main.tf line 82, an aws_rds_cluster_instance would be created, even if we choose a serverless engine_mode. This is of course unsupported because we cannot associate an instance with serverless.
This throws the error

Error: error creating RDS DB Instance: InvalidParameterValue: Instances cannot be added to Aurora Serverless clusters.
        status code: 400, request id: ...

My workaround was to download the Terraform script and comment out the part that creates the instance, but this is not a general or correct solution.

aurora cluster different size

I want to make RDS Aurora Cluster with 1 read replica,
is it possible to set the replica with different size using this module?

predefined_metric_type is not configurable

target_tracking_scaling_policy_configuration is hardcoded to use RDSReaderAverageCPUUtilization for metric type.

target_tracking_scaling_policy_configuration {
    predefined_metric_specification {
      predefined_metric_type = "RDSReaderAverageCPUUtilization"
    }

It would be good to make it configurable.
I have created PR to enable such configuration: #66

identifier_prefix appears to be unused

looking at the docs, I'd expect identifier_prefix to be used in the cluster id, instance id, and elsewhere. however, grepping the code, it seems like it's not used anywhere:

$ ag identifier_prefix ../../modules/aws-rds-aurora/
../../modules/aws-rds-aurora/README.md
74:| final_snapshot_identifier_prefix | The prefix name to use when creating a final snapshot on cluster destroy, appends a random 8 digits to name to ensure it's unique too. | string | `final` | no |
75:| identifier_prefix | Prefix for cluster and instance identifier | string | `` | no |

../../modules/aws-rds-aurora/main.tf
27:  final_snapshot_identifier       = "${var.final_snapshot_identifier_prefix}-${var.name}-${random_id.snapshot_identifier.hex}"

../../modules/aws-rds-aurora/variables.tf
10:variable "identifier_prefix" {
53:variable "final_snapshot_identifier_prefix" {

Why +1 for instance identifier?

Is there any reason why there is +1 in the identifier number for instances, so that they go 1,2,.. instead of 0,1,..
identifier = "${var.name}-${count.index + 1}"

Is it better for some reason? (I feel index starting on 0 would feel better, and make it easier for me personally to import our current env.. =)

Has it anything to do with getting the same number as promotion_tier?
"${count.index}+1" ?

Postgres example fails

Running the postgres example fails on terraform apply with this error message:

* aws_rds_cluster.this: error creating RDS cluster: InvalidParameterCombination: Engine aurora-postgresql 9.6.3 does not support exporting to CloudWatch Logs. For supported engine versions, see the documentation.

Error unsupported argument 'timeout_action'

I got this error when I run terraform plan.

Acquiring state lock. This may take a few moments...

Error: Unsupported argument

  on .terraform/modules/aurora/terraform-aws-modules-terraform-aws-rds-aurora-9bd85d0/main.tf line 67, in resource "aws_rds_cluster" "this":
  67:       timeout_action           = lookup(scaling_configuration.value, "timeout_action", null)

An argument named "timeout_action" is not expected here.

Here is my config snippet:

#############
# RDS Aurora
#############
module "aurora" {
  source         = "terraform-aws-modules/rds-aurora/aws"
  name           = "aurora-serverless"
  engine         = "aurora-postgresql"
  engine_version = "10.7"

  engine_mode   = "serverless"
  replica_count = 1

  backtrack_window = 10 # ignored in serverless

  subnets                         = data.aws_subnet_ids.all.ids
  vpc_id                          = data.aws_vpc.default.id
  monitoring_interval             = 60
  instance_type                   = "db.r4.large"
  apply_immediately               = true
  skip_final_snapshot             = true
  storage_encrypted               = true
  db_parameter_group_name         = aws_db_parameter_group.aurora_db_postgres96_parameter_group.id
  db_cluster_parameter_group_name = aws_rds_cluster_parameter_group.aurora_cluster_postgres96_parameter_group.id

  scaling_configuration = {
    auto_pause               = true
    max_capacity             = 256
    min_capacity             = 2
    seconds_until_auto_pause = 300
    timeout_action           = "ForceApplyCapacityChange"
  }
}

outputs should include the ARN of the RDS cluster

Currently, the project is returning the resource id, wouldn't it make more sense if it returned the ARN directly? The use case is the same for creating policies but look like returning the ARN is more straight forward.

Aurora postgres iam_roles failing to apply

When passing iam db role to iam_roles variable, e.g. iam_roles = [<db_role_arn>] , it fails to apply role to Aurora postgres db cluster with following error -

Error: InvalidParameterValue: The feature-name parameter must be provided with the current operation for the Aurora (PostgreSQL) engine.
        status code: 400, request id: 7bbd3ff5-0d7c-44ad-af95-607b212da013

Question about the MIT license

Will the module be released on registry.terraform.io with the current MIT license?
Curious about the implications of the 'Claranet Ltd' copyright notice.
Is that where you work @FutureSharks ?

getting InvalidParameterValue while using aurora-mysql as engine type

Terraform version 0.12.24

I am trying to create aurora mysql serverless rds with below configuration, running into error invalid parameter value when I use aurora-mysql. it works fine if i use engine as aurora. plan does not give me any error.

provider "aws" {
region = "us-east-1"
}
resource "aws_rds_cluster" "serverless" {
cluster_identifier = "serverless-dev"
engine = "aurora-mysql"
engine_mode = "serverless"
master_username = "dba_admin"
master_password = "changemepass"
skip_final_snapshot = true
db_subnet_group_name = "serverless-vpc"
}

Error: error creating RDS cluster: InvalidParameterValue: The engine mode serverless you requested is currently unavailable.
status code: 400, request id: 2294c942-fec5-4f45-a9e0-7520e33b73b8

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.