На прошлой неделе я выбираю Terraform в качестве учебной и учебной темы.
Terraform Это очень полезные и мощные инструменты для разработки DevOps, он позволяет написать план (инфраструктура в качестве кода) и управлять своим облачным сервисом.
Что означает, что вы можете написать облачную инфраструктуру в кодировании, например, определить, сколько услуг Instanse, какой номер порта вы должны активно активно в брандмауэре. Интересно обработать так много серверов всего несколько строк кода.
Вступление
Используя Terraform для развертывания виртуальной машины (Ubuntu OS) в AWS EC2.
Цели
В этой статье вы должны:
- Настройка учетной записи AWS
- Используйте базовую команду Terraform-Cli
- Написание языка терраформ (HCL)
- Развернуть виртуальную машину (EC2) в AWS Cloud.
Настройка AWS
Если вы новичок в AWS, пожалуйста, зарегистрируйтесь здесь, наслаждайтесь AWS бесплатный уровень
Нам нужен пользователь Доступ к ключе и Секретный идентификатор ключа от пользователя AWS и предоставить разрешение на Пользователь с Amazonec2fullaccess Анкет
Если вы не знаете, как создать пользователя -> Смотри
Терраформ
Убедитесь, что ваша машина Установите Terraform Анкет
Мы знаем, если вы пишете в JavaScript Программирование, вы назовите расширение файла как *.js . В Terraform будет определять расширение как *.tf и использование формата JSON или HCL (язык конфигурации Hashicorp).
Вы можете почувствовать странное, что такое HCL (язык конфигурации Hashicorp). Не беспокойтесь, это не сложно и легко изучать и понять. HCL Docs
Как только вы сделаете свой *.tf Скрипт, вы должны использовать Terraform-Cli выполнить tf файлы
Руки вверх
Мы будем использовать ключевые слова от Hcl Анкет
| AWS, Google | провайдер | Определить поставщика облачных услуг |
| aws_instance, Google_compute_instance | ресурс | Определите ресурс мы будем использовать |
| — | переменная | Определите переменную |
| — | выход | Вывод печати после выполнения |
Мы будем использовать ключевые слова от Terraform Cli Анкет
| в этом | Для Init Terraform Project в папке |
| план | Чтобы оценить текущую инфраструктуру из *.tf |
| применять | Чтобы добавить все определения ресурсов. |
| шоу | Чтобы перечислить информацию о ресурсах и текущее состояние |
| разрушать | Чтобы удалить все определенные ресурсы. |
Начало
Создайте папку в своей машине.
Создайте файлы
My-first-vm.tfАнкетОткройте файлы в редакторе и запустите код.
# my-first-vm.tf
# We are pointing "aws" as our provider.
provider "aws" {
region = "ap-southeast-1"
access_key = ""
secret_key = ""
}
Команда:
$ terraform init Initializing provider plugins... The following providers do not have any version constraints in configuration, so the latest version was installed. * provider.aws: version = "~> 2.12" Terraform has been successfully initialized!
Приложение ресурса «aws_instance» в мой первый-в-м .tf
provider "aws" {...}
resource "aws_instance" "ec2" { # I called name "ec2", you can change it
ami = "ami-0dad20bd1b9c8c004" # Image: Ubuntu Server 18.04 LTS (HVM), SSD Volume Type
instance_type = "t2.micro" # VM Spec
}
Команда:
$ terraform plan
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.ec2
id:
ami: "0dad20bd1b9c8c004"
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.
Это показывает, что инфраструктура собирается выполнить, вы увидите вычисляется Это потому, что Terraform поможет вам назначить значение, если вы не определены.
Дополнительным вы видите План: 1, чтобы добавить, 0, чтобы изменить, 0, чтобы уничтожить. Это означает, что 1 ресурс будет выполнен.
Итак, на этом этапе на самом деле вы уже завершили настройку экземпляра.
Команда:
$ terraform apply Terraform will perform the following actions: + aws_instance.ec2 ... Plan: 1 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes ... aws_instance.ec2: Still creating... (10s elapsed) aws_instance.ec2: Still creating... (20s elapsed) aws_instance.ec2: Creation complete after 22s (ID: i-083d6c6c7b01d1640) Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Поздравляем, вы успешны настройки экземпляра EC2 в AWS, вы можете войти в систему и проверить его на панели панели AWS.
Попробуйте эту команду, чтобы получить информацию о ресурсах.
$ terraform show aws_instance.ec2: id = i-083d6c6c7b01d1640 ami = ami-0dad20bd1b9c8c004 arn = arn:aws:ec2:ap-southeast-1:907443295242:instance/i-083d6c6c7b01d1640 associate_public_ip_address = true ... ...
!! !!
Но подождите, как вы можете получить доступ без настройки SSH в брандмауэре.
Пусть приложение ресурса «aws_security_group» в мой первый-в-м .tf
provider "aws" {...}
resource "aws_instance" "ec2" {...}
# Setup aws_security_group with SSH access
resource "aws_security_group" "allow_ssh" {
name = "allow ssh"
description = "only ssh"
ingress {
from_port = 22
to_port = 22
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"]
}
}
Теперь мы позволили нашему экземпляру «EC2» применить «aws_security_group», который мы определяем, а также назначаем класс для экземпляра.
Итак, мы можем использовать клавиатура Чтобы получить доступ к экземпляру с портом SSH 22 Анкет
Если вы не знаете, как создать клавиатуру в AWS, Смотри
provider "aws" {...}
resource "aws_instance" "ec2" { # I called name "ec2", you can change it
ami = "ami-0dad20bd1b9c8c004" # Image: Ubuntu Server 18.04 LTS (HVM), SSD Volume Type
instance_type = "t2.micro" # VM Spec
security_groups = ["${aws_security_group.allow_ssh.name}"]
key_name = "aws-anthony"
}
# Setup aws_security_group with SSH access
resource "aws_security_group" "allow_ssh" {...}
Команда:
$ terraform apply aws_instance.ec2: Refreshing state... (ID: i-083d6c6c7b01d1640) An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: + create -/+ destroy and then create replacement Terraform will perform the following actions: -/+ aws_instance.ec2 (new resource required) ... ... + aws_security_group.allow_ssh ... ... Plan: 2 to add, 0 to change, 1 to destroy. ... ... ... aws_instance.ec2: Still creating... (10s elapsed) aws_instance.ec2: Still creating... (20s elapsed) aws_instance.ec2: Creation complete after 32s (ID: i-079e9b8c1d98e4af5) Apply complete! Resources: 2 added, 0 changed, 1 destroyed.
Вы можете видеть, что это отличается от сейчас, потому что Terraform будет отслеживать весь статус ресурса в *.tfstate Анкет Так что это показывает, что это будет уничтожить предыдущий экземпляр и снова воссоздайте.
Отлично, теперь вы можете проверить это на панели панели AWS.
Наконец, вы успешно создаете экземпляр в ОС Ubuntu. Трудно войти в систему приборной панели AWS и проверить, что такое экземпляр публичного IP -адреса.
Вы можете использовать выход Ключевые слова для отображения публичного IP -адреса.
provider "aws" {...}
resource "aws_instance" "ec2" {...}
resource "aws_security_group" "allow_ssh" {...}
output "showPublicIP" {
value = "${aws_instance.ec2.*.public_dns}"
}
$ terraform apply
aws_security_group.allow_ssh: Refreshing state... (ID: sg-0ca7e9133a701f216)
aws_instance.ec2: Refreshing state... (ID: i-079e9b8c1d98e4af5)
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
Outputs:
showPublicIP = [
ec2-3-0-184-126.ap-southeast-1.compute.amazonaws.com
]
ssh -i aws-anthony.pem ubuntu@ec2-3-0-184-126.ap-southeast-1.compute.amazonaws.com
Резюме
Terraform всегда выполнять *tf В папке каждая инфраструктура должна создавать папку, такую как AWS-Instance или Google-Instance Анкет
Если вы чувствуете, что поместите все в 1 .tf Файл должен испортить, вы можете отделить по -разному .tf такой как aws_provider.tf, aws_security.tf
пример кода
Хранить пример сепиписа
Оригинал: «https://dev.to/anthonylaw/terraform-for-beginner-jak»