Автор оригинала: Bolatito Kabir.
Введение в террафору
Terraform — это инструмент для строительства, изменения и управлений и управленческой инфраструктуры и эффективно. Террафом может управлять существующими и популярными поставщиками услуг, а также пользовательские собственные решения. Управление существующими ресурсами на AWS потребует ввоза ресурсов на террафору и управлять террафом, что позволит построить другие ресурсы вокруг него.
Инфраструктура как код
Инфраструктура описана с использованием синтаксиса конфигурации высокого уровня. Это позволяет версию и лечить план вашего DataCenter вашего DataCenter. Кроме того, инфраструктура может быть разделена и повторно использована.
Планы исполнения
У террафора есть шаг «планирования», где он генерирует план выполнения. План выполнения показывает, что сделает террафору, когда вы призываете применять. Это позволяет избежать каких-либо сюрпризов, когда террафом манипулирует инфраструктуру.
terraform plan + aws_instance.example.11 ami: "ami-v1" instance_type: "t2.micro" + aws_instance.example.12 ami: "ami-v1" instance_type: "t2.micro" + aws_instance.example.13 ami: "ami-v1" instance_type: "t2.micro" + aws_instance.example.14 ami: "ami-v1" instance_type: "t2.micro" + aws_instance.example.15 ami: "ami-v1" instance_type: "t2.micro" Plan: 5 to add, 0 to change, 0 to destroy.
Вышесказанное показывает, что будет добавлено до того, как изменения будут сделаны на инфраструктуре.
График ресурсов
Террафом создает график всех ваших ресурсов и параллелизует создание и модификацию любых не зависящих от зависимых ресурсов. Из-за этого террафоруют инфраструктуру как можно эффективно, и операторы понимают зависимости в их инфраструктуре. График также может быть использован для устранения неполадок проблем, наборы изменений коммунации изменений могут быть применены к вашей инфраструктуре с минимальным человеческим взаимодействием. С ранее упомянутым планом исполнения и графиком ресурсов вы точно знаете, что изменится террафом, и в каком порядке избегая много возможных человеческих ошибок.
Функции
Использование переменных ресурсов Импорт инфраструктуры состояния инфраструктуры инфраструктуры диаграммы инфраструктуры на основе состояния пользовательских выходных переменных Сравнение инфраструктуры в качестве интерполяции инструментов кода
Далее: Развертывание инфраструктуры с использованием террафора. Шаги: Настройте учетную запись AWS Установите террафом Прикрепите учетные данные AWS Разверните один экземпляр AWS Развернуть несколько экземпляров Прикрепите упругий адрес для всех развернутых экземпляров
Настройка AWS Account
Войдите в свою учетную запись AWS, перейдите на свою консоль IAM, перейдите к «пользователям», нажмите «Добавить пользователя», чтобы создать ключ доступа и секретный ключ. Под Тип доступа Проверить Программный доступ
Нажмите кнопку «Создать пользователя» на последнем шаге, и вы сможете увидеть учетные данные безопасности для этого пользователя, состоюми от идентификатора ключей доступа и ключа секретного доступа. Вы должны сразу сохранить эти ключи, так как ключ секретного доступа никогда не будет отображаться снова. Для того чтобы Terraform сможет вносить изменения в нашу инфраструктуру AWS, нам нужно установить учетные данные AWS для пользователя. На вашем терминале:
export AWS_ACCESS_KEY_ID=(your access key id) export AWS_SECRET_ACCESS_KEY=(your secret access key) $ env |grep AWS AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXXXXX AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXX
Установите террафору
Чтобы установить террафору, найдите Соответствующий пакет Для вашей системы и скачать его. После загрузки, расстегните пакет. Террафору бежит как один двоичный по имени террафора. Любые другие файлы в пакете могут быть безопасно удалены, а Terraform будет работать. Последний шаг состоит в том, чтобы убедиться, что двоичный бинасор террафора доступен на пути. См. Эта страница для инструкции по установке пути на Linux и Mac. Эта страница содержит инструкции для настройки пути в Windows. Простая установка: Linux Скачать террафом для Linux
$ wget https://releases.hashicorp.com/terraform/0.xx.x/terraform_0.xx.x_linux_amd64.zip $ unzip terraform_0.xx.x_linux_amd64.zip
Установить путь $ sudo mv Terraform/usr/local/bin
Mac Использование Brew Установка — это самый быстрый путь Brew Unit Terraporm. Если у вас нет дома, установите его.
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null
Установите Ruby Brew Установить террафом
Окно — Скачать террафом для Windows
Примечание. Террафор упакован в качестве архива ZIP, поэтому после загрузки террафора, расстегнув пакет. Террафору бежит как один двоичный по имени террафора. Любые другие файлы в пакете могут быть безопасно удалены, а Terraform все еще функционирует Скопируйте файлы из ZIP на C: \ Terraform
Например. Это наш путь террафора. Последний шаг состоит в том, чтобы убедиться, что двоичный бинасор террафора доступен на пути. Установите путь в вашей системной утилите на панели управления.
Проверка установки После установки Terraform убедитесь, что установка, работающая, открывая новую сеанс терминала и проверяя, что Terraform доступен. Выполняя Terraform, вы должны увидеть вывод справки, аналогичный этому:
$ terraform Usage: terraform [--version] [--help][args] The available commands for execution are listed below. The most common, useful commands are shown first, followed by less common or more advanced commands. If you're just getting started with Terraform, stick with the common commands. For the other commands, please read the help and docs before usage. Common commands: apply Builds or changes infrastructure console Interactive console for Terraform interpolations # ...
Если вы получите ошибку, которую не найден террафом, ваша переменная среды пути не была правильно настроена. Пожалуйста, вернитесь обратно и убедитесь, что ваша переменная пути содержит каталог, где был установлен Terraporm.
Развертывание сервера
Терраформ код написан на языке под названием HCL В файлах с расширением .tf.
. Это декларативный язык. Таким образом, главная цель будет описывать инфраструктуру, которую мы хотим, а Terraform создаст это. Во-первых, мы должны настроить облачный провайдер, который мы хотим использовать. Создайте файл под названием Resources.tf
и добавьте следующий код в нем:
provider "aws" { region = "us-east-1" }
Это поручает террафору облачного проверу, которую вы будете использовать, в этом случае это AWS
И что вы хотите развернуть свою инфраструктуру в США-Восток-1
область. Если вы уже настроили свои учетные данные в качестве переменных среды, вам нужно только указать регион. Однако, если вы не настроили свои кредиты в качестве переменной среды, приведенные ниже работы. I.e Это указывает местонахождение ваших учетных данных AWS/Config
provider "aws" { region = "us-east-1" shared_credentials_file = "/PATH/TO/AWS/CONFIG" profile = "myAWSprofile" }
После обновления запустите ниже, чтобы инициализировать проект:
$ terraform init Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary.
Теперь мы хотим развернуть экземпляр EC2 типа T2.Micro
Отказ Для этого нам нужно указать блок ресурсов и SE конфигурацию блока ресурсов. я нам нужно установить AMI
(изображение Amazon Machine для работы на экземпляре EC2) и induction_type
Отказ Добавьте следующий код в Resources.tf.
resource "aws_instance" "server" { ami = "ami-2d39803a" instance_type = "t2.micro" }
Чтобы определить ресурс в коде террафора, ресурс определяет тип (в этом случае, AWS_INSTANCE
), имя (в этом случае Server
) и набор параметров конфигурации, специфичные для ресурса. Блок ресурсов описывает одну или несколько объектов инфраструктуры, такие как виртуальные сети, вычислительные экземпляры или компоненты более высокого уровня, такие как DNS-записи. Проверьте Ресурсная документация Отказ Чтобы создать ресурс, его целесообразно просмотреть ресурсы, которые будут созданы, прежде чем он будет создан … Используйте код ниже, чтобы увидеть, что произойдет с вашей инфраструктурой перед применением/развертыванием его. Это способ запустить здравый тест на ваши изменения перед развертыванием/применением его.
$ terraform plan Refreshing Terraform state in-memory prior to plan... The refreshed state will be used to calculate this plan, but will not be persisted to local or remote state storage. ------------------------------------------------------------------------ An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: + aws_instance.server id:ami: "ami-2d39803a" arn: associate_public_ip_address: availability_zone: cpu_core_count: cpu_threads_per_core: ebs_block_device.#: ephemeral_block_device.#: get_password_data: "false" host_id: instance_state: instance_type: "t2.micro" ipv6_address_count: ipv6_addresses.#: key_name: network_interface.#: network_interface_id: password_data: placement_group: primary_network_interface_id: private_dns: private_ip: public_dns: public_ip: root_block_device.#: security_groups.#: source_dest_check: "true" subnet_id: tenancy: volume_tags.%: vpc_security_group_ids.#: Plan: 1 to add, 0 to change, 0 to destroy. ------------------------------------------------------------------------ Note: You didn't specify an "-out" parameter to save this plan, so Terraform can't guarantee that exactly these actions will be performed if "terraform apply" is subsequently run.
Примечание. Ресурсы с плюс знаком +
Будет создан, ресурсы с минусным знаком -
Будут удалены, а ресурсы с табличкой Tilde ~
будет модифицирован. Чтобы создать экземпляр, применить Terraporm. Обойти Да
Оперативное использование террафора применимо -Ато-одобрение.
$ terraform apply -auto-approve aws_instance.server: Creating... ami: "" => "ami-2d39803a" arn: "" => "" associate_public_ip_address: "" => " " availability_zone: "" => " " cpu_core_count: "" => " " cpu_threads_per_core: "" => " " ebs_block_device.#: "" => " " ephemeral_block_device.#: "" => " " get_password_data: "" => "false" host_id: "" => " " instance_state: "" => " " instance_type: "" => "t2.micro" ipv6_address_count: "" => " " ipv6_addresses.#: "" => " " key_name: "" => " " network_interface.#: "" => " " network_interface_id: "" => " " password_data: "" => " " placement_group: "" => " " primary_network_interface_id: "" => " " private_dns: "" => " " private_ip: "" => " " public_dns: "" => " " public_ip: "" => " " root_block_device.#: "" => " " security_groups.#: "" => " " source_dest_check: "" => "true" subnet_id: "" => " " tenancy: "" => " " volume_tags.%: "" => " " vpc_security_group_ids.#: "" => " " aws_instance.server: Still creating... (10s elapsed) aws_instance.server: Still creating... (20s elapsed) aws_instance.server: Still creating... (30s elapsed) aws_instance.server: Creation complete after 36s (ID: i-0bf984bef5ff354d6) Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Примечание. Для предоставления экземпляра EC2 потребовалось 36S для предоставления экземпляра EC2 в AWS, вручную может занять не менее 2 минут. Другой файл Terraform.tfstate
Будет сгенерирован, который содержит состояние и всю информацию, приписываемую экземпляру EC2. В настоящее время его сохраняют локально, в предстоящей главе мы автоматически храним файл в закрепленном ведре S3 для соображений безопасности.
{ "version": 3, "terraform_version": "0.11.11", "serial": 1, "lineage": "c2d70ed5-xxxxx-xxxx-xxxx-xxxxxxxx", "modules": [ { "path": [ "root" ], "outputs": {}, "resources": { "aws_instance.server": { "type": "aws_instance", "depends_on": [], "primary": { "id": "i-0bf984bef5ff354d6", "attributes": { "ami": "ami-2d39803a", "arn": "arn:aws:ec2:us-east-1:139912354378:instance/i-0bf984bef5ff354d6", "associate_public_ip_address": "true", "availability_zone": "us-east-1c", "cpu_core_count": "1", "cpu_threads_per_core": "1", "credit_specification.#": "1", "credit_specification.0.cpu_credits": "standard", "disable_api_termination": "false", "ebs_block_device.#": "0", "ebs_optimized": "false", "ephemeral_block_device.#": "0", "get_password_data": "false", "iam_instance_profile": "", "id": "i-0bf984bef5ff354d6", "instance_state": "running", "instance_type": "t2.micro", "ipv6_addresses.#": "0", "key_name": "", "monitoring": "false", "network_interface.#": "0", "network_interface_id": "eni-0372xxxxxx", "password_data": "", "placement_group": "", "primary_network_interface_id": "eni-0372xxxxxxx", "private_dns": "ip-172-31-53-112.ec2.internal", "private_ip": "172.31.53.112", "public_dns": "ec2-52-91-71-43.compute-1.amazonaws.com", "public_ip": "52.91.71.43", "root_block_device.#": "1", "root_block_device.0.delete_on_termination": "true", "root_block_device.0.iops": "100", "root_block_device.0.volume_id": "vol-0394832bb747e9bf1", "root_block_device.0.volume_size": "8", "root_block_device.0.volume_type": "gp2", "security_groups.#": "1", "security_groups.xxxx": "default", "source_dest_check": "true", "subnet_id": "subnet-xxxxxxx", "tags.%": "0", "tenancy": "default", "volume_tags.%": "0", "vpc_security_group_ids.#": "1", "vpc_security_group_ids.xxxxx": "sg-xxxxxxxx" }, "meta": { "e2bfb730-xxxx-xxxx-xxx-xxxxxxx": { "create": 600000000000, "delete": 1200000000000, "update": 600000000000 }, "schema_version": "1" }, "tainted": false }, "deposed": [], "provider": "provider.aws" } }, "depends_on": [] } ] }
Развертывание сервера завершено с использованием террафора! Чтобы проверить, войдите в консоль EC2, и вы увидите что-то подобное:
Уведомление, выход ID EC2-экземпляра I-0BF984BEF5FF354D6
Соответствует идентификатору экземпляра на консоли AWS. Теперь давайте изменим наш экземпляр EC2, предоставив имя для нашего экземпляра EC2, мы знаем, что имя настроено из тега, поэтому мы добавим раздел тега на наш код Terraform для ресурса EC2. Обновить существующий EC2-экземпляр Обновите файл Resources.tf, добавив много тегов
provider "aws" { region = "us-east-1" shared_credentials_file = "/PATH/TO/AWS/CONFIG" profile = "myAWSprofile" } resource "aws_instance" "server" { ami = "ami-2d39803a" instance_type = "t2.micro" tags { Name = "server-one" Environment = "Production" App = "ecommerce" } }
Запустите план предварительного просмотра
$ terraform plan Refreshing Terraform state in-memory prior to plan... The refreshed state will be used to calculate this plan, but will not be persisted to local or remote state storage. aws_instance.server: Refreshing state... (ID: i-0bf984bef5ff354d6) ------------------------------------------------------------------------ An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: ~ update in-place Terraform will perform the following actions: ~ aws_instance.server tags.%: "0" => "3" tags.App: "" => "ecommerce" tags.Environment: "" => "Production" tags.Name: "" => "server-one" Plan: 0 to add, 1 to change, 0 to destroy. ------------------------------------------------------------------------
Примечание: вы не уточняли -OUT
Параметр, чтобы сохранить этот план, поэтому террафом не может гарантировать, что именно эти действия будут выполнены, если Террафом применяется
впоследствии работает. Поскольку террафом отслеживает все ресурсы, которые он создал, поэтому он знает, что экземпляр EC2 уже существует. ID
Для развернутого экземпляра EC2 является I-0BF984BEF5FF354D6
Затем он показывает разницу между текущим и новым предполагаемым изменением, обозначенным со знаком ~
Отказ Примените изменения и проверьте на консоли.
$ terraform apply -auto-approve aws_instance.server: Refreshing state... (ID: i-0bf984bef5ff354d6) aws_instance.server: Modifying... (ID: i-0bf984bef5ff354d6) tags.%: "0" => "3" tags.App: "" => "ecommerce" tags.Environment: "" => "Production" tags.Name: "" => "server-one" aws_instance.server: Modifications complete after 3s (ID: i-0bf984bef5ff354d6) Apply complete! Resources: 0 added, 1 changed, 0 destroyed.
Для террафора потребовалось 3, чтобы применить это изменение в экземпляра EC2. Полное видео https://bolatito.s3.amazonaws.com/terraformvideo1.mov.
Исходный код: https://github.com/iamtito/DevOps/tree/Terraform/Terraform/example1
Это все фольклор. Не стесняйтесь указывать на любую опечачу, сделать некоторые исправления и внести свой вклад в этот пост или отправить PR
Следующий : Развертывание нескольких разных экземпляров
Оригинал: «https://www.codementor.io/@bolatitokabir/terraform-part-i-tnwwer5n4»