Рубрики
Uncategorized

Понимание террафора на AWS: Разорвании экземпляров EC2

Развертывание сервера — это действительно легко развернуть сервер с использованием террафора? Часть I — HTTPS: //dev.to/iamt … Помечено террафором, дежоптом, AWS, учебником.

Развертывание сервера Это действительно легко развернуть сервер с использованием террафора? Часть I — https://dev.to/iamtito/underStandinging-terrasorm-152k Тераформ код написан на языке, называемом HCl в файлах с расширением .tf. Это декларативный язык. Таким образом, главная цель будет описывать инфраструктуру, которую мы хотим, а Terraform создаст его. Во-первых, мы должны настроить облачный провайдер (ы), который мы хотим использовать. Создайте файл под названием Ressional.tf и добавьте следующий код в нем:

provider "aws" {
  region = "us-east-1"
}

Это указывает на террафору облачным проверенным, которые вы будете использовать, в этом случае он AWS и что вы хотите развернуть свою инфраструктуру в регионе США-Востока-1. Если вы уже настроили свои учетные данные в качестве переменных среды, вам нужно только указать регион. Однако, если вы не настроили свои кредиты в качестве переменной среды, приведенные ниже работы. I.e Он указывает местонахождение учетных данных/конфигурации AWS

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 Отказ Для этого нам нужно указать блок ресурсов и установить конфигурацию блока ресурсов. I.e Нам нужно установить AMI (изображение Amazon Machine для запуска на экземпляр EC2) и экземпляр_type. Добавьте следующий код в Ressional.tf файл

provider "aws" {
  region = "us-east-1"
}
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 ~ будет модифицирован. Чтобы создать экземпляр, запустите Террафом применяется Отказ Обход . Да Подскажите, используя Террафом применяется -auto-aperove Команда для создания ресурсов террафора.

$ 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.

Примечание: это заняло 36s Для террафора для предоставления экземпляра EC2 в AWS вручную он мог пару минут.

Состояние экземпляра EC2 создано и вся информация, приписываемая экземпляру, хранятся в Terraform.tfstate файл. В настоящее время его сохранено локально. В следующем следующем сообщении государство будет храниться в удаленном месте, чтобы сделать его для облегчения контроля версий, безопаснее хранения и выводы делегаций в несколько команд. Террафору поддерживает хранение состояния в облаке террафора, Hashicorp Consul, Amazon S3, Clibaba Cloud OSS и многое другое.

{
    "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. Обновите Ressional.tf файл, добавив вещи теги

provider "aws" {
  region = "us-east-1"
}
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 Параметр, чтобы сохранить этот план, поэтому террафом не может гарантировать, что именно эти действия будут выполнены, если Террафом применяется впоследствии работает. Поскольку Terraform отслеживает все ресурсы, которые он создал, поэтому он знает, что экземпляр 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.

Это заняло 3s Для террафора применить это изменение в экземпляр EC2. Исходный код: https://github.com/iamtito/DevOps/tree/Terraform/Terraform/example1

Это все люди. Не стесняйтесь указывать на любую ошибку, внесите некоторые исправления и внесите свой вклад в этот пост в разделе комментариев.

Далее Прикрепление рекорда эластики и DNS (Market53) с использованием террафора

Оригинал: «https://dev.to/iamtito/understanding-terraform-part-ii-4il3»