├── README.md ├── dns-and-dhcp.tf ├── ec2-machines.tf ├── networks.tf ├── routing-and-network.tf ├── securitygroups.tf ├── subnets.tf └── variables.tf /README.md: -------------------------------------------------------------------------------- 1 | # A COMPLETE AWS ENVIRONMENT WITH TERRAFORM 2 | this repo is only to store the files of the article published on linuxacademy article 3 | 4 | https://linuxacademy.com/howtoguides/posts/show/topic/13922-a-complete-aws-environment-with-terraform 5 | 6 | You can find full instructions in the article : 7 | -------------------------------------------------------------------------------- /dns-and-dhcp.tf: -------------------------------------------------------------------------------- 1 | resource "aws_vpc_dhcp_options" "mydhcp" { 2 | domain_name = "${var.DnsZoneName}" 3 | domain_name_servers = ["AmazonProvidedDNS"] 4 | tags { 5 | Name = "My internal name" 6 | } 7 | } 8 | 9 | resource "aws_vpc_dhcp_options_association" "dns_resolver" { 10 | vpc_id = "${aws_vpc.terraformmain.id}" 11 | dhcp_options_id = "${aws_vpc_dhcp_options.mydhcp.id}" 12 | } 13 | 14 | /* DNS PART ZONE AND RECORDS */ 15 | #resource "aws_route53_zone" "main" { 16 | # name = "${var.DnsZoneName}" 17 | # vpc_id = "${aws_vpc.terraformmain.id}" 18 | # comment = "Managed by terraform" 19 | #} 20 | # This throws this error: 21 | # Error: aws_route53_zone.main: "vpc_id": [REMOVED] use 'vpc' configuration block instead 22 | # so change it accordingly: 23 | resource "aws_route53_zone" "main" { 24 | name = "${var.DnsZoneName}" 25 | vpc { 26 | vpc_id = "${aws_vpc.terraformmain.id}" 27 | } 28 | comment = "Managed by terraform" 29 | } 30 | 31 | resource "aws_route53_record" "database" { 32 | zone_id = "${aws_route53_zone.main.zone_id}" 33 | name = "mydatabase.${var.DnsZoneName}" 34 | type = "A" 35 | ttl = "300" 36 | records = ["${aws_instance.database.private_ip}"] 37 | } 38 | -------------------------------------------------------------------------------- /ec2-machines.tf: -------------------------------------------------------------------------------- 1 | resource "aws_instance" "phpapp" { 2 | ami = "${lookup(var.AmiLinux, var.region)}" 3 | instance_type = "t2.micro" 4 | associate_public_ip_address = "true" 5 | subnet_id = "${aws_subnet.PublicAZA.id}" 6 | vpc_security_group_ids = ["${aws_security_group.FrontEnd.id}"] 7 | key_name = "${var.key_name}" 8 | tags { 9 | Name = "phpapp" 10 | } 11 | user_data = <> /var/www/html/calldb.php 18 | echo "\$conn = new mysqli('mydatabase.linuxacademy.internal', 'root', 'secret', 'test');" >> /var/www/html/calldb.php 19 | echo "\$sql = 'SELECT * FROM mytable'; " >> /var/www/html/calldb.php 20 | echo "\$result = \$conn->query(\$sql); " >> /var/www/html/calldb.php 21 | echo "while(\$row = \$result->fetch_assoc()) { echo 'the value is: ' . \$row['mycol'] ;} " >> /var/www/html/calldb.php 22 | echo "\$conn->close(); " >> /var/www/html/calldb.php 23 | echo "?>" >> /var/www/html/calldb.php 24 | HEREDOC 25 | } 26 | 27 | resource "aws_instance" "database" { 28 | ami = "${lookup(var.AmiLinux, var.region)}" 29 | instance_type = "t2.micro" 30 | associate_public_ip_address = "false" 31 | subnet_id = "${aws_subnet.PrivateAZA.id}" 32 | vpc_security_group_ids = ["${aws_security_group.Database.id}"] 33 | key_name = "${var.key_name}" 34 | tags { 35 | Name = "database" 36 | } 37 | user_data = <