[{"data":1,"prerenderedAt":1979},["ShallowReactive",2],{"cat-infrastructure":3},[4],{"_path":5,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":9,"description":10,"date":11,"layout":12,"subtitle":10,"image":13,"optimized_image":13,"category":14,"tags":15,"author":19,"paginate":7,"body":20,"_type":1973,"_id":1974,"_source":1975,"_file":1976,"_stem":1977,"_extension":1978},"/posts/manage-aws-infrastructure-with-terraform","posts",false,"","Bootstrap complete Java application infrastructure in AWS with Terraform","How to bootstrap a Java + MySql application infrastructure with terraform","2020-12-02T11:00:00.000Z","post","/assets/img/uploads/infrastructure.jpg","infrastructure",[16,17,18],"terraform","aws","java","jaimedearcos",{"type":21,"children":22,"toc":1966},"root",[23,37,44,49,59,65,70,105,110,549,555,560,982,988,1000,1894,1900,1905,1939,1960],{"type":24,"tag":25,"props":26,"children":27},"element","p",{},[28,35],{"type":24,"tag":29,"props":30,"children":31},"strong",{},[32],{"type":33,"value":34},"text","Terraform",{"type":33,"value":36}," provides a way of describe infrastructure as code. Terraform will manage the communication with the\ninfrastructure provider (Amazon AWS in this example) to create, update or delete infrastructure resources.",{"type":24,"tag":38,"props":39,"children":41},"h2",{"id":40},"bootstrap-elasticbeanstalk-rds-mysql-application",[42],{"type":33,"value":43},"Bootstrap ElasticBeanstalk + RDS MySql application",{"type":24,"tag":25,"props":45,"children":46},{},[47],{"type":33,"value":48},"In the following example we are going to bootstrap the necessary infrastructure to serve a Java API connected to RDS\nMySql database.",{"type":24,"tag":25,"props":50,"children":51},{},[52],{"type":24,"tag":53,"props":54,"children":58},"img",{"alt":55,"src":56,"title":57},"aws infrastructure diagram","/assets/img/uploads/terraform-basic.png","Aws infrastructure diagram",[],{"type":24,"tag":38,"props":60,"children":62},{"id":61},"step-1-networking",[63],{"type":33,"value":64},"Step 1 - Networking",{"type":24,"tag":25,"props":66,"children":67},{},[68],{"type":33,"value":69},"We are going to create a terraform module for VPC and other networking resources:",{"type":24,"tag":71,"props":72,"children":73},"ul",{},[74,85,95],{"type":24,"tag":75,"props":76,"children":77},"li",{},[78,83],{"type":24,"tag":29,"props":79,"children":80},{},[81],{"type":33,"value":82},"VPC",{"type":33,"value":84}," - Virtual Private Cloud: Is a logical group of resources that are isolated from other VPCs and other customers\nof the Public Cloud.",{"type":24,"tag":75,"props":86,"children":87},{},[88,93],{"type":24,"tag":29,"props":89,"children":90},{},[91],{"type":33,"value":92},"VPC Subnet",{"type":33,"value":94}," : A VPC Subnet is defined by a subrange of the network IP addresses assigned to the VPC.",{"type":24,"tag":75,"props":96,"children":97},{},[98,103],{"type":24,"tag":29,"props":99,"children":100},{},[101],{"type":33,"value":102},"Security Group",{"type":33,"value":104}," : The VPC Security Groups are the way AWS implements firewalls between instances in the VPC.\nIn a VPC all inbound and outbound network traffic is denied by default. In order to allow traffic, a security group\nis defined and rules are assigned to the Security Group.",{"type":24,"tag":25,"props":106,"children":107},{},[108],{"type":33,"value":109},"The following is a terraform module to group all the needed networking resources in just one file.",{"type":24,"tag":111,"props":112,"children":116},"pre",{"className":113,"code":114,"language":115,"meta":8,"style":8},"language-ruby shiki shiki-themes github-dark github-light","resource \"aws_vpc\" \"_\" {\n  cidr_block = var.vpc_cidr\n  enable_dns_support   = var.enable_dns_support\n  enable_dns_hostnames = var.enable_dns_hostnames\n  tags = {\n    Name = \"${var.app-name}-vpc\"\n  }\n}\n\nresource \"aws_internet_gateway\" \"gateway\" {\n  vpc_id = aws_vpc._.id\n  tags = {\n    Name = \"${var.app-name}-gateway\"\n  }\n}\n\nresource \"aws_route_table\" \"route_table\" {\n  vpc_id = aws_vpc._.id\n\n  dynamic \"route\" {\n    for_each = var.routes\n\n    content {\n      cidr_block     = route.value.cidr_block\n      gateway_id     = aws_internet_gateway.gateway.id\n      instance_id    = route.value.instance_id\n      nat_gateway_id = route.value.nat_gateway_id\n    }\n  }\n  tags = {\n    Name = \"${var.app-name}-route-table\"\n  }\n}\nresource \"aws_subnet\" \"subnet-a\" {\n  vpc_id                  = aws_vpc._.id\n  cidr_block              = \"10.0.32.0/20\"\n  availability_zone       = \"${var.region}a\"\n  map_public_ip_on_launch = true\n  tags = {\n    Name = \"${var.app-name}-subnet-a\"\n  }\n}\n \noutput \"_\" {\n  value = {\n    vpc_id = aws_vpc._.id\n    subnet_a = aws_subnet.subnet-a.id \n  }\n}\n","ruby",[117],{"type":24,"tag":118,"props":119,"children":120},"code",{"__ignoreMap":8},[121,132,141,150,159,168,177,186,195,205,214,223,231,240,248,256,264,273,281,289,298,307,315,324,333,342,351,360,369,377,385,394,402,410,419,428,437,446,455,463,472,480,488,497,506,515,524,533,541],{"type":24,"tag":122,"props":123,"children":126},"span",{"class":124,"line":125},"line",1,[127],{"type":24,"tag":122,"props":128,"children":129},{},[130],{"type":33,"value":131},"resource \"aws_vpc\" \"_\" {\n",{"type":24,"tag":122,"props":133,"children":135},{"class":124,"line":134},2,[136],{"type":24,"tag":122,"props":137,"children":138},{},[139],{"type":33,"value":140},"  cidr_block = var.vpc_cidr\n",{"type":24,"tag":122,"props":142,"children":144},{"class":124,"line":143},3,[145],{"type":24,"tag":122,"props":146,"children":147},{},[148],{"type":33,"value":149},"  enable_dns_support   = var.enable_dns_support\n",{"type":24,"tag":122,"props":151,"children":153},{"class":124,"line":152},4,[154],{"type":24,"tag":122,"props":155,"children":156},{},[157],{"type":33,"value":158},"  enable_dns_hostnames = var.enable_dns_hostnames\n",{"type":24,"tag":122,"props":160,"children":162},{"class":124,"line":161},5,[163],{"type":24,"tag":122,"props":164,"children":165},{},[166],{"type":33,"value":167},"  tags = {\n",{"type":24,"tag":122,"props":169,"children":171},{"class":124,"line":170},6,[172],{"type":24,"tag":122,"props":173,"children":174},{},[175],{"type":33,"value":176},"    Name = \"${var.app-name}-vpc\"\n",{"type":24,"tag":122,"props":178,"children":180},{"class":124,"line":179},7,[181],{"type":24,"tag":122,"props":182,"children":183},{},[184],{"type":33,"value":185},"  }\n",{"type":24,"tag":122,"props":187,"children":189},{"class":124,"line":188},8,[190],{"type":24,"tag":122,"props":191,"children":192},{},[193],{"type":33,"value":194},"}\n",{"type":24,"tag":122,"props":196,"children":198},{"class":124,"line":197},9,[199],{"type":24,"tag":122,"props":200,"children":202},{"emptyLinePlaceholder":201},true,[203],{"type":33,"value":204},"\n",{"type":24,"tag":122,"props":206,"children":208},{"class":124,"line":207},10,[209],{"type":24,"tag":122,"props":210,"children":211},{},[212],{"type":33,"value":213},"resource \"aws_internet_gateway\" \"gateway\" {\n",{"type":24,"tag":122,"props":215,"children":217},{"class":124,"line":216},11,[218],{"type":24,"tag":122,"props":219,"children":220},{},[221],{"type":33,"value":222},"  vpc_id = aws_vpc._.id\n",{"type":24,"tag":122,"props":224,"children":226},{"class":124,"line":225},12,[227],{"type":24,"tag":122,"props":228,"children":229},{},[230],{"type":33,"value":167},{"type":24,"tag":122,"props":232,"children":234},{"class":124,"line":233},13,[235],{"type":24,"tag":122,"props":236,"children":237},{},[238],{"type":33,"value":239},"    Name = \"${var.app-name}-gateway\"\n",{"type":24,"tag":122,"props":241,"children":243},{"class":124,"line":242},14,[244],{"type":24,"tag":122,"props":245,"children":246},{},[247],{"type":33,"value":185},{"type":24,"tag":122,"props":249,"children":251},{"class":124,"line":250},15,[252],{"type":24,"tag":122,"props":253,"children":254},{},[255],{"type":33,"value":194},{"type":24,"tag":122,"props":257,"children":259},{"class":124,"line":258},16,[260],{"type":24,"tag":122,"props":261,"children":262},{"emptyLinePlaceholder":201},[263],{"type":33,"value":204},{"type":24,"tag":122,"props":265,"children":267},{"class":124,"line":266},17,[268],{"type":24,"tag":122,"props":269,"children":270},{},[271],{"type":33,"value":272},"resource \"aws_route_table\" \"route_table\" {\n",{"type":24,"tag":122,"props":274,"children":276},{"class":124,"line":275},18,[277],{"type":24,"tag":122,"props":278,"children":279},{},[280],{"type":33,"value":222},{"type":24,"tag":122,"props":282,"children":284},{"class":124,"line":283},19,[285],{"type":24,"tag":122,"props":286,"children":287},{"emptyLinePlaceholder":201},[288],{"type":33,"value":204},{"type":24,"tag":122,"props":290,"children":292},{"class":124,"line":291},20,[293],{"type":24,"tag":122,"props":294,"children":295},{},[296],{"type":33,"value":297},"  dynamic \"route\" {\n",{"type":24,"tag":122,"props":299,"children":301},{"class":124,"line":300},21,[302],{"type":24,"tag":122,"props":303,"children":304},{},[305],{"type":33,"value":306},"    for_each = var.routes\n",{"type":24,"tag":122,"props":308,"children":310},{"class":124,"line":309},22,[311],{"type":24,"tag":122,"props":312,"children":313},{"emptyLinePlaceholder":201},[314],{"type":33,"value":204},{"type":24,"tag":122,"props":316,"children":318},{"class":124,"line":317},23,[319],{"type":24,"tag":122,"props":320,"children":321},{},[322],{"type":33,"value":323},"    content {\n",{"type":24,"tag":122,"props":325,"children":327},{"class":124,"line":326},24,[328],{"type":24,"tag":122,"props":329,"children":330},{},[331],{"type":33,"value":332},"      cidr_block     = route.value.cidr_block\n",{"type":24,"tag":122,"props":334,"children":336},{"class":124,"line":335},25,[337],{"type":24,"tag":122,"props":338,"children":339},{},[340],{"type":33,"value":341},"      gateway_id     = aws_internet_gateway.gateway.id\n",{"type":24,"tag":122,"props":343,"children":345},{"class":124,"line":344},26,[346],{"type":24,"tag":122,"props":347,"children":348},{},[349],{"type":33,"value":350},"      instance_id    = route.value.instance_id\n",{"type":24,"tag":122,"props":352,"children":354},{"class":124,"line":353},27,[355],{"type":24,"tag":122,"props":356,"children":357},{},[358],{"type":33,"value":359},"      nat_gateway_id = route.value.nat_gateway_id\n",{"type":24,"tag":122,"props":361,"children":363},{"class":124,"line":362},28,[364],{"type":24,"tag":122,"props":365,"children":366},{},[367],{"type":33,"value":368},"    }\n",{"type":24,"tag":122,"props":370,"children":372},{"class":124,"line":371},29,[373],{"type":24,"tag":122,"props":374,"children":375},{},[376],{"type":33,"value":185},{"type":24,"tag":122,"props":378,"children":380},{"class":124,"line":379},30,[381],{"type":24,"tag":122,"props":382,"children":383},{},[384],{"type":33,"value":167},{"type":24,"tag":122,"props":386,"children":388},{"class":124,"line":387},31,[389],{"type":24,"tag":122,"props":390,"children":391},{},[392],{"type":33,"value":393},"    Name = \"${var.app-name}-route-table\"\n",{"type":24,"tag":122,"props":395,"children":397},{"class":124,"line":396},32,[398],{"type":24,"tag":122,"props":399,"children":400},{},[401],{"type":33,"value":185},{"type":24,"tag":122,"props":403,"children":405},{"class":124,"line":404},33,[406],{"type":24,"tag":122,"props":407,"children":408},{},[409],{"type":33,"value":194},{"type":24,"tag":122,"props":411,"children":413},{"class":124,"line":412},34,[414],{"type":24,"tag":122,"props":415,"children":416},{},[417],{"type":33,"value":418},"resource \"aws_subnet\" \"subnet-a\" {\n",{"type":24,"tag":122,"props":420,"children":422},{"class":124,"line":421},35,[423],{"type":24,"tag":122,"props":424,"children":425},{},[426],{"type":33,"value":427},"  vpc_id                  = aws_vpc._.id\n",{"type":24,"tag":122,"props":429,"children":431},{"class":124,"line":430},36,[432],{"type":24,"tag":122,"props":433,"children":434},{},[435],{"type":33,"value":436},"  cidr_block              = \"10.0.32.0/20\"\n",{"type":24,"tag":122,"props":438,"children":440},{"class":124,"line":439},37,[441],{"type":24,"tag":122,"props":442,"children":443},{},[444],{"type":33,"value":445},"  availability_zone       = \"${var.region}a\"\n",{"type":24,"tag":122,"props":447,"children":449},{"class":124,"line":448},38,[450],{"type":24,"tag":122,"props":451,"children":452},{},[453],{"type":33,"value":454},"  map_public_ip_on_launch = true\n",{"type":24,"tag":122,"props":456,"children":458},{"class":124,"line":457},39,[459],{"type":24,"tag":122,"props":460,"children":461},{},[462],{"type":33,"value":167},{"type":24,"tag":122,"props":464,"children":466},{"class":124,"line":465},40,[467],{"type":24,"tag":122,"props":468,"children":469},{},[470],{"type":33,"value":471},"    Name = \"${var.app-name}-subnet-a\"\n",{"type":24,"tag":122,"props":473,"children":475},{"class":124,"line":474},41,[476],{"type":24,"tag":122,"props":477,"children":478},{},[479],{"type":33,"value":185},{"type":24,"tag":122,"props":481,"children":483},{"class":124,"line":482},42,[484],{"type":24,"tag":122,"props":485,"children":486},{},[487],{"type":33,"value":194},{"type":24,"tag":122,"props":489,"children":491},{"class":124,"line":490},43,[492],{"type":24,"tag":122,"props":493,"children":494},{},[495],{"type":33,"value":496}," \n",{"type":24,"tag":122,"props":498,"children":500},{"class":124,"line":499},44,[501],{"type":24,"tag":122,"props":502,"children":503},{},[504],{"type":33,"value":505},"output \"_\" {\n",{"type":24,"tag":122,"props":507,"children":509},{"class":124,"line":508},45,[510],{"type":24,"tag":122,"props":511,"children":512},{},[513],{"type":33,"value":514},"  value = {\n",{"type":24,"tag":122,"props":516,"children":518},{"class":124,"line":517},46,[519],{"type":24,"tag":122,"props":520,"children":521},{},[522],{"type":33,"value":523},"    vpc_id = aws_vpc._.id\n",{"type":24,"tag":122,"props":525,"children":527},{"class":124,"line":526},47,[528],{"type":24,"tag":122,"props":529,"children":530},{},[531],{"type":33,"value":532},"    subnet_a = aws_subnet.subnet-a.id \n",{"type":24,"tag":122,"props":534,"children":536},{"class":124,"line":535},48,[537],{"type":24,"tag":122,"props":538,"children":539},{},[540],{"type":33,"value":185},{"type":24,"tag":122,"props":542,"children":544},{"class":124,"line":543},49,[545],{"type":24,"tag":122,"props":546,"children":547},{},[548],{"type":33,"value":194},{"type":24,"tag":38,"props":550,"children":552},{"id":551},"step-2-rds-mysql-database",[553],{"type":33,"value":554},"Step 2 - RDS MySql database",{"type":24,"tag":25,"props":556,"children":557},{},[558],{"type":33,"value":559},"Now we need to define the RDS Database with the corresponding security group, note that RDS security group has a reference\nto another security group, this will allow ingress traffic from elastic beanstalk instance to the database.",{"type":24,"tag":111,"props":561,"children":563},{"className":113,"code":562,"language":115,"meta":8,"style":8},"resource \"aws_security_group\" \"rds-sg\" {\n\n  name = \"rds-sg\"\n  description = \"RDS (terraform-managed)\"\n  vpc_id = module.vpc._.vpc_id\n\n  # Only MySQL port in for elastic beanstalk instance\n  ingress {\n    from_port       = var.rds-port\n    to_port         = var.rds-port\n    protocol        = \"tcp\"\n    security_groups = [aws_security_group.eb-sg.id]\n  }\n  # Allow all outbound traffic.\n  egress {\n    from_port   = 0\n    to_port     = 0\n    protocol    = \"-1\"\n    cidr_blocks = [\"0.0.0.0/0\"]\n  }\n  tags = {\n    Name = \"RDS_sg\"\n  }\n}\n\nresource \"aws_db_instance\" \"rds-db\" {\n\n  name                    = var.rds-schema\n  identifier              = var.rds-identifier\n\n  allocated_storage       = 20\n  backup_retention_period = 7\n  backup_window           = \"10:46-11:16\"\n  maintenance_window      = \"Mon:00:00-Mon:03:00\"\n  engine                  = \"mysql\"\n  engine_version          = \"8.0.15\"\n  instance_class          = \"db.t2.micro\"\n  username                = var.rds-username\n  password                = var.rds-password\n  port                    = var.rds-port\n  publicly_accessible     = true\n  storage_type            = \"gp2\"\n\n  allow_major_version_upgrade  = false\n  auto_minor_version_upgrade   = true\n  performance_insights_enabled = false\n  skip_final_snapshot          = true\n  final_snapshot_identifier = \"database-${var.rds-schema}-snapshot\"\n\n  vpc_security_group_ids = [aws_security_group.rds-sg.id]\n  availability_zone         = var.rds-availability_zone\n  multi_az                  = var.rds-multi_az \n}\n",[564],{"type":24,"tag":118,"props":565,"children":566},{"__ignoreMap":8},[567,575,582,590,598,606,613,621,629,637,645,653,661,668,676,684,692,700,708,716,723,730,738,745,752,759,767,774,782,790,797,805,813,821,829,837,845,853,861,869,877,885,893,900,908,916,924,932,940,947,956,965,974],{"type":24,"tag":122,"props":568,"children":569},{"class":124,"line":125},[570],{"type":24,"tag":122,"props":571,"children":572},{},[573],{"type":33,"value":574},"resource \"aws_security_group\" \"rds-sg\" {\n",{"type":24,"tag":122,"props":576,"children":577},{"class":124,"line":134},[578],{"type":24,"tag":122,"props":579,"children":580},{"emptyLinePlaceholder":201},[581],{"type":33,"value":204},{"type":24,"tag":122,"props":583,"children":584},{"class":124,"line":143},[585],{"type":24,"tag":122,"props":586,"children":587},{},[588],{"type":33,"value":589},"  name = \"rds-sg\"\n",{"type":24,"tag":122,"props":591,"children":592},{"class":124,"line":152},[593],{"type":24,"tag":122,"props":594,"children":595},{},[596],{"type":33,"value":597},"  description = \"RDS (terraform-managed)\"\n",{"type":24,"tag":122,"props":599,"children":600},{"class":124,"line":161},[601],{"type":24,"tag":122,"props":602,"children":603},{},[604],{"type":33,"value":605},"  vpc_id = module.vpc._.vpc_id\n",{"type":24,"tag":122,"props":607,"children":608},{"class":124,"line":170},[609],{"type":24,"tag":122,"props":610,"children":611},{"emptyLinePlaceholder":201},[612],{"type":33,"value":204},{"type":24,"tag":122,"props":614,"children":615},{"class":124,"line":179},[616],{"type":24,"tag":122,"props":617,"children":618},{},[619],{"type":33,"value":620},"  # Only MySQL port in for elastic beanstalk instance\n",{"type":24,"tag":122,"props":622,"children":623},{"class":124,"line":188},[624],{"type":24,"tag":122,"props":625,"children":626},{},[627],{"type":33,"value":628},"  ingress {\n",{"type":24,"tag":122,"props":630,"children":631},{"class":124,"line":197},[632],{"type":24,"tag":122,"props":633,"children":634},{},[635],{"type":33,"value":636},"    from_port       = var.rds-port\n",{"type":24,"tag":122,"props":638,"children":639},{"class":124,"line":207},[640],{"type":24,"tag":122,"props":641,"children":642},{},[643],{"type":33,"value":644},"    to_port         = var.rds-port\n",{"type":24,"tag":122,"props":646,"children":647},{"class":124,"line":216},[648],{"type":24,"tag":122,"props":649,"children":650},{},[651],{"type":33,"value":652},"    protocol        = \"tcp\"\n",{"type":24,"tag":122,"props":654,"children":655},{"class":124,"line":225},[656],{"type":24,"tag":122,"props":657,"children":658},{},[659],{"type":33,"value":660},"    security_groups = [aws_security_group.eb-sg.id]\n",{"type":24,"tag":122,"props":662,"children":663},{"class":124,"line":233},[664],{"type":24,"tag":122,"props":665,"children":666},{},[667],{"type":33,"value":185},{"type":24,"tag":122,"props":669,"children":670},{"class":124,"line":242},[671],{"type":24,"tag":122,"props":672,"children":673},{},[674],{"type":33,"value":675},"  # Allow all outbound traffic.\n",{"type":24,"tag":122,"props":677,"children":678},{"class":124,"line":250},[679],{"type":24,"tag":122,"props":680,"children":681},{},[682],{"type":33,"value":683},"  egress {\n",{"type":24,"tag":122,"props":685,"children":686},{"class":124,"line":258},[687],{"type":24,"tag":122,"props":688,"children":689},{},[690],{"type":33,"value":691},"    from_port   = 0\n",{"type":24,"tag":122,"props":693,"children":694},{"class":124,"line":266},[695],{"type":24,"tag":122,"props":696,"children":697},{},[698],{"type":33,"value":699},"    to_port     = 0\n",{"type":24,"tag":122,"props":701,"children":702},{"class":124,"line":275},[703],{"type":24,"tag":122,"props":704,"children":705},{},[706],{"type":33,"value":707},"    protocol    = \"-1\"\n",{"type":24,"tag":122,"props":709,"children":710},{"class":124,"line":283},[711],{"type":24,"tag":122,"props":712,"children":713},{},[714],{"type":33,"value":715},"    cidr_blocks = [\"0.0.0.0/0\"]\n",{"type":24,"tag":122,"props":717,"children":718},{"class":124,"line":291},[719],{"type":24,"tag":122,"props":720,"children":721},{},[722],{"type":33,"value":185},{"type":24,"tag":122,"props":724,"children":725},{"class":124,"line":300},[726],{"type":24,"tag":122,"props":727,"children":728},{},[729],{"type":33,"value":167},{"type":24,"tag":122,"props":731,"children":732},{"class":124,"line":309},[733],{"type":24,"tag":122,"props":734,"children":735},{},[736],{"type":33,"value":737},"    Name = \"RDS_sg\"\n",{"type":24,"tag":122,"props":739,"children":740},{"class":124,"line":317},[741],{"type":24,"tag":122,"props":742,"children":743},{},[744],{"type":33,"value":185},{"type":24,"tag":122,"props":746,"children":747},{"class":124,"line":326},[748],{"type":24,"tag":122,"props":749,"children":750},{},[751],{"type":33,"value":194},{"type":24,"tag":122,"props":753,"children":754},{"class":124,"line":335},[755],{"type":24,"tag":122,"props":756,"children":757},{"emptyLinePlaceholder":201},[758],{"type":33,"value":204},{"type":24,"tag":122,"props":760,"children":761},{"class":124,"line":344},[762],{"type":24,"tag":122,"props":763,"children":764},{},[765],{"type":33,"value":766},"resource \"aws_db_instance\" \"rds-db\" {\n",{"type":24,"tag":122,"props":768,"children":769},{"class":124,"line":353},[770],{"type":24,"tag":122,"props":771,"children":772},{"emptyLinePlaceholder":201},[773],{"type":33,"value":204},{"type":24,"tag":122,"props":775,"children":776},{"class":124,"line":362},[777],{"type":24,"tag":122,"props":778,"children":779},{},[780],{"type":33,"value":781},"  name                    = var.rds-schema\n",{"type":24,"tag":122,"props":783,"children":784},{"class":124,"line":371},[785],{"type":24,"tag":122,"props":786,"children":787},{},[788],{"type":33,"value":789},"  identifier              = var.rds-identifier\n",{"type":24,"tag":122,"props":791,"children":792},{"class":124,"line":379},[793],{"type":24,"tag":122,"props":794,"children":795},{"emptyLinePlaceholder":201},[796],{"type":33,"value":204},{"type":24,"tag":122,"props":798,"children":799},{"class":124,"line":387},[800],{"type":24,"tag":122,"props":801,"children":802},{},[803],{"type":33,"value":804},"  allocated_storage       = 20\n",{"type":24,"tag":122,"props":806,"children":807},{"class":124,"line":396},[808],{"type":24,"tag":122,"props":809,"children":810},{},[811],{"type":33,"value":812},"  backup_retention_period = 7\n",{"type":24,"tag":122,"props":814,"children":815},{"class":124,"line":404},[816],{"type":24,"tag":122,"props":817,"children":818},{},[819],{"type":33,"value":820},"  backup_window           = \"10:46-11:16\"\n",{"type":24,"tag":122,"props":822,"children":823},{"class":124,"line":412},[824],{"type":24,"tag":122,"props":825,"children":826},{},[827],{"type":33,"value":828},"  maintenance_window      = \"Mon:00:00-Mon:03:00\"\n",{"type":24,"tag":122,"props":830,"children":831},{"class":124,"line":421},[832],{"type":24,"tag":122,"props":833,"children":834},{},[835],{"type":33,"value":836},"  engine                  = \"mysql\"\n",{"type":24,"tag":122,"props":838,"children":839},{"class":124,"line":430},[840],{"type":24,"tag":122,"props":841,"children":842},{},[843],{"type":33,"value":844},"  engine_version          = \"8.0.15\"\n",{"type":24,"tag":122,"props":846,"children":847},{"class":124,"line":439},[848],{"type":24,"tag":122,"props":849,"children":850},{},[851],{"type":33,"value":852},"  instance_class          = \"db.t2.micro\"\n",{"type":24,"tag":122,"props":854,"children":855},{"class":124,"line":448},[856],{"type":24,"tag":122,"props":857,"children":858},{},[859],{"type":33,"value":860},"  username                = var.rds-username\n",{"type":24,"tag":122,"props":862,"children":863},{"class":124,"line":457},[864],{"type":24,"tag":122,"props":865,"children":866},{},[867],{"type":33,"value":868},"  password                = var.rds-password\n",{"type":24,"tag":122,"props":870,"children":871},{"class":124,"line":465},[872],{"type":24,"tag":122,"props":873,"children":874},{},[875],{"type":33,"value":876},"  port                    = var.rds-port\n",{"type":24,"tag":122,"props":878,"children":879},{"class":124,"line":474},[880],{"type":24,"tag":122,"props":881,"children":882},{},[883],{"type":33,"value":884},"  publicly_accessible     = true\n",{"type":24,"tag":122,"props":886,"children":887},{"class":124,"line":482},[888],{"type":24,"tag":122,"props":889,"children":890},{},[891],{"type":33,"value":892},"  storage_type            = \"gp2\"\n",{"type":24,"tag":122,"props":894,"children":895},{"class":124,"line":490},[896],{"type":24,"tag":122,"props":897,"children":898},{"emptyLinePlaceholder":201},[899],{"type":33,"value":204},{"type":24,"tag":122,"props":901,"children":902},{"class":124,"line":499},[903],{"type":24,"tag":122,"props":904,"children":905},{},[906],{"type":33,"value":907},"  allow_major_version_upgrade  = false\n",{"type":24,"tag":122,"props":909,"children":910},{"class":124,"line":508},[911],{"type":24,"tag":122,"props":912,"children":913},{},[914],{"type":33,"value":915},"  auto_minor_version_upgrade   = true\n",{"type":24,"tag":122,"props":917,"children":918},{"class":124,"line":517},[919],{"type":24,"tag":122,"props":920,"children":921},{},[922],{"type":33,"value":923},"  performance_insights_enabled = false\n",{"type":24,"tag":122,"props":925,"children":926},{"class":124,"line":526},[927],{"type":24,"tag":122,"props":928,"children":929},{},[930],{"type":33,"value":931},"  skip_final_snapshot          = true\n",{"type":24,"tag":122,"props":933,"children":934},{"class":124,"line":535},[935],{"type":24,"tag":122,"props":936,"children":937},{},[938],{"type":33,"value":939},"  final_snapshot_identifier = \"database-${var.rds-schema}-snapshot\"\n",{"type":24,"tag":122,"props":941,"children":942},{"class":124,"line":543},[943],{"type":24,"tag":122,"props":944,"children":945},{"emptyLinePlaceholder":201},[946],{"type":33,"value":204},{"type":24,"tag":122,"props":948,"children":950},{"class":124,"line":949},50,[951],{"type":24,"tag":122,"props":952,"children":953},{},[954],{"type":33,"value":955},"  vpc_security_group_ids = [aws_security_group.rds-sg.id]\n",{"type":24,"tag":122,"props":957,"children":959},{"class":124,"line":958},51,[960],{"type":24,"tag":122,"props":961,"children":962},{},[963],{"type":33,"value":964},"  availability_zone         = var.rds-availability_zone\n",{"type":24,"tag":122,"props":966,"children":968},{"class":124,"line":967},52,[969],{"type":24,"tag":122,"props":970,"children":971},{},[972],{"type":33,"value":973},"  multi_az                  = var.rds-multi_az \n",{"type":24,"tag":122,"props":975,"children":977},{"class":124,"line":976},53,[978],{"type":24,"tag":122,"props":979,"children":980},{},[981],{"type":33,"value":194},{"type":24,"tag":38,"props":983,"children":985},{"id":984},"step-3-elastic-beanstalk",[986],{"type":33,"value":987},"Step 3 - Elastic Beanstalk",{"type":24,"tag":25,"props":989,"children":990},{},[991,993,998],{"type":33,"value":992},"Elastic Beanstalk is a great way to deploy Java applications, you only need to focus on the application. The service\ncan be configured as a ",{"type":24,"tag":29,"props":994,"children":995},{},[996],{"type":33,"value":997},"single instance or load balanced",{"type":33,"value":999},". In this example we are going to deploy single instance, but\nfor production applications is highly recommended configuring as load balanced with a minimum of 2 instances, is not\nonly about performance, with this configuration when you deploy a new version AWS will replace 1 instance at the time\nand wait to be in healthy state, this way we can achieve 0 downtime.",{"type":24,"tag":111,"props":1001,"children":1003},{"className":113,"code":1002,"language":115,"meta":8,"style":8},"resource \"aws_security_group\" \"eb-sg\" {\n  name = \"eb-sg\"\n  description = \"SecurityGroup for ElasticBeanstalk environment.\"\n  vpc_id = module.vpc._.vpc_id\n  ingress {\n    from_port = 80\n    to_port = 80\n    protocol = \"tcp\"\n    cidr_blocks = [\"0.0.0.0/0\"]\n    ipv6_cidr_blocks = [\"::/0\"]\n  }\n  ingress {\n    from_port = 587\n    to_port = 587\n    protocol = \"tcp\"\n    cidr_blocks = [\"0.0.0.0/0\"]\n    ipv6_cidr_blocks = [\"::/0\"]\n  }\n  egress {\n    from_port = 0\n    to_port = 0\n    protocol = \"-1\"\n    cidr_blocks = [\"0.0.0.0/0\"]\n  }\n  tags = {\n    Name = \"EB_sg\"\n  }\n}\n\n# ElasticBeanstalk - Application\nresource \"aws_elastic_beanstalk_application\" \"eb-application\" {\n  name = var.app-name\n  depends_on = [aws_db_instance.rds-db]\n}\n\n# ElasticBeanstalk - Environment\nresource \"aws_elastic_beanstalk_environment\" \"eb-env-prod\" {\n\n  depends_on = [aws_db_instance.rds-db]\n\n  name                = \"${var.app-name}-prod\"\n  application         = aws_elastic_beanstalk_application.eb-application.name\n  solution_stack_name = data.aws_elastic_beanstalk_solution_stack.java8.name\n  cname_prefix        = var.app-name\n\n  setting {\n    namespace = \"aws:autoscaling:launchconfiguration\"\n    name = \"InstanceType\"\n    value = \"t2.micro\"\n  }\n  setting {\n    namespace = \"aws:elasticbeanstalk:environment\"\n    name = \"EnvironmentType\"\n    value = \"SingleInstance\"\n  }\n  setting {\n    namespace = \"aws:autoscaling:launchconfiguration\"\n    name = \"IamInstanceProfile\"\n    value = \"aws-elasticbeanstalk-ec2-role\"\n  }\n  setting {\n    namespace = \"aws:autoscaling:launchconfiguration\"\n    name = \"InstanceType\"\n    value = \"t2.micro\"\n  }\n  setting {\n    namespace = \"aws:elasticbeanstalk:application:environment\"\n    name = \"SPRING_PROFILES_ACTIVE\"\n    value = \"prod\"\n  }\n  setting {\n    namespace = \"aws:elasticbeanstalk:application:environment\"\n    name = \"SPRING_DATASOURCE_URL\"\n    value = \"jdbc:mysql://${aws_db_instance.rds-db.endpoint}/${aws_db_instance.rds-db.name}?useSSL=false\"\n  }\n  setting {\n    namespace = \"aws:elasticbeanstalk:application:environment\"\n    name = \"SPRING_DATASOURCE_USERNAME\"\n    value = aws_db_instance.rds-db.username\n  }\n  setting {\n    namespace = \"aws:elasticbeanstalk:application:environment\"\n    name = \"SPRING_DATASOURCE_PASSWORD\"\n    value = aws_db_instance.rds-db.password\n  }\n  setting {\n    namespace = \"aws:autoscaling:launchconfiguration\"\n    name = \"SecurityGroups\"\n    value = aws_security_group.eb-sg.id\n  }\n  setting {\n    namespace = \"aws:ec2:vpc\"\n    name      = \"VPCId\"\n    value     = module.vpc._.vpc_id\n  }\n  setting {\n    namespace = \"aws:ec2:vpc\"\n    name      = \"Subnets\"\n    value     = module.vpc._.subnet_a\n  }\n  setting {\n    namespace = \"aws:ec2:vpc\"\n    name = \"VPCId\"\n    value = module.vpc._.vpc_id\n  }\n  setting {\n    namespace = \"aws:ec2:vpc\"\n    name = \"AssociatePublicIpAddress\"\n    value = \"true\"\n  }\n}\n",[1004],{"type":24,"tag":118,"props":1005,"children":1006},{"__ignoreMap":8},[1007,1015,1023,1031,1038,1045,1053,1061,1069,1076,1084,1091,1098,1106,1114,1121,1128,1135,1142,1149,1157,1165,1173,1180,1187,1194,1202,1209,1216,1223,1231,1239,1247,1255,1262,1269,1277,1285,1292,1299,1306,1314,1322,1330,1338,1345,1353,1361,1369,1377,1384,1391,1399,1407,1416,1424,1432,1440,1449,1458,1466,1474,1482,1490,1498,1506,1514,1523,1532,1541,1549,1557,1565,1574,1583,1591,1599,1607,1616,1625,1633,1641,1649,1658,1667,1675,1683,1691,1700,1709,1717,1725,1734,1743,1752,1760,1768,1776,1785,1794,1802,1810,1818,1827,1836,1844,1852,1860,1869,1878,1886],{"type":24,"tag":122,"props":1008,"children":1009},{"class":124,"line":125},[1010],{"type":24,"tag":122,"props":1011,"children":1012},{},[1013],{"type":33,"value":1014},"resource \"aws_security_group\" \"eb-sg\" {\n",{"type":24,"tag":122,"props":1016,"children":1017},{"class":124,"line":134},[1018],{"type":24,"tag":122,"props":1019,"children":1020},{},[1021],{"type":33,"value":1022},"  name = \"eb-sg\"\n",{"type":24,"tag":122,"props":1024,"children":1025},{"class":124,"line":143},[1026],{"type":24,"tag":122,"props":1027,"children":1028},{},[1029],{"type":33,"value":1030},"  description = \"SecurityGroup for ElasticBeanstalk environment.\"\n",{"type":24,"tag":122,"props":1032,"children":1033},{"class":124,"line":152},[1034],{"type":24,"tag":122,"props":1035,"children":1036},{},[1037],{"type":33,"value":605},{"type":24,"tag":122,"props":1039,"children":1040},{"class":124,"line":161},[1041],{"type":24,"tag":122,"props":1042,"children":1043},{},[1044],{"type":33,"value":628},{"type":24,"tag":122,"props":1046,"children":1047},{"class":124,"line":170},[1048],{"type":24,"tag":122,"props":1049,"children":1050},{},[1051],{"type":33,"value":1052},"    from_port = 80\n",{"type":24,"tag":122,"props":1054,"children":1055},{"class":124,"line":179},[1056],{"type":24,"tag":122,"props":1057,"children":1058},{},[1059],{"type":33,"value":1060},"    to_port = 80\n",{"type":24,"tag":122,"props":1062,"children":1063},{"class":124,"line":188},[1064],{"type":24,"tag":122,"props":1065,"children":1066},{},[1067],{"type":33,"value":1068},"    protocol = \"tcp\"\n",{"type":24,"tag":122,"props":1070,"children":1071},{"class":124,"line":197},[1072],{"type":24,"tag":122,"props":1073,"children":1074},{},[1075],{"type":33,"value":715},{"type":24,"tag":122,"props":1077,"children":1078},{"class":124,"line":207},[1079],{"type":24,"tag":122,"props":1080,"children":1081},{},[1082],{"type":33,"value":1083},"    ipv6_cidr_blocks = [\"::/0\"]\n",{"type":24,"tag":122,"props":1085,"children":1086},{"class":124,"line":216},[1087],{"type":24,"tag":122,"props":1088,"children":1089},{},[1090],{"type":33,"value":185},{"type":24,"tag":122,"props":1092,"children":1093},{"class":124,"line":225},[1094],{"type":24,"tag":122,"props":1095,"children":1096},{},[1097],{"type":33,"value":628},{"type":24,"tag":122,"props":1099,"children":1100},{"class":124,"line":233},[1101],{"type":24,"tag":122,"props":1102,"children":1103},{},[1104],{"type":33,"value":1105},"    from_port = 587\n",{"type":24,"tag":122,"props":1107,"children":1108},{"class":124,"line":242},[1109],{"type":24,"tag":122,"props":1110,"children":1111},{},[1112],{"type":33,"value":1113},"    to_port = 587\n",{"type":24,"tag":122,"props":1115,"children":1116},{"class":124,"line":250},[1117],{"type":24,"tag":122,"props":1118,"children":1119},{},[1120],{"type":33,"value":1068},{"type":24,"tag":122,"props":1122,"children":1123},{"class":124,"line":258},[1124],{"type":24,"tag":122,"props":1125,"children":1126},{},[1127],{"type":33,"value":715},{"type":24,"tag":122,"props":1129,"children":1130},{"class":124,"line":266},[1131],{"type":24,"tag":122,"props":1132,"children":1133},{},[1134],{"type":33,"value":1083},{"type":24,"tag":122,"props":1136,"children":1137},{"class":124,"line":275},[1138],{"type":24,"tag":122,"props":1139,"children":1140},{},[1141],{"type":33,"value":185},{"type":24,"tag":122,"props":1143,"children":1144},{"class":124,"line":283},[1145],{"type":24,"tag":122,"props":1146,"children":1147},{},[1148],{"type":33,"value":683},{"type":24,"tag":122,"props":1150,"children":1151},{"class":124,"line":291},[1152],{"type":24,"tag":122,"props":1153,"children":1154},{},[1155],{"type":33,"value":1156},"    from_port = 0\n",{"type":24,"tag":122,"props":1158,"children":1159},{"class":124,"line":300},[1160],{"type":24,"tag":122,"props":1161,"children":1162},{},[1163],{"type":33,"value":1164},"    to_port = 0\n",{"type":24,"tag":122,"props":1166,"children":1167},{"class":124,"line":309},[1168],{"type":24,"tag":122,"props":1169,"children":1170},{},[1171],{"type":33,"value":1172},"    protocol = \"-1\"\n",{"type":24,"tag":122,"props":1174,"children":1175},{"class":124,"line":317},[1176],{"type":24,"tag":122,"props":1177,"children":1178},{},[1179],{"type":33,"value":715},{"type":24,"tag":122,"props":1181,"children":1182},{"class":124,"line":326},[1183],{"type":24,"tag":122,"props":1184,"children":1185},{},[1186],{"type":33,"value":185},{"type":24,"tag":122,"props":1188,"children":1189},{"class":124,"line":335},[1190],{"type":24,"tag":122,"props":1191,"children":1192},{},[1193],{"type":33,"value":167},{"type":24,"tag":122,"props":1195,"children":1196},{"class":124,"line":344},[1197],{"type":24,"tag":122,"props":1198,"children":1199},{},[1200],{"type":33,"value":1201},"    Name = \"EB_sg\"\n",{"type":24,"tag":122,"props":1203,"children":1204},{"class":124,"line":353},[1205],{"type":24,"tag":122,"props":1206,"children":1207},{},[1208],{"type":33,"value":185},{"type":24,"tag":122,"props":1210,"children":1211},{"class":124,"line":362},[1212],{"type":24,"tag":122,"props":1213,"children":1214},{},[1215],{"type":33,"value":194},{"type":24,"tag":122,"props":1217,"children":1218},{"class":124,"line":371},[1219],{"type":24,"tag":122,"props":1220,"children":1221},{"emptyLinePlaceholder":201},[1222],{"type":33,"value":204},{"type":24,"tag":122,"props":1224,"children":1225},{"class":124,"line":379},[1226],{"type":24,"tag":122,"props":1227,"children":1228},{},[1229],{"type":33,"value":1230},"# ElasticBeanstalk - Application\n",{"type":24,"tag":122,"props":1232,"children":1233},{"class":124,"line":387},[1234],{"type":24,"tag":122,"props":1235,"children":1236},{},[1237],{"type":33,"value":1238},"resource \"aws_elastic_beanstalk_application\" \"eb-application\" {\n",{"type":24,"tag":122,"props":1240,"children":1241},{"class":124,"line":396},[1242],{"type":24,"tag":122,"props":1243,"children":1244},{},[1245],{"type":33,"value":1246},"  name = var.app-name\n",{"type":24,"tag":122,"props":1248,"children":1249},{"class":124,"line":404},[1250],{"type":24,"tag":122,"props":1251,"children":1252},{},[1253],{"type":33,"value":1254},"  depends_on = [aws_db_instance.rds-db]\n",{"type":24,"tag":122,"props":1256,"children":1257},{"class":124,"line":412},[1258],{"type":24,"tag":122,"props":1259,"children":1260},{},[1261],{"type":33,"value":194},{"type":24,"tag":122,"props":1263,"children":1264},{"class":124,"line":421},[1265],{"type":24,"tag":122,"props":1266,"children":1267},{"emptyLinePlaceholder":201},[1268],{"type":33,"value":204},{"type":24,"tag":122,"props":1270,"children":1271},{"class":124,"line":430},[1272],{"type":24,"tag":122,"props":1273,"children":1274},{},[1275],{"type":33,"value":1276},"# ElasticBeanstalk - Environment\n",{"type":24,"tag":122,"props":1278,"children":1279},{"class":124,"line":439},[1280],{"type":24,"tag":122,"props":1281,"children":1282},{},[1283],{"type":33,"value":1284},"resource \"aws_elastic_beanstalk_environment\" \"eb-env-prod\" {\n",{"type":24,"tag":122,"props":1286,"children":1287},{"class":124,"line":448},[1288],{"type":24,"tag":122,"props":1289,"children":1290},{"emptyLinePlaceholder":201},[1291],{"type":33,"value":204},{"type":24,"tag":122,"props":1293,"children":1294},{"class":124,"line":457},[1295],{"type":24,"tag":122,"props":1296,"children":1297},{},[1298],{"type":33,"value":1254},{"type":24,"tag":122,"props":1300,"children":1301},{"class":124,"line":465},[1302],{"type":24,"tag":122,"props":1303,"children":1304},{"emptyLinePlaceholder":201},[1305],{"type":33,"value":204},{"type":24,"tag":122,"props":1307,"children":1308},{"class":124,"line":474},[1309],{"type":24,"tag":122,"props":1310,"children":1311},{},[1312],{"type":33,"value":1313},"  name                = \"${var.app-name}-prod\"\n",{"type":24,"tag":122,"props":1315,"children":1316},{"class":124,"line":482},[1317],{"type":24,"tag":122,"props":1318,"children":1319},{},[1320],{"type":33,"value":1321},"  application         = aws_elastic_beanstalk_application.eb-application.name\n",{"type":24,"tag":122,"props":1323,"children":1324},{"class":124,"line":490},[1325],{"type":24,"tag":122,"props":1326,"children":1327},{},[1328],{"type":33,"value":1329},"  solution_stack_name = data.aws_elastic_beanstalk_solution_stack.java8.name\n",{"type":24,"tag":122,"props":1331,"children":1332},{"class":124,"line":499},[1333],{"type":24,"tag":122,"props":1334,"children":1335},{},[1336],{"type":33,"value":1337},"  cname_prefix        = var.app-name\n",{"type":24,"tag":122,"props":1339,"children":1340},{"class":124,"line":508},[1341],{"type":24,"tag":122,"props":1342,"children":1343},{"emptyLinePlaceholder":201},[1344],{"type":33,"value":204},{"type":24,"tag":122,"props":1346,"children":1347},{"class":124,"line":517},[1348],{"type":24,"tag":122,"props":1349,"children":1350},{},[1351],{"type":33,"value":1352},"  setting {\n",{"type":24,"tag":122,"props":1354,"children":1355},{"class":124,"line":526},[1356],{"type":24,"tag":122,"props":1357,"children":1358},{},[1359],{"type":33,"value":1360},"    namespace = \"aws:autoscaling:launchconfiguration\"\n",{"type":24,"tag":122,"props":1362,"children":1363},{"class":124,"line":535},[1364],{"type":24,"tag":122,"props":1365,"children":1366},{},[1367],{"type":33,"value":1368},"    name = \"InstanceType\"\n",{"type":24,"tag":122,"props":1370,"children":1371},{"class":124,"line":543},[1372],{"type":24,"tag":122,"props":1373,"children":1374},{},[1375],{"type":33,"value":1376},"    value = \"t2.micro\"\n",{"type":24,"tag":122,"props":1378,"children":1379},{"class":124,"line":949},[1380],{"type":24,"tag":122,"props":1381,"children":1382},{},[1383],{"type":33,"value":185},{"type":24,"tag":122,"props":1385,"children":1386},{"class":124,"line":958},[1387],{"type":24,"tag":122,"props":1388,"children":1389},{},[1390],{"type":33,"value":1352},{"type":24,"tag":122,"props":1392,"children":1393},{"class":124,"line":967},[1394],{"type":24,"tag":122,"props":1395,"children":1396},{},[1397],{"type":33,"value":1398},"    namespace = \"aws:elasticbeanstalk:environment\"\n",{"type":24,"tag":122,"props":1400,"children":1401},{"class":124,"line":976},[1402],{"type":24,"tag":122,"props":1403,"children":1404},{},[1405],{"type":33,"value":1406},"    name = \"EnvironmentType\"\n",{"type":24,"tag":122,"props":1408,"children":1410},{"class":124,"line":1409},54,[1411],{"type":24,"tag":122,"props":1412,"children":1413},{},[1414],{"type":33,"value":1415},"    value = \"SingleInstance\"\n",{"type":24,"tag":122,"props":1417,"children":1419},{"class":124,"line":1418},55,[1420],{"type":24,"tag":122,"props":1421,"children":1422},{},[1423],{"type":33,"value":185},{"type":24,"tag":122,"props":1425,"children":1427},{"class":124,"line":1426},56,[1428],{"type":24,"tag":122,"props":1429,"children":1430},{},[1431],{"type":33,"value":1352},{"type":24,"tag":122,"props":1433,"children":1435},{"class":124,"line":1434},57,[1436],{"type":24,"tag":122,"props":1437,"children":1438},{},[1439],{"type":33,"value":1360},{"type":24,"tag":122,"props":1441,"children":1443},{"class":124,"line":1442},58,[1444],{"type":24,"tag":122,"props":1445,"children":1446},{},[1447],{"type":33,"value":1448},"    name = \"IamInstanceProfile\"\n",{"type":24,"tag":122,"props":1450,"children":1452},{"class":124,"line":1451},59,[1453],{"type":24,"tag":122,"props":1454,"children":1455},{},[1456],{"type":33,"value":1457},"    value = \"aws-elasticbeanstalk-ec2-role\"\n",{"type":24,"tag":122,"props":1459,"children":1461},{"class":124,"line":1460},60,[1462],{"type":24,"tag":122,"props":1463,"children":1464},{},[1465],{"type":33,"value":185},{"type":24,"tag":122,"props":1467,"children":1469},{"class":124,"line":1468},61,[1470],{"type":24,"tag":122,"props":1471,"children":1472},{},[1473],{"type":33,"value":1352},{"type":24,"tag":122,"props":1475,"children":1477},{"class":124,"line":1476},62,[1478],{"type":24,"tag":122,"props":1479,"children":1480},{},[1481],{"type":33,"value":1360},{"type":24,"tag":122,"props":1483,"children":1485},{"class":124,"line":1484},63,[1486],{"type":24,"tag":122,"props":1487,"children":1488},{},[1489],{"type":33,"value":1368},{"type":24,"tag":122,"props":1491,"children":1493},{"class":124,"line":1492},64,[1494],{"type":24,"tag":122,"props":1495,"children":1496},{},[1497],{"type":33,"value":1376},{"type":24,"tag":122,"props":1499,"children":1501},{"class":124,"line":1500},65,[1502],{"type":24,"tag":122,"props":1503,"children":1504},{},[1505],{"type":33,"value":185},{"type":24,"tag":122,"props":1507,"children":1509},{"class":124,"line":1508},66,[1510],{"type":24,"tag":122,"props":1511,"children":1512},{},[1513],{"type":33,"value":1352},{"type":24,"tag":122,"props":1515,"children":1517},{"class":124,"line":1516},67,[1518],{"type":24,"tag":122,"props":1519,"children":1520},{},[1521],{"type":33,"value":1522},"    namespace = \"aws:elasticbeanstalk:application:environment\"\n",{"type":24,"tag":122,"props":1524,"children":1526},{"class":124,"line":1525},68,[1527],{"type":24,"tag":122,"props":1528,"children":1529},{},[1530],{"type":33,"value":1531},"    name = \"SPRING_PROFILES_ACTIVE\"\n",{"type":24,"tag":122,"props":1533,"children":1535},{"class":124,"line":1534},69,[1536],{"type":24,"tag":122,"props":1537,"children":1538},{},[1539],{"type":33,"value":1540},"    value = \"prod\"\n",{"type":24,"tag":122,"props":1542,"children":1544},{"class":124,"line":1543},70,[1545],{"type":24,"tag":122,"props":1546,"children":1547},{},[1548],{"type":33,"value":185},{"type":24,"tag":122,"props":1550,"children":1552},{"class":124,"line":1551},71,[1553],{"type":24,"tag":122,"props":1554,"children":1555},{},[1556],{"type":33,"value":1352},{"type":24,"tag":122,"props":1558,"children":1560},{"class":124,"line":1559},72,[1561],{"type":24,"tag":122,"props":1562,"children":1563},{},[1564],{"type":33,"value":1522},{"type":24,"tag":122,"props":1566,"children":1568},{"class":124,"line":1567},73,[1569],{"type":24,"tag":122,"props":1570,"children":1571},{},[1572],{"type":33,"value":1573},"    name = \"SPRING_DATASOURCE_URL\"\n",{"type":24,"tag":122,"props":1575,"children":1577},{"class":124,"line":1576},74,[1578],{"type":24,"tag":122,"props":1579,"children":1580},{},[1581],{"type":33,"value":1582},"    value = \"jdbc:mysql://${aws_db_instance.rds-db.endpoint}/${aws_db_instance.rds-db.name}?useSSL=false\"\n",{"type":24,"tag":122,"props":1584,"children":1586},{"class":124,"line":1585},75,[1587],{"type":24,"tag":122,"props":1588,"children":1589},{},[1590],{"type":33,"value":185},{"type":24,"tag":122,"props":1592,"children":1594},{"class":124,"line":1593},76,[1595],{"type":24,"tag":122,"props":1596,"children":1597},{},[1598],{"type":33,"value":1352},{"type":24,"tag":122,"props":1600,"children":1602},{"class":124,"line":1601},77,[1603],{"type":24,"tag":122,"props":1604,"children":1605},{},[1606],{"type":33,"value":1522},{"type":24,"tag":122,"props":1608,"children":1610},{"class":124,"line":1609},78,[1611],{"type":24,"tag":122,"props":1612,"children":1613},{},[1614],{"type":33,"value":1615},"    name = \"SPRING_DATASOURCE_USERNAME\"\n",{"type":24,"tag":122,"props":1617,"children":1619},{"class":124,"line":1618},79,[1620],{"type":24,"tag":122,"props":1621,"children":1622},{},[1623],{"type":33,"value":1624},"    value = aws_db_instance.rds-db.username\n",{"type":24,"tag":122,"props":1626,"children":1628},{"class":124,"line":1627},80,[1629],{"type":24,"tag":122,"props":1630,"children":1631},{},[1632],{"type":33,"value":185},{"type":24,"tag":122,"props":1634,"children":1636},{"class":124,"line":1635},81,[1637],{"type":24,"tag":122,"props":1638,"children":1639},{},[1640],{"type":33,"value":1352},{"type":24,"tag":122,"props":1642,"children":1644},{"class":124,"line":1643},82,[1645],{"type":24,"tag":122,"props":1646,"children":1647},{},[1648],{"type":33,"value":1522},{"type":24,"tag":122,"props":1650,"children":1652},{"class":124,"line":1651},83,[1653],{"type":24,"tag":122,"props":1654,"children":1655},{},[1656],{"type":33,"value":1657},"    name = \"SPRING_DATASOURCE_PASSWORD\"\n",{"type":24,"tag":122,"props":1659,"children":1661},{"class":124,"line":1660},84,[1662],{"type":24,"tag":122,"props":1663,"children":1664},{},[1665],{"type":33,"value":1666},"    value = aws_db_instance.rds-db.password\n",{"type":24,"tag":122,"props":1668,"children":1670},{"class":124,"line":1669},85,[1671],{"type":24,"tag":122,"props":1672,"children":1673},{},[1674],{"type":33,"value":185},{"type":24,"tag":122,"props":1676,"children":1678},{"class":124,"line":1677},86,[1679],{"type":24,"tag":122,"props":1680,"children":1681},{},[1682],{"type":33,"value":1352},{"type":24,"tag":122,"props":1684,"children":1686},{"class":124,"line":1685},87,[1687],{"type":24,"tag":122,"props":1688,"children":1689},{},[1690],{"type":33,"value":1360},{"type":24,"tag":122,"props":1692,"children":1694},{"class":124,"line":1693},88,[1695],{"type":24,"tag":122,"props":1696,"children":1697},{},[1698],{"type":33,"value":1699},"    name = \"SecurityGroups\"\n",{"type":24,"tag":122,"props":1701,"children":1703},{"class":124,"line":1702},89,[1704],{"type":24,"tag":122,"props":1705,"children":1706},{},[1707],{"type":33,"value":1708},"    value = aws_security_group.eb-sg.id\n",{"type":24,"tag":122,"props":1710,"children":1712},{"class":124,"line":1711},90,[1713],{"type":24,"tag":122,"props":1714,"children":1715},{},[1716],{"type":33,"value":185},{"type":24,"tag":122,"props":1718,"children":1720},{"class":124,"line":1719},91,[1721],{"type":24,"tag":122,"props":1722,"children":1723},{},[1724],{"type":33,"value":1352},{"type":24,"tag":122,"props":1726,"children":1728},{"class":124,"line":1727},92,[1729],{"type":24,"tag":122,"props":1730,"children":1731},{},[1732],{"type":33,"value":1733},"    namespace = \"aws:ec2:vpc\"\n",{"type":24,"tag":122,"props":1735,"children":1737},{"class":124,"line":1736},93,[1738],{"type":24,"tag":122,"props":1739,"children":1740},{},[1741],{"type":33,"value":1742},"    name      = \"VPCId\"\n",{"type":24,"tag":122,"props":1744,"children":1746},{"class":124,"line":1745},94,[1747],{"type":24,"tag":122,"props":1748,"children":1749},{},[1750],{"type":33,"value":1751},"    value     = module.vpc._.vpc_id\n",{"type":24,"tag":122,"props":1753,"children":1755},{"class":124,"line":1754},95,[1756],{"type":24,"tag":122,"props":1757,"children":1758},{},[1759],{"type":33,"value":185},{"type":24,"tag":122,"props":1761,"children":1763},{"class":124,"line":1762},96,[1764],{"type":24,"tag":122,"props":1765,"children":1766},{},[1767],{"type":33,"value":1352},{"type":24,"tag":122,"props":1769,"children":1771},{"class":124,"line":1770},97,[1772],{"type":24,"tag":122,"props":1773,"children":1774},{},[1775],{"type":33,"value":1733},{"type":24,"tag":122,"props":1777,"children":1779},{"class":124,"line":1778},98,[1780],{"type":24,"tag":122,"props":1781,"children":1782},{},[1783],{"type":33,"value":1784},"    name      = \"Subnets\"\n",{"type":24,"tag":122,"props":1786,"children":1788},{"class":124,"line":1787},99,[1789],{"type":24,"tag":122,"props":1790,"children":1791},{},[1792],{"type":33,"value":1793},"    value     = module.vpc._.subnet_a\n",{"type":24,"tag":122,"props":1795,"children":1797},{"class":124,"line":1796},100,[1798],{"type":24,"tag":122,"props":1799,"children":1800},{},[1801],{"type":33,"value":185},{"type":24,"tag":122,"props":1803,"children":1805},{"class":124,"line":1804},101,[1806],{"type":24,"tag":122,"props":1807,"children":1808},{},[1809],{"type":33,"value":1352},{"type":24,"tag":122,"props":1811,"children":1813},{"class":124,"line":1812},102,[1814],{"type":24,"tag":122,"props":1815,"children":1816},{},[1817],{"type":33,"value":1733},{"type":24,"tag":122,"props":1819,"children":1821},{"class":124,"line":1820},103,[1822],{"type":24,"tag":122,"props":1823,"children":1824},{},[1825],{"type":33,"value":1826},"    name = \"VPCId\"\n",{"type":24,"tag":122,"props":1828,"children":1830},{"class":124,"line":1829},104,[1831],{"type":24,"tag":122,"props":1832,"children":1833},{},[1834],{"type":33,"value":1835},"    value = module.vpc._.vpc_id\n",{"type":24,"tag":122,"props":1837,"children":1839},{"class":124,"line":1838},105,[1840],{"type":24,"tag":122,"props":1841,"children":1842},{},[1843],{"type":33,"value":185},{"type":24,"tag":122,"props":1845,"children":1847},{"class":124,"line":1846},106,[1848],{"type":24,"tag":122,"props":1849,"children":1850},{},[1851],{"type":33,"value":1352},{"type":24,"tag":122,"props":1853,"children":1855},{"class":124,"line":1854},107,[1856],{"type":24,"tag":122,"props":1857,"children":1858},{},[1859],{"type":33,"value":1733},{"type":24,"tag":122,"props":1861,"children":1863},{"class":124,"line":1862},108,[1864],{"type":24,"tag":122,"props":1865,"children":1866},{},[1867],{"type":33,"value":1868},"    name = \"AssociatePublicIpAddress\"\n",{"type":24,"tag":122,"props":1870,"children":1872},{"class":124,"line":1871},109,[1873],{"type":24,"tag":122,"props":1874,"children":1875},{},[1876],{"type":33,"value":1877},"    value = \"true\"\n",{"type":24,"tag":122,"props":1879,"children":1881},{"class":124,"line":1880},110,[1882],{"type":24,"tag":122,"props":1883,"children":1884},{},[1885],{"type":33,"value":185},{"type":24,"tag":122,"props":1887,"children":1889},{"class":124,"line":1888},111,[1890],{"type":24,"tag":122,"props":1891,"children":1892},{},[1893],{"type":33,"value":194},{"type":24,"tag":38,"props":1895,"children":1897},{"id":1896},"deploy-infrastructure",[1898],{"type":33,"value":1899},"Deploy infrastructure",{"type":24,"tag":25,"props":1901,"children":1902},{},[1903],{"type":33,"value":1904},"With terraform, only we need to do is execute the following command, providing a file with all the variables we have defined",{"type":24,"tag":111,"props":1906,"children":1910},{"className":1907,"code":1908,"language":1909,"meta":8,"style":8},"language-bash shiki shiki-themes github-dark github-light","terraform apply -var-file=\"test.tfvars\"\n","bash",[1911],{"type":24,"tag":118,"props":1912,"children":1913},{"__ignoreMap":8},[1914],{"type":24,"tag":122,"props":1915,"children":1916},{"class":124,"line":125},[1917,1922,1928,1934],{"type":24,"tag":122,"props":1918,"children":1920},{"style":1919},"--shiki-default:#B392F0;--shiki-light:#6F42C1",[1921],{"type":33,"value":16},{"type":24,"tag":122,"props":1923,"children":1925},{"style":1924},"--shiki-default:#9ECBFF;--shiki-light:#032F62",[1926],{"type":33,"value":1927}," apply",{"type":24,"tag":122,"props":1929,"children":1931},{"style":1930},"--shiki-default:#79B8FF;--shiki-light:#005CC5",[1932],{"type":33,"value":1933}," -var-file=",{"type":24,"tag":122,"props":1935,"children":1936},{"style":1924},[1937],{"type":33,"value":1938},"\"test.tfvars\"\n",{"type":24,"tag":1940,"props":1941,"children":1942},"blockquote",{},[1943],{"type":24,"tag":25,"props":1944,"children":1945},{},[1946],{"type":24,"tag":1947,"props":1948,"children":1949},"em",{},[1950,1952],{"type":33,"value":1951},"You can find the complete code of this example in this ",{"type":24,"tag":1953,"props":1954,"children":1957},"a",{"href":1955,"target":1956},"https://github.com/JaimeDeArcos/terraform-aws-archetype","_blank",[1958],{"type":33,"value":1959},"GitHub repository",{"type":24,"tag":1961,"props":1962,"children":1963},"style",{},[1964],{"type":33,"value":1965},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}",{"title":8,"searchDepth":134,"depth":134,"links":1967},[1968,1969,1970,1971,1972],{"id":40,"depth":134,"text":43},{"id":61,"depth":134,"text":64},{"id":551,"depth":134,"text":554},{"id":984,"depth":134,"text":987},{"id":1896,"depth":134,"text":1899},"markdown","content:posts:manage-aws-infrastructure-with-terraform.md","content","posts/manage-aws-infrastructure-with-terraform.md","posts/manage-aws-infrastructure-with-terraform","md",1790510063185]