Рубрики
Uncategorized

Terraform для начинающих — AWS

Учебное путешествие #roadtodevops на прошлой неделе я выбираю Terraform в качестве учебной и учебной теми …. Tagged с DevOps, AWS.

На прошлой неделе я выбираю 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
применять Чтобы добавить все определения ресурсов.
шоу Чтобы перечислить информацию о ресурсах и текущее состояние
разрушать Чтобы удалить все определенные ресурсы.

Начало

  1. Создайте папку в своей машине.

  2. Создайте файлы My-first-vm.tf Анкет

  3. Откройте файлы в редакторе и запустите код.

# 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»