Создание следующего ведра s3 Bucket с помощью AWS CDK и Terraform

Что вы думаете об использовании предпочитаемого вами языка программирования для создания инфраструктуры?

AWS CDK (Cloud Development Kit), основанный на CloudFormation, был выпущен пару лет назад для достижения этой цели.

Будучи большим поклонником Terraform, я заинтересовался проектом CDKTF, целью которого является использование AWS CDK с Terraform.

Прежде чем перейти к CDKTF, давайте вернемся к некоторым фундаментальным концепциям.

Инфраструктура как код

Инфраструктура как код (IaC) — это, по сути, процесс управления и предоставления ИТ-ресурсов (в облаке или нет) с помощью файлов определений или кода, а не ручной или интерактивной конфигурации.

Основная цель — обеспечить централизованный способ управления конфигурацией с точки зрения реализации и контроля версий. Таким образом, все изменения могут быть проверены, протестированы и предоставлены в рамках процесса выпуска с использованием стандартных конвейеров развертывания.

Существует множество преимуществ использования IaC для вашего следующего проекта:

  • Скорость и безопасность: Вы тратите гораздо меньше усилий на выполнение простых и повторяющихся задач.
  • Документация: Вы можете легко документировать свой код, как и любой другой программный проект.
  • Тестирование: Вы можете писать тесты для своего проекта.

Теперь, когда мы знаем, что такое IaC, давайте поговорим о Terraform, который является самым популярным Iac-инструментом!

Terraform

Terraform — это инструмент с открытым исходным кодом, созданный компанией HashiCorp в 2014 году. Он позволяет определять инфраструктуру в виде кода с помощью простого декларативного языка HCL (расшифровывается как Hashicorp Configuration Language) для развертывания и управления этой инфраструктурой в различных публичных облачных провайдерах (например, Amazon Web Services, Microsoft Azure, Google Cloud Platform, DigitalOcean), частных облаках и платформах виртуализации.
Если вы хотите глубоко погрузиться в Terraform, я рекомендую вам отличную книгу: Terraform: Up & Running от O’Reilly.

AWS CDK

AWS Cloud Development Kit (AWS CDK) — это платформа с открытым исходным кодом, созданная AWS для определения вашей облачной инфраструктуры в коде и ее предоставления через AWS CloudFormation.
Используя знакомые и выразительные возможности современных языков программирования, он предоставляет высокоуровневые компоненты, называемые конструкциями, которые предварительно конфигурируют облачные ресурсы с проверенными настройками по умолчанию, чтобы вы могли с легкостью создавать облачные приложения.


Более подробную информацию вы найдете в документации

Cloud Development Kit for Terraform (CDKTF) — это плод сотрудничества между командами Hashicorp и AWS для использования экосистемы Terraform для определения и обеспечения вашей инфраструктуры. Это позволяет использовать Terraform без изучения языка HashiCorp Configuration Language (HCL).
В настоящее время CDKTF поддерживает TypeScript, Python, Java, C# и Go (экспериментально).


Дополнительная информация из документации

В этом учебнике мы будем использовать Python.

Python — один из самых простых в изучении языков, который очень помогает быстро писать сценарии и автоматизировать задачи. Если вы новичок в Python, я рекомендую вам эту платформу для начала работы.

Необходимые условия

— python (3.10)
— pipenv
— npm

Установка

Чтобы использовать cdk с terraform, необходимо выполнить следующую команду:

$ npm install --global cdktf-cli@latest
Войти в полноэкранный режим Выйти из полноэкранного режима

Это установит cdktf CLI, который позволяет создавать новые проекты для различных языков.

Мы можем запустить новый проект python, выполнив команду:

$ mkdir s3-demo && cd s3-demo

$ cdktf init --template="python" --local
Enter fullscreen mode Выйти из полноэкранного режима

Мы используем опцию —local, чтобы указать, что мы будем использовать локальное хранилище состояния для сгенерированного Terraform.
В реальном проекте рекомендуется использовать удаленный бэкенд.

По умолчанию создается много файлов.

В нашей демонстрации мы будем использовать AWS в качестве облачного провайдера, поэтому нам нужно установить необходимый провайдер.

$ pipenv install cdktf-cdktf-provider-aws
Вход в полноэкранный режим Выход из полноэкранного режима

Вы можете отредактировать main.py в корне проекта и добавить код, приведенный ниже:

#!/usr/bin/env python
from constructs import Construct
from cdktf import App, TerraformOutput, TerraformStack
from cdktf_cdktf_provider_aws import AwsProvider, s3
# Define your stack

class MyStack(TerraformStack):
    def __init__(self, scope: Construct, ns: str):
        super().__init__(scope, ns)

        # Configure the AWS provider to use the eu-west-3 region
        AwsProvider(self, "AWS", region="eu-west-3")

        # Create your first bucket
        # pass the id of the resource and the name of the bucket
        first_bucket = s3.S3Bucket(
            self, "first_bucket",
            bucket="blog.abdelfare.me",
            acl="public-read"
        )

        TerraformOutput(self, "bucket_name", value=first_bucket.bucket)
        TerraformOutput(self, "bucket_arn", value=first_bucket.arn)

app = App()
MyStack(app, "s3-demo")

app.synth()
Вход в полноэкранный режим Выход из полноэкранного режима

Я нашел SDK действительно интуитивно понятным.

В основном, мы создали наш Main Stack, унаследованный от класса TerraformStack. Мы настроили провайдера aws (не забудьте определить профиль AWS) и создали наш первый S3 bucket в одной строке кода.

TerraformOutput позволяет экспортировать некоторые значения и повторно использовать их в другом стеке.

Теперь, когда все готово, мы можем сгенерировать конфигурационные файлы terraform, выполнив команду ниже:

$ cdktf synth
Войти в полноэкранный режим Выйти из полноэкранного режима

Мы видим новый каталог cdktf.out, который содержит всю конфигурацию терраформы.
Этот шаг эквивалентен выполнению команды terraform plan..

Мы можем развернуть наш стек, выполнив команду:

$ cdktf deploy
Войти в полноэкранный режим Выйти из полноэкранного режима

Эта команда запускает terraform apply в фоновом режиме.

Мы можем увидеть все новые изменения и подтвердить выполнение.

Вот так!

Наше ведро было успешно создано.

Мы можем увидеть вывод вашего стека с помощью следующей команды:

cdktf output
Войдите в полноэкранный режим Выход из полноэкранного режима

Теперь мы можем уничтожить наш стек, выполнив команду:

$ cdktf destroy
Войти в полноэкранный режим Выйти из полноэкранного режима

Когда использовать CDK для Terraform

CDKTF предлагает много преимуществ, но это не правильный выбор для каждого проекта. Вы должны рассмотреть возможность использования CDKTF, если:

  • У вас есть сильное предпочтение или необходимость использовать процедурный язык для определения инфраструктуры.
  • Вам необходимо создать абстракции для управления сложностью.
  • Вам удобно самостоятельно устранять неполадки и не требуется коммерческая поддержка.

Некоторые болевые точки, которые необходимо учитывать:

  • Первоначальная настройка CDK занимает много времени.
  • Время развертывания может быть медленным из-за шагов синтеза.

Есть ли у вас опыт работы с CDKTF? Использовали ли вы его в производстве?

Не стесняйтесь поделиться с нами своим опытом в комментариях.

Код этой статьи вы можете найти на моем github repo.

В следующей статье я создам полную контейнерную архитектуру с *ECS, Fargate, ECR, ALB, CDK + Terraform, так что следите за новостями 😃!*.

Оцените статью
devanswers.ru
Добавить комментарий