Установка terraform
sudo apt-get update && sudo apt-get install -y gnupg software-properties-common curl
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install terraform
Установка cdktf
sudo npm install --global cdktf-cli
cdktf - это SDK для terraform. На языке HCL HashiCorp Configuration Language можно создавать конфигурацию серверов как и в формате JSON.
Можно сгенерировать JSON для поддерживаемого языка Python, TypeScript, Java и т.д.
Дале имеем возможность использовать этот JSON при запуске команд Terraform.
mkdir myprj
cd myprj
cdktf init --template="python" --local
На высшем уровне имеем команду
$ cdktf deploy
Которая производит установку системы.
$ cdktf synth
Этой командой создаем JSON конфигурацию из кода, написанного на Python к примеру.
Конфигурация создается в папке cdktf.out.
cdktf.out ├── manifest.json └── stacks └── learn-cdktf ├── cdk.tf.json └── plan
{
"version": "0.7.0",
"stacks": {
"blog": {
"name": "blog",
"constructPath": "blog",
"workingDirectory": "stacks/blog",
"synthesizedStackPath": "stacks/blog/cdk.tf.json",
"annotations": []
}
}
}
{
"//": {
"metadata": {
"version": "0.7.0",
"stackName": "blog",
"backend": "local"
}
}
}
#!/usr/bin/env python
from constructs import Construct
from cdktf import App, TerraformStack
class MyStack(TerraformStack):
def __init__(self, scope: Construct, ns: str):
super().__init__(scope, ns)
# define resources here
app = App()
MyStack(app, "blog")
app.synth()
Применяем JSON
cd cdktf.out/stacks/blog && terraform apply
Прежде всего нам необходимо установить 2 переменные в окружение
export AWS_ACCESS_KEY_ID=AAAAAA
export AWS_SECRET_ACCESS_KEY=AAAAA
Идем сюда http://aws.amazon.com/
Заходим в консоль.
Настройки аккаунта
Генерим секреты.
Вставляем в .bashrc
Добавляем провайдера в cdktf.json
"terraformProviders": [
"hashicorp/aws@~> 3.42"
],
Устанавливаем.
$ cdktf get