Оглавление
- Введение
- Что такое CDKTF
- Как работает CDKTF
- Примеры использования CDKTF
- Шаги к работе с CDK for Terraform
- Шаг 1 Установка предварительных требований
- Установите Terraform
- Установите менеджер пакетов node
- Установите pipenv
- Настройте учетные данные облака AWS
- Шаг 2 Установите CDKTF
- Шаг 3 Создайте проект CDKTF
- Шаг 4 Определение инфраструктуры AWS с помощью Python
- Шаг 5 Развертывание инфраструктуры
- pipenv install
- cdktf get
- cdktf synth
- cdktf deploy
- Шаг 1 Установка предварительных требований
- Очистка демонстрационной версии
- cdktf destroy
- Компоненты и архитектура
- CDK для Terraform некоторые ключевые концепции
- Конструкции
- Провайдер
- Ресурсы
- Модули
- Заключение
- Библиография и ссылки
Введение
Terraform является одним из наиболее широко используемых инструментов для предоставления инфраструктуры в виде кода. Он написан с использованием Hashicorp Language
или HCL
сокращенно.
В 2021 году Hashicorp представила поддержку создания инфраструктуры с помощью наиболее распространенных языков программирования и назвала ее Cloud Development Kit for Terraform (CDK for Terraform)
или CDKTF
.
В этой статье мы рассмотрим, как приступить к созданию инфраструктуры в CDKTF для облачного провайдера AWS. Я буду использовать язык Python
для создания инфраструктуры в AWS с помощью CDKTF.
Компания Hashicorp представила Terraform CDK в связи с растущей популярностью поддержки инструментов Infrastructure as code, основанных на языках программирования. Другими инструментами являются AWS CDK и Pulumi.
Что такое CDKTF
Согласно документации по Terraform CDKTF
Cloud Development Kit for Terraform (CDKTF) позволяет вам использовать знакомые языки программирования для определения и предоставления инфраструктуры. Это дает вам доступ ко всей экосистеме Terraform без изучения HashiCorp Configuration Language (HCL) и позволяет использовать возможности существующего инструментария для тестирования, управления зависимостями и т. д.
CDKTF в настоящее время поддерживает TypeScript, Python, Java, C# и Go (экспериментально), а CDK для Terraform находится в стадии бета-версии (по состоянию на Mar-2022).
Как работает CDKTF
CDK for Terraform использует концепции и библиотеки из AWS Cloud Development Kit для преобразования вашего кода в файлы конфигурации инфраструктуры для Terraform.
На высоком уровне вы будете:
Создавать приложение: Использовать встроенный или собственный шаблон для создания проекта на выбранном вами языке.
Определять инфраструктуру: Используйте выбранный язык для определения инфраструктуры, которую вы хотите предоставить одному или нескольким провайдерам. CDKTF автоматически извлекает схему из провайдеров и модулей Terraform для генерации необходимых классов для вашего приложения.
Развертывание: Используйте команды cdktf CLI для предоставления инфраструктуры с помощью Terraform или синтезируйте свой код в конфигурационный файл JSON, который другие могут использовать непосредственно с Terraform.
Примеры использования CDKTF
CDKTF предлагает множество преимуществ, но это не правильный выбор для каждого проекта. Ниже приведены возможные сценарии использования CDKTF:
- Если у вас есть сильное предпочтение или необходимость использовать процедурный язык для определения инфраструктуры.
- Если вам нужно создать абстракции, чтобы помочь управлять сложностью. Например, вы хотите создать конструкции для моделирования многократно используемого шаблона инфраструктуры, состоящего из нескольких ресурсов и удобных методов.
- Вам удобно самостоятельно устранять неполадки и не нужна коммерческая поддержка.
- Вы можете сделать этот выбор для каждой команды и каждого проекта, поскольку CDK for Terraform взаимодействует с существующими провайдерами и модулями Terraform.
Шаги к освоению CDK for Terraform
- Теперь давайте приступим к практической работе с CDKTF
Шаг 1 Установка предварительных требований
- Нам необходимо установить
Terraform
иNodeJS
для CDKTF. - Также нам нужно настроить учетные данные AWS для настройки инфраструктуры в AWS
Установите Terraform
- Перейдите в раздел загрузки Terraform и установите
Terraform v1.0+
.
Установите менеджер пакетов node
- Перейдите к репозиторию
nodesource
на GitHub и следуйте инструкциям для установки NodeJS
Установите pipenv
- Установите менеджер пакетов Python
pipenv
с помощью команды
sudo apt install pipenv
Настройка учетных данных облака AWS
- Terraform по умолчанию использует учетные данные AWS, которые доступны в одном из файлов
Environment Variables
илиShared Credentials
. - Обратитесь к документации по аутентификации AWS в Terraform для настройки AWS auth для Terraform.
Шаг 2 Установка CDKTF
- Установите CDK последней версии с помощью команды,
npm install --global cdktf-cli@latest
- Проверьте установку, выполнив команду,
cdktf help
Теперь у нас есть все необходимое, чтобы приступить к созданию инфраструктуры в AWS с помощью Python
Шаг 3 Создание проекта CDKTF
- Новые пользователи могут выполнить команду
cdktf init
для создания проекта cdktf для определенного языка программирования - Команда cdktf init создает необходимые файлы, необходимые для начала разработки инфры с использованием языка программирования
- Ниже приведен пример вывода
cdktf init
, который показывает опции выбора деталей проекта и языка программирования - Я создал каталог примеров под названием
aws-tier
для демонстрационных целей
$ mkdir aws-tier
$ cd aws-tier
$ cdktf init
The 'npm view' command generated an error stream with content [npm notice
npm notice New patch version of npm available! 8.5.2 -> 8.5.5
npm notice Changelog: <https://github.com/npm/cli/releases/tag/v8.5.5>
npm notice Run `npm install -g npm@8.5.5` to update!
npm notice]
Newer version of Terraform CDK is available [0.9.4] - Upgrade recommended
Welcome to CDK for Terraform!
By default, cdktf allows you to manage the state of your stacks using Terraform Cloud for free.
cdktf will request an API token for app.terraform.io using your browser.
If login is successful, cdktf will store the token in plain text in
the following file for use by subsequent Terraform commands:
USER_HOME_DIR/.terraform.d/credentials.tfrc.json
Note: The local storage mode isn't recommended for storing the state of your stacks.
? Do you want to continue with Terraform Cloud remote state management? No
? What template do you want to use? python-pip
Initializing a project using the python-pip template.
? projectName: aws-tier
? projectDescription: A simple getting started project for cdktf.
Requirement already satisfied: cdktf~=0.8.3 in USER_HOME_DIR/.local/lib/python3.9/site-packages (from -r requirements.txt (line 1)) (0.8.3)
Requirement already satisfied: jsii<2.0.0,>=1.47.0 in USER_HOME_DIR/.local/lib/python3.9/site-packages (from cdktf~=0.8.3->-r requirements.txt (line 1)) (1.50.0)
Requirement already satisfied: publication>=0.0.3 in USER_HOME_DIR/.local/lib/python3.9/site-packages (from cdktf~=0.8.3->-r requirements.txt (line 1)) (0.0.3)
Requirement already satisfied: constructs<11.0.0,>=10.0.12 in USER_HOME_DIR/.local/lib/python3.9/site-packages (from cdktf~=0.8.3->-r requirements.txt (line 1)) (10.0.14)
Requirement already satisfied: python-dateutil in /usr/lib/python3/dist-packages (from jsii<2.0.0,>=1.47.0->cdktf~=0.8.3->-r requirements.txt (line 1)) (2.8.1)
Requirement already satisfied: attrs~=21.2 in USER_HOME_DIR/.local/lib/python3.9/site-packages (from jsii<2.0.0,>=1.47.0->cdktf~=0.8.3->-r requirements.txt (line 1)) (21.2.0)
Requirement already satisfied: typing-extensions<5.0,>=3.7 in USER_HOME_DIR/.local/lib/python3.9/site-packages (from jsii<2.0.0,>=1.47.0->cdktf~=0.8.3->-r requirements.txt (line 1)) (4.0.1)
Requirement already satisfied: cattrs<1.10,>=1.8 in USER_HOME_DIR/.local/lib/python3.9/site-packages (from jsii<2.0.0,>=1.47.0->cdktf~=0.8.3->-r requirements.txt (line 1)) (1.9.0)
========================================================================================================
Your cdktf Python project is ready!
cat help Prints this message
Compile:
python3 ./main.py Compile and run the python code.
Synthesize:
cdktf synth [stack] Synthesize Terraform resources to cdktf.out/
Diff:
cdktf diff [stack] Perform a diff (terraform plan) for the given stack
Deploy:
cdktf deploy [stack] Deploy the given stack
Destroy:
cdktf destroy [stack] Destroy the given stack
Learn more about using modules and providers https://cdk.tf/modules-and-providers
========================================================================================================
- Также можно выполнить следующую команду для выбора шаблона на основе
python-pip
и бэкендаlocal
.
cdktf init --template="python-pip" --local
- Мы видим, что приведенные ниже файлы были созданы командой
cdktf init
.
$ ls
cdktf.json help main.py requirements.txt
Шаг 4 Определение инфраструктуры AWS с помощью Python
- Клонируйте образец репозитория с GitHub
- Мы можем увидеть несколько файлов, но нас интересуют два из них
- Файл1:
main.py
— Это основной файл, который содержит определение инфраструктуры на языке программированияpython
.
- Файл1:
#!/usr/bin/env python
from constructs import Construct
from cdktf import App, TerraformStack, TerraformOutput
from imports.aws import AwsProvider, ec2
class CDKDemoStack(TerraformStack):
def __init__(self, scope: Construct, ns: str):
super().__init__(scope, ns)
AwsProvider(self, "Aws", region="us-west-2")
cdkdemoInstance = ec2.Instance(self, "cdkdemo",
ami="ami-005e54dee72cc1d00",
instance_type="t2.micro",
)
TerraformOutput(self, "cdkdemo_public_ip",
value=cdkdemoInstance.public_ip
)
app = App()
CDKDemoStack(app, "cdkdemo-terraform")
app.synth()
- Файл2:
cdktf.json
— Этот файл содержит определение версии облачного провайдера, также содержит ссылки на модули Terraform.- Я изменил
terraformProviders
и добавил"hashicorp/aws@~> 3.67.0"
.
- Я изменил
{
"language": "python",
"app": "pipenv run python main.py",
"projectId": "project_id_generated_by_init",
"terraformProviders": [
"hashicorp/aws@~> 3.67.0"
],
"terraformModules": [],
"codeMakerOutput": "imports",
"context": {
"excludeStackIdFromLogicalIds": "true",
"allowSepCharsInLogicalIds": "true"
}
}
- Скопируйте содержимое вышеуказанных файлов в соответствующие файлы нашего демонстрационного проекта
aws-tier
.
Шаг 5 Установка Infra
pipenv install
- Поскольку мы выбрали шаблон
python.pip
, нам нужно выполнить командуpipenv install
. - Она преобразует файл
requirements.txt
вPipfile
, а также создастPipfile.lock
.
$ pipenv install
requirements.txt found, instead of Pipfile! Converting…
Warning: Your Pipfile now contains pinned versions, if your requirements.txt did.
We recommend updating your Pipfile to specify the "*" version, instead.
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Updated Pipfile.lock (d69941)!
Installing dependencies from Pipfile.lock (d69941)…
🐍 ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 9/9 — 00:00:02
To activate this project's virtualenv, run the following:
$ pipenv shell
cdktf get
- Эта команда генерирует CDK Constructs для провайдеров и модулей Terraform в проекте
- Выполните команду
cdktf get
для получения необходимых ресурсов AWS, которые будут сохранены в каталогеimports
. - Обратите внимание, что каталог
import
похож на временный каталог.terraform
и должен быть проигнорирован при переносе кода в систему контроля исходных текстов, например git (проверьте файл .gitignore).
$ cdktf get
Generated python constructs in the output directory: imports
cdktf synth
- Синтезирует код Terraform для заданного приложения в каталоге.
- Эта команда создает файл
tfstate
.
$ cdktf synth
Generated Terraform code for the stacks: cdkdemo-terraform
- Приведенная выше команда создаст папку
cdktf.out
, содержащую всю сгенерированную конфигурацию Terraform JSON.
cdktf deploy
- Развертывание и создание инфраструктуры в указанном провайдере
$ cdktf deploy
Deploying Stack: cdkdemo-terraform
Resources
✔ AWS_INSTANCE cdkdemo aws_instance.cdkdemo
Summary: 1 created, 0 updated, 0 destroyed.
Output: cdkdemo_public_ip = 34.209.44.175
- При выполнении вышеуказанной команды в текущей директории будет создан файл
tfstate.lock
, так как при настройке проекта мы выбрали локальный бэкенд.
Очистка демонстрационной версии
cdktf destroy
- Уничтожьте созданную инфру с помощью этой команды
$ cdktf destroy
Destroying Stack: cdkdemo-terraform
Resources
✔ AWS_INSTANCE cdkdemo aws_instance.cdkdemo
Summary: 1 destroyed.
Компоненты и архитектура
В соответствии с архитектурой, описанной в документации
CDKTF синтезирует инфраструктуру, которую вы определяете на поддерживаемом языке программирования, в конфигурационные файлы JSON, которые Terraform может использовать для управления инфраструктурой.
На диаграмме ниже показано, как синтез приложения CDKTF создает серию артефактов в назначенной выходной папке.
CDK для Terraform некоторые ключевые понятия
- Необходимо отметить некоторые ключевые понятия в CDK for Terraform: 1. Конструкции, 2. Провайдер, 3. Модули и 4. Ресурсы
В соответствии с документацией CDKTF:
Конструкты
Construct — это общий термин, который вы можете использовать для описания частей вашего проекта CDK for Terraform (CDKTF), потому что каждый элемент в приложении CDKTF является потомком базового класса Construct. Все приложение, каждый стек и каждый ресурс являются конструктами.
Провайдер
Провайдер — это плагин Terraform, который позволяет пользователям управлять внешним API. Плагины провайдера, такие как провайдер AWS или провайдер cloud-init, выступают в качестве уровня перевода, который позволяет Terraform взаимодействовать с различными облачными провайдерами, базами данных и сервисами.
Ресурсы
Они являются наиболее важным элементом при определении инфраструктуры в приложениях CDKTF. Каждый ресурс описывает один или несколько объектов инфраструктуры, таких как виртуальные сети, вычислительные экземпляры или компоненты более высокого уровня, например, записи DNS.
Модули
Модуль Terraform — это один каталог, содержащий один или несколько файлов конфигурации.
Модули позволяют повторно использовать конфигурации в проектах и командах, экономя время, обеспечивая согласованность и сокращая количество ошибок. Например, вы можете создать модуль для описания конфигурации всех ведер публичных веб-сайтов вашей организации. Когда вы упакуете и поделитесь этим модулем, другие пользователи смогут включить его в свои конфигурации. По мере изменения требований вы можете один раз внести изменения в модуль, выпустить новую версию и применить эти изменения везде, где используется модуль.
Заключение
В этой статье я рассказал о том, как начать работу с CDKTF, концепциях cdktf, установке и настройке проекта.
Также я рассказал о некоторых важных командах для настройки и развертывания инфраструктуры в AWS.
Надеюсь, это было полезно.
Читайте другие статьи из серии учебников по Terraform, чтобы узнать о нем больше.
Библиография и ссылки
-
Создание инфраструктуры AWS с помощью Python-pip
-
Примеры CDKTF
-
CDKTF
-
Hashicorp Learn
Следуйте за мной и делитесь своими мыслями,
- GitHub
- gsaravanan.dev