Thank you for reading this post, don't forget to subscribe!
В нашем случае мы создадим виртуальную машину EC2 и балансировщик нагрузки ELB, а также необходимые дополнительные конфигурации в security-group для пропуска трафика.
для начала создадим файл с переменными, в которых будут прописаны наши персональные данные для подключения к облаку AWS. Файл назовем variables.tf. Все файлы с расширением .tf в текущей папке будут обработаны terrafrom при выполнении.
1 2 3 4 5 |
variable "access_key" {} variable "secret_key" {} variable "region" { default = "us-east-2" } |
Конкретные значения этих переменных пропишем в файле terraform.tfvars, который также обрабатывается terraform при запуске.
1 2 3 |
access_key = "SOMEACCESSKEY" secret_key = "SOMESECRETKEY" region = "us-east-2" |
Теперь, создадим файл с базовыми настройками подключения к AWS и описанием инстанса EC2. Файл назовем ec2.tf. Его содержимое представлено ниже.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
provider "aws" { access_key = "${var.access_key}" secret_key = "${var.secret_key}" region = "${var.region}" } resource "aws_instance" "web1" { ami = "ami-4b7d572e" instance_type = "t2.micro" key_name = "MyKeyPair" vpc_security_group_ids = ["${aws_security_group.my_sg.id}"] } resource "aws_eip" "ip" { instance = "${aws_instance.web1.id}" } |
Выше мы создаем provider, который описывает параметры подключения к AWS. После этого создаем инстанс EC2 web1 и публичный адрес этого инстанса. В настройках инстанса указана переменная security-group, которая указывает на те правила пропуска трафика из Интернета к нашим ресурсам в облаке Amazon. Данная security-group прописана у нас в отдельном файле acl.tf. Содержимое этого файла ниже.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
name = "my_sg" description = "Security Group for access EC2." ingress { from_port = 22 to_port = 22 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } ingress { from_port = -1 to_port = -1 protocol = "icmp" cidr_blocks = ["0.0.0.0/0"] } ingress { from_port = 80 to_port = 80 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } egress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] } tags { Name = "MySG", Description = "Security group for my aws services" } } |
В правилах мы разрешаем HTTP, SSH и ICMP входящий трафик, а также весь исходящий трафик.
И в завершение создадим базовый классический балансировщик нагрузки aws elb, который будет пробрасывать трафик снаружи на наши aws сервера (в данном примере на 1 виртуальный сервер). Файл elb.tf приведен ниже.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
resource "aws_elb" "elb" { name = "my-elb" subnets = ["${aws_instance.web1.subnet_id}"] security_groups = ["${aws_security_group.my_sg.id}"] listener { instance_port = 80 instance_protocol = "http" lb_port = 80 lb_protocol = "http" } health_check { healthy_threshold = 2 unhealthy_threshold = 2 timeout = 3 target = "HTTP:80/" interval = 30 } instances = ["${aws_instance.web1.id}"] cross_zone_load_balancing = true idle_timeout = 400 connection_draining = true connection_draining_timeout = 400 tags { Name = "terraform-elb" } } |
В файле elb.tf мы создаем балансировщик как ресурс aws_elb. В нем указываем, какой тип трафика мы будем принимать, а также на какие инстансы EC2 этот трафик будем балансировать.
Вот пожалуй и все. Выполняем в консоли команду #terraform apply. В результате выполнения этой команды получаем разворачиванией нашей IT инфраструктуры в облаке Amazon. Можно подключаться к инстансу EC2 через SSH, устанавливать нужный софт для веб приложения. Но это уже не про terraform, поэтому останавливаться на этом не будем.
C помощью команды #aws elb describe-load-balancers узнаем DNS имя нашего балансировщика. Теперь направив HTTP трафик на это имя, мы получим данный трафик на наших EC2 серверах.