[graduate work] complete stage 1

This commit is contained in:
2023-03-15 10:30:10 +07:00
parent da0d12a837
commit e736eb9646

View File

@@ -2,12 +2,17 @@
Выполнение дипломной работы курса netology DevOps инженер. Оригинал задания доступен по [ссылке](https://github.com/netology-code/devops-diplom-yandexcloud/blob/main/README.md). Выполнение дипломной работы курса netology DevOps инженер. Оригинал задания доступен по [ссылке](https://github.com/netology-code/devops-diplom-yandexcloud/blob/main/README.md).
Весь код, выполненный по ходу выполнения работы находится в репозиториях на github:
* terraform и ansible: [Dannecron/netology-devops-gw-infra](https://github.com/Dannecron/netology-devops-gw-infra)
### Создание облачной инфраструктуры ### Создание облачной инфраструктуры
[Задание](./tasks.md#создание-облачной-инфраструктуры). [Задание](./tasks.md#создание-облачной-инфраструктуры).
#### Предварительная настройка #### Предварительная настройка
Данный параграф описывает выполнения шагов 1-3 из задания.
Предварительная настройка включает в себя несколько шагов, необходимых для последующей работы с `yandex.cloud` через `terraform`. Предварительная настройка включает в себя несколько шагов, необходимых для последующей работы с `yandex.cloud` через `terraform`.
Данные шаги выполняются в ручную, но могут быть автоматизированы, например, через `ansible`. Данные шаги выполняются в ручную, но могут быть автоматизированы, например, через `ansible`.
@@ -16,13 +21,79 @@
```shell ```shell
yc iam service-account create --name terraform-acc yc iam service-account create --name terraform-acc
yc resource-manager folder add-access-binding --name default --role editor --subject "serviceAccount:$accId" yc resource-manager folder add-access-binding --name default --role editor --subject "serviceAccount:<accId>"
``` ```
где `$accId` - это уникальный идентификатор нового сервисного аккаунта. где `<accId>` - это уникальный идентификатор нового сервисного аккаунта.
Затем нужно получить ключ доступа для данного сервисного аккаунта:
```shell
yc iam access-key create --service-account-name terraform-acc --format=json
```
3. Создание s3-bucket для хранения состояния `terraform` 3. Создание s3-bucket для хранения состояния `terraform`
// todo ```shell
yc storage bucket create --name=dnc-netology-tf-state
```
Следующий шаг - инициализация terraform и создание нового workspace. Для инициализации используется команда:
```shell
terraform init \
-backend-config="bucket=dnc-netology-tf-state" \
-backend-config="access_key=<service_account_key_id>" \
-backend-config="secret_key=<service_account_secret_key>"
```
где `<service_account_key_id>` и `<service_account_secret_key>` данные полученные на шаге получения ключа доступа для сервисного аккаунта.
Создание и переключение на новый workspace с названием `prod`:
```shell
terraform workspace new prod
```
Для упрощения процесса был создан ansible-playbook [terraform_init.yml](https://github.com/Dannecron/netology-devops-gw-infra/blob/main/terraform_init.yml).
Чтобы усилить безопасность некоторые переменные были зашифрованы через `ansible-vault`.
Таким образом, для запуска достаточно выполнить команду
```shell
ansible-playbook --ask-vault-pass -i ansible/terraform_init terraform_init.yml
```
После выполнения данных шагов можно приступать непосредственно к разворачиванию инфрастуктуры через команды terraform.
#### Создание VPC и подсетей через terraform
Для создания VPC и двух подсетей будет использована следующая конфигурация:
```terraform
resource "yandex_vpc_network" "netology-gw-network" {
name = "netology-gw-network"
}
resource "yandex_vpc_subnet" "netology-gw-subnet-a" {
name = "netology-gw-subnet-a"
zone = "ru-central1-a"
network_id = yandex_vpc_network.netology-gw-network.id
v4_cidr_blocks = ["192.168.10.0/24"]
}
resource "yandex_vpc_subnet" "netology-gw-subnet-b" {
name = "netology-gw-subnet-b"
zone = "ru-central1-b"
network_id = yandex_vpc_network.netology-gw-network.id
v4_cidr_blocks = ["192.168.15.0/24"]
}
```
Затем нужно последовательно выполнить команды для проверки применения конфигурации в облаке (выполняется из [директории terraform](https://github.com/Dannecron/netology-devops-gw-infra/tree/main/terraform)):
```shell
terraform plan
terraform apply
terraform destroy
```
--- ---