Skip to content

Commit 9fbfca2

Browse files
committed
add 3 tf question
1 parent 3bff405 commit 9fbfca2

File tree

2 files changed

+110
-0
lines changed

2 files changed

+110
-0
lines changed

imgs/not_best_practice.png

13.6 KB
Loading

interview.md

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,10 @@
241241
- [Как блокировать tfstate](#%D0%BA%D0%B0%D0%BA-%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-tfstate)
242242
- [Как можно ресурс созданный в GUI перенести в код terraform](#%D0%BA%D0%B0%D0%BA-%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE-%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9-%D0%B2-gui-%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%B5%D1%81%D1%82%D0%B8-%D0%B2-%D0%BA%D0%BE%D0%B4-terraform)
243243
- [Отличие contidion от look up](#%D0%BE%D1%82%D0%BB%D0%B8%D1%87%D0%B8%D0%B5-contidion-%D0%BE%D1%82-look-up)
244+
- [Ты накидал код в тераформе, запустил план, вышел. После этого твой коллега накидал свой код, выполнил план, вышел. далее тебе нужно зааплаить свою инфру, будут ли какие-то ошибки](#%D1%82%D1%8B-%D0%BD%D0%B0%D0%BA%D0%B8%D0%B4%D0%B0%D0%BB-%D0%BA%D0%BE%D0%B4-%D0%B2-%D1%82%D0%B5%D1%80%D0%B0%D1%84%D0%BE%D1%80%D0%BC%D0%B5-%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D1%82%D0%B8%D0%BB-%D0%BF%D0%BB%D0%B0%D0%BD-%D0%B2%D1%8B%D1%88%D0%B5%D0%BB-%D0%BF%D0%BE%D1%81%D0%BB%D0%B5-%D1%8D%D1%82%D0%BE%D0%B3%D0%BE-%D1%82%D0%B2%D0%BE%D0%B9-%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%B3%D0%B0-%D0%BD%D0%B0%D0%BA%D0%B8%D0%B4%D0%B0%D0%BB-%D1%81%D0%B2%D0%BE%D0%B9-%D0%BA%D0%BE%D0%B4-%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D0%BB-%D0%BF%D0%BB%D0%B0%D0%BD-%D0%B2%D1%8B%D1%88%D0%B5%D0%BB-%D0%B4%D0%B0%D0%BB%D0%B5%D0%B5-%D1%82%D0%B5%D0%B1%D0%B5-%D0%BD%D1%83%D0%B6%D0%BD%D0%BE-%D0%B7%D0%B0%D0%B0%D0%BF%D0%BB%D0%B0%D0%B8%D1%82%D1%8C-%D1%81%D0%B2%D0%BE%D1%8E-%D0%B8%D0%BD%D1%84%D1%80%D1%83-%D0%B1%D1%83%D0%B4%D1%83%D1%82-%D0%BB%D0%B8-%D0%BA%D0%B0%D0%BA%D0%B8%D0%B5-%D1%82%D0%BE-%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8)
245+
- [У вас есть 20 серверов, созданных с помощью Terraform, но вы хотите удалить один из них. Можно ли уничтожить один ресурс из нескольких ресурсов без правки в самих файлах?](#%D1%83-%D0%B2%D0%B0%D1%81-%D0%B5%D1%81%D1%82%D1%8C-20-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%BE%D0%B2-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D1%81-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E-terraform-%D0%BD%D0%BE-%D0%B2%D1%8B-%D1%85%D0%BE%D1%82%D0%B8%D1%82%D0%B5-%D1%83%D0%B4%D0%B0%D0%BB%D0%B8%D1%82%D1%8C-%D0%BE%D0%B4%D0%B8%D0%BD-%D0%B8%D0%B7-%D0%BD%D0%B8%D1%85-%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE-%D0%BB%D0%B8-%D1%83%D0%BD%D0%B8%D1%87%D1%82%D0%BE%D0%B6%D0%B8%D1%82%D1%8C-%D0%BE%D0%B4%D0%B8%D0%BD-%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81-%D0%B8%D0%B7-%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D1%85-%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D0%BE%D0%B2-%D0%B1%D0%B5%D0%B7-%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B8-%D0%B2-%D1%81%D0%B0%D0%BC%D0%B8%D1%85-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%D1%85)
246+
- [Какие есть best practice для ухаживания за tfstate file?](#%D0%BA%D0%B0%D0%BA%D0%B8%D0%B5-%D0%B5%D1%81%D1%82%D1%8C-best-practice-%D0%B4%D0%BB%D1%8F-%D1%83%D1%85%D0%B0%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-%D0%B7%D0%B0-tfstate-file)
247+
- [У вас есть несколько сред — dev, stage, prod для вашего приложения, и вы хотите использовать один и тот же код для всех этих сред. Как ты можешь это сделать?](#%D1%83-%D0%B2%D0%B0%D1%81-%D0%B5%D1%81%D1%82%D1%8C-%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE-%D1%81%D1%80%D0%B5%D0%B4--dev-stage-prod-%D0%B4%D0%BB%D1%8F-%D0%B2%D0%B0%D1%88%D0%B5%D0%B3%D0%BE-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B8-%D0%B2%D1%8B-%D1%85%D0%BE%D1%82%D0%B8%D1%82%D0%B5-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-%D0%BE%D0%B4%D0%B8%D0%BD-%D0%B8-%D1%82%D0%BE%D1%82-%D0%B6%D0%B5-%D0%BA%D0%BE%D0%B4-%D0%B4%D0%BB%D1%8F-%D0%B2%D1%81%D0%B5%D1%85-%D1%8D%D1%82%D0%B8%D1%85-%D1%81%D1%80%D0%B5%D0%B4-%D0%BA%D0%B0%D0%BA-%D1%82%D1%8B-%D0%BC%D0%BE%D0%B6%D0%B5%D1%88%D1%8C-%D1%8D%D1%82%D0%BE-%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C)
244248

245249
<!-- /TOC -->
246250

@@ -5382,3 +5386,109 @@ https://github.com/pixelb/ps_mem
53825386
```
53835387
53845388
----
5389+
5390+
### Ты накидал код в тераформе, запустил план, вышел. После этого твой коллега накидал свой код, выполнил план, вышел. далее тебе нужно зааплаить свою инфру, будут ли какие-то ошибки
5391+
5392+
- Ответ
5393+
5394+
Нет, ведь при **terraform plan** файл tfstate не меняется, а только показывается как будет применяться новые изменения к текущей инфраструктуре.
5395+
5396+
---
5397+
5398+
### У вас есть 20 серверов, созданных с помощью Terraform, но вы хотите удалить один из них. Можно ли уничтожить один ресурс из нескольких ресурсов без правки в самих файлах?
5399+
5400+
- Ответ
5401+
5402+
Да можно с помощью команды terraform destroy и флага --target
5403+
5404+
```bash
5405+
5406+
terraform destroy -target=aws_instance.my_instance
5407+
5408+
```
5409+
---
5410+
5411+
### Какие есть best practice для ухаживания за tfstate file?
5412+
5413+
- Ответ
5414+
5415+
- Хранить фалй удаленно, например в s3 backet, для обеспечения совместной работы
5416+
и безопасности.
5417+
- Блокирования состояния на время применения инфраструктуры, для того что бы предотвратить конфликтов между изменениями.
5418+
- Ограничения доступа. Доступ к стейт файлу доступ мог получить только авторизованный пользователь.
5419+
- Настройка автоматических бэкапов, для того что бы не потерять состояние инфры
5420+
5421+
---
5422+
5423+
### У вас есть несколько сред — dev, stage, prod для вашего приложения, и вы хотите использовать один и тот же код для всех этих сред. Как ты можешь это сделать?
5424+
5425+
- Ответ
5426+
5427+
Есть два вариант как это можно сделать.
5428+
5429+
Через модули:
5430+
5431+
- Ты пишешь код инфраструктуры, в variable файл выносишь все нужные параметры, что бы их потом можно было заменить, в outputs файл выносишь все нужные выходные данные.
5432+
5433+
- Создаешь рядом с папкой с модулем создаешь уже папку проекта с папками под каждое окружение.
5434+
В них уже создаешь условно файлик main.tf и в нем прописываешь блок кода module, и в коде проекта в среде прод этот блок кода может выглядить как:
5435+
5436+
```HCL
5437+
5438+
module "vpc_prod" {
5439+
source = "../../modules/vpc_and_network"
5440+
env = "production"
5441+
cidr_block = "10.100.1.0/24"
5442+
5443+
publick_cidr_subntet = [
5444+
"10.100.12.0/24",
5445+
"10.100.13.0/24",
5446+
"10.100.14.0/24",
5447+
]
5448+
private_cidr_subnets = [
5449+
"10.100.21.0/24",
5450+
"10.100.22.0/24"
5451+
]
5452+
}
5453+
#так же это могут быть модули, которые хранятся удаленно
5454+
5455+
```
5456+
5457+
Структура папок может выглядить вот так:
5458+
5459+
![not_best](./imgs/not_best_practice.png)
5460+
5461+
Env по папкам это часто используется, но на деле это противоречит DRY.
5462+
Тут в качестве бест практис лучше иметь конфиги террагрунта под каждый env со своими переменными под окружени.
5463+
5464+
Структура папок по бестпрактис может выглядить вот так:
5465+
5466+
![better](./imgs/folder_struct_best_practice.png)
5467+
5468+
5469+
5470+
- Есть метод через workspace который почти нигде не используется.
5471+
5472+
- Так же в качестве best practice разграничение по аккам используется, с точки зрения тф нужно будет деплоиться на разных акках
5473+
5474+
В коде это будет выглядить как:
5475+
5476+
```HCL
5477+
5478+
provider "aws" {
5479+
region = "eu-central-2"
5480+
5481+
5482+
assume_role {
5483+
role_arn = "arn:aws:iam::1234567890:role/RemoteAdministrator"
5484+
session_name = "terraform session"
5485+
5486+
}
5487+
5488+
```
5489+
5490+
На аккаунте на котором будет происходить деплой должна быть соответсвующая роль которая позволяет это делать, либо нужно вводить access_key и secret_key
5491+
5492+
5493+
---
5494+

0 commit comments

Comments
 (0)