Skip to content
Open
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
44 changes: 44 additions & 0 deletions dms/dms.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
data "aws_availability_zones" "available" {
state = "available"
}


resource "aws_dms_replication_instance" "dms_replication_instance" {
allocated_storage = var.allocated_storage

apply_immediately = var.apply_immediately
auto_minor_version_upgrade = var.minor_version_upgrade
availability_zone = element(data.aws_availability_zones.available.names, 0)
engine_version = var.engine_version
kms_key_arn = aws_kms_key.dms_customer_key[0].arn
multi_az = var.is_multi_az
preferred_maintenance_window = var.maintaince_window
publicly_accessible = var.publicly_accessible
replication_instance_class = var.instance_class
replication_instance_id = var.instance_id
replication_subnet_group_id = aws_dms_replication_subnet_group.dms_subnet_group.id

tags = var.tags

vpc_security_group_ids = [
for sec_group in var.security_groups :
sec_group
]
}

resource "aws_kms_key" "dms_customer_key" {
count = var.use_default_kms == true ? 1 : 0
description = "DMS custom managed key"
deletion_window_in_days = var.deletion_window
}


resource "aws_dms_replication_subnet_group" "dms_subnet_group" {
replication_subnet_group_description = "Dms Replication Subnet Group"
replication_subnet_group_id = "dms-mongodb-dynamodb-subnet-group"

subnet_ids = [
for subnet_id in var.subnet_ids :
subnet_id
]
}
34 changes: 34 additions & 0 deletions dms/dms_endpoint.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
resource "aws_dms_endpoint" "mongodb_source" {
certificate_arn = var.mongodb_cert_arn
database_name = var.mongodb_database_name
endpoint_id = var.mongodb_endpoint_id
endpoint_type = "source"
engine_name = "mongodb"
extra_connection_attributes = var.extra_conn_attr_mongodb
kms_key_arn = aws_kms_key.dms_customer_key[0].arn
port = var.mongodb_port
server_name = var.mongodb_server_name
ssl_mode = var.ssl_mode

username = var.username
password = var.password

mongodb_settings {
extract_doc_id = "${var.extract_doc_id}"
docs_to_investigate = 1000
nesting_level = "${var.nesting_level}"
}
}


resource "aws_dms_endpoint" "dynamodb_target" {
certificate_arn = var.mongodb_cert_arn
endpoint_id = var.dynamodb_target_name
endpoint_type = "target"
engine_name = "dynamodb"
extra_connection_attributes = var.extra_conn_attr_dynamodb
kms_key_arn = aws_kms_key.dms_customer_key[0].arn
service_access_role = aws_iam_role.dms-access-for-endpoint.arn
ssl_mode = var.ssl_mode

}
18 changes: 18 additions & 0 deletions dms/dms_task.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
resource "aws_dms_replication_task" "test" {
migration_type = var.migration_type
replication_instance_arn = aws_dms_replication_instance.dms_replication_instance.replication_instance_arn
replication_task_id = var.replication_task_id
source_endpoint_arn = aws_dms_endpoint.mongodb_source.endpoint_arn
table_mappings = data.local_file.map_rule_content.content
replication_task_settings = data.local_file.repl_task_content.content
target_endpoint_arn = aws_dms_endpoint.dynamodb_target.endpoint_arn
}


data "local_file" "map_rule_content" {
filename = var.map_rule_path
}

data "local_file" "repl_task_content" {
filename = var.repl_task_path
}
54 changes: 54 additions & 0 deletions dms/iam.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
resource "aws_iam_policy" "dms_access_policy" {
name = "DynamodbDMSPolicy"
path = "/"
description = "Dynamodb DMS Policy"

policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"dynamodb:*"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
EOF
}


data "aws_iam_policy_document" "dms_assume_role" {
statement {
actions = ["sts:AssumeRole"]

principals {
identifiers = ["dms.amazonaws.com"]
type = "Service"
}
}
}

resource "aws_iam_role" "dms-access-for-endpoint" {
assume_role_policy = data.aws_iam_policy_document.dms_assume_role.json
name = "dms-access-for-endpoint"
}

resource "aws_iam_role_policy_attachment" "dms-access-for-endpoint-dynamodbdbrole" {
policy_arn = aws_iam_policy.dms_access_policy.arn
role = aws_iam_role.dms-access-for-endpoint.name
}



resource "aws_iam_role" "dms-cloudwatch-logs-role" {
assume_role_policy = data.aws_iam_policy_document.dms_assume_role.json
name = "dms-cloudwatch-logs-role"
}

resource "aws_iam_role_policy_attachment" "dms-cloudwatch-logs-role-dms-cloudwatch" {
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonDMSCloudWatchLogsRole"
role = aws_iam_role.dms-cloudwatch-logs-role.name
}
132 changes: 132 additions & 0 deletions dms/variables.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
variable "allocated_storage" {
default = 20
}

variable "apply_immediately" {
default = true
}



variable "minor_version_upgrade" {
default = true
}

variable "engine_version" {
default = "3.1.4"
}

variable "is_multi_az" {
default = true
}

variable "maintaince_window" {
default = "sun:10:30-sun:14:30"
}


variable "publicly_accessible" {
default = true
}

variable "instance_class" {
default = "dms.t2.micro"
}

variable "instance_id" {
default = "dynamodbmigrator"
}

variable "deletion_window" {
default = 10
}

variable "use_default_kms" {
default = true
}

variable "tags" {
type = "map"
default = {
"Project" = "KloiaDataTeam"
}
}

variable "security_groups" {
default = ["sg-123", "sg-124"]
}

variable "subnet_ids" {
default = ["subnet-123", "subnet-124"]
}

variable "mongodb_cert_arn" {
default = ""
}

variable "mongodb_port" {
default = 27017
}
variable "mongodb_server_name" {
default = ""
}

variable "mongodb_database_name" {
default = "mydatabase"
}

variable "mongodb_endpoint_id" {
default = "mongodbconnendpoint"
}

variable "extra_conn_attr_mongodb" {
default = ""
}

variable "extra_conn_attr_dynamodb" {
default = ""
}

variable "username" {
default = ""
}
variable "password" {
default = ""
}

variable "ssl_mode" {
default = "none"
}

variable "dynamodb_target_name" {
default = "dynamodbtarget"
}

variable "migration_type" {
default = "full-load"
}

variable "map_rule_path" {
default = ""
}

variable "replication_task_id" {

}

variable "repl_task_path" {

}

variable "extract_doc_id" {
default = true
}

variable "metadata_mode" {
default = "document"
}


variable "nesting_level" {
default = "one"
}