Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initial implementation #1

Merged
merged 19 commits into from
Mar 10, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/mergify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,10 @@ pull_request_rules:
changes_requested: true
approved: true
message: "This Pull Request has been updated, so we're dismissing all reviews."

- name: "close Pull Requests without files changed"
conditions:
- "#files=0"
actions:
close:
message: "This pull request has been automatically closed by Mergify because there are no longer any changes."
4 changes: 3 additions & 1 deletion .github/workflows/auto-format.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
jobs:
auto-format:
runs-on: ubuntu-latest
container: cloudposse/build-harness:slim-latest
container: cloudposse/build-harness:latest
steps:
# Checkout the pull request branch
# "An action in a workflow run can’t trigger a new workflow run. For example, if an action pushes code using
Expand All @@ -29,6 +29,8 @@ jobs:
- name: Auto Format
if: github.event.pull_request.state == 'open'
shell: bash
env:
GITHUB_TOKEN: "${{ secrets.PUBLIC_REPO_ACCESS_TOKEN }}"
run: make BUILD_HARNESS_PATH=/build-harness PACKAGES_PREFER_HOST=true -f /build-harness/templates/Makefile.build-harness pr/auto-format/host

# Commit changes (if any) to the PR branch
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/auto-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ name: auto-release
on:
push:
branches:
- master
- main

jobs:
publish:
runs-on: ubuntu-latest
steps:
# Get PR from merged commit to master
# Get PR from merged commit to main
- uses: actions-ecosystem/action-get-merged-pull-request@v1
id: get-merged-pull-request
with:
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# Compiled files
*.tfstate
*.tfstate.backup
**.terraform.lock.hcl
**.terraform.tfstate.lock.info

# Module directory
.terraform
Expand Down
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@
APPENDIX: How to apply the Apache License to your work.

To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
boilerplate notice, with the fields enclosed by brackets "{}"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
Expand Down
518 changes: 516 additions & 2 deletions README.md

Large diffs are not rendered by default.

188 changes: 188 additions & 0 deletions README.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
name: terraform-aws-rds-db-proxy

tags:
- aws
- terraform
- terraform-modules
- databases
- rds
- rds-database
- proxy
- proxy-pool
- database-proxy
- connection
- connections
- pool
- connection-pool
- aurora
- mysql
- postgres
- cluster

categories:
- terraform-modules/databases

license: APACHE2

github_repo: cloudposse/terraform-aws-rds-db-proxy

badges:
- name: Latest Release
image: https://img.shields.io/github/release/cloudposse/terraform-aws-rds-db-proxy.svg
url: https://github.com/cloudposse/terraform-aws-rds-db-proxy/releases/latest
- name: Slack Community
image: https://slack.cloudposse.com/badge.svg
url: https://slack.cloudposse.com

related:
- name: terraform-aws-rds-cluster
description: Terraform module to provision an RDS Aurora cluster for MySQL or Postgres.
url: https://github.com/cloudposse/terraform-aws-rds-cluster
- name: terraform-aws-rds
description: Terraform module to provision AWS RDS instances.
url: https://github.com/cloudposse/terraform-aws-rds
- name: terraform-aws-rds-cloudwatch-sns-alarms
description: Terraform module that configures important RDS alerts using CloudWatch and sends them to an SNS topic.
url: https://github.com/cloudposse/terraform-aws-rds-cloudwatch-sns-alarms
- name: terraform-aws-rds-replica
description: Terraform module to provision AWS RDS replica instances. These are best suited for reporting purposes.
url: https://github.com/cloudposse/terraform-aws-rds-replica
- name: terraform-aws-backup
description: Terraform module to provision AWS Backup, a fully managed backup service that makes it easy to centralize and automate
the back up of data across AWS services such as Amazon EBS volumes, Amazon EC2 instances, Amazon RDS databases,
Amazon DynamoDB tables, Amazon EFS file systems, and AWS Storage Gateway volumes.
url: https://github.com/cloudposse/terraform-aws-backup

description: |-
Terraform module to provision an Amazon [RDS Proxy](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-proxy.html) for MySQL or Postgres.

usage: |2-

For a complete example, see [examples/complete](examples/complete).

For automated tests of the complete example using [bats](https://github.com/bats-core/bats-core) and [Terratest](https://github.com/gruntwork-io/terratest)
(which tests and deploys the example on AWS), see [test](test).

```hcl
module "vpc" {
source = "cloudposse/vpc/aws"
version = "0.21.1"

cidr_block = "172.16.0.0/16"

context = module.this.context
}

module "subnets" {
source = "cloudposse/dynamic-subnets/aws"
version = "0.38.0"

availability_zones = var.availability_zones
vpc_id = module.vpc.vpc_id
igw_id = module.vpc.igw_id
cidr_block = module.vpc.vpc_cidr_block
nat_gateway_enabled = false
nat_instance_enabled = false

context = module.this.context
}

resource "random_password" "admin_password" {
count = var.database_password == "" || var.database_password == null ? 1 : 0
length = 33
special = false
override_special = "!#$%^&*()<>-_"
}

locals {
database_password = var.database_password != "" && var.database_password != null ? var.database_password : join("", random_password.admin_password.*.result)

username_password = {
username = var.database_user
password = local.database_password
}

auth = [
{
auth_scheme = "SECRETS"
description = "Access the database instance using username and password from AWS Secrets Manager"
iam_auth = "DISABLED"
secret_arn = aws_secretsmanager_secret.rds_username_and_password.arn
}
]
}

module "rds_instance" {
source = "cloudposse/rds/aws"
version = "0.34.0"

database_name = var.database_name
database_user = var.database_user
database_password = local.database_password
database_port = var.database_port
multi_az = var.multi_az
storage_type = var.storage_type
allocated_storage = var.allocated_storage
storage_encrypted = var.storage_encrypted
engine = var.engine
engine_version = var.engine_version
instance_class = var.instance_class
db_parameter_group = var.db_parameter_group
publicly_accessible = var.publicly_accessible
vpc_id = module.vpc.vpc_id
subnet_ids = module.subnets.private_subnet_ids
security_group_ids = [module.vpc.vpc_default_security_group_id]
apply_immediately = var.apply_immediately

context = module.this.context
}

resource "aws_secretsmanager_secret" "rds_username_and_password" {
name = module.this.id
description = "RDS username and password"
recovery_window_in_days = 0
tags = module.this.tags
}

resource "aws_secretsmanager_secret_version" "rds_username_and_password" {
secret_id = aws_secretsmanager_secret.rds_username_and_password.id
secret_string = jsonencode(local.username_password)
}

module "rds_proxy" {
source = "cloudposse/rds-db-proxy/aws"
version = "0.1.0"

db_instance_identifier = module.rds_instance.instance_id
auth = local.auth
vpc_security_group_ids = [module.vpc.vpc_default_security_group_id]
vpc_subnet_ids = module.subnets.public_subnet_ids

debug_logging = var.debug_logging
engine_family = var.engine_family
idle_client_timeout = var.idle_client_timeout
require_tls = var.require_tls
connection_borrow_timeout = var.connection_borrow_timeout
init_query = var.init_query
max_connections_percent = var.max_connections_percent
max_idle_connections_percent = var.max_idle_connections_percent
session_pinning_filters = var.session_pinning_filters
existing_iam_role_arn = var.existing_iam_role_arn

context = module.this.context
}

```

examples: |-
Review the [complete example](examples/complete) to see how to use this module.

include:
- docs/targets.md
- docs/terraform.md

contributors:
- name: Erik Osterman
github: osterman
- name: Andriy Knysh
github: aknysh
Loading