Начало работы с IaC на базе Python с использованием AWS CDK


Начало работы с AWS CDK

Оглавление

  • Введение
  • Что такое AWS CDK
  • Концепции и ключевые компоненты
  • Шаги к освоению AWS CDK
    • Шаг 1 Установка предварительных требований
      • Установите менеджер пакетов node
      • Установите Python и Pip
      • Настройте учетные данные облака AWS
    • Шаг 2 Установите AWS CDK
    • Шаг 3 Создайте проект CDK
      • cdk init
    • Шаг 4 Настройка виртуальной среды Python
    • Шаг 5 Установка зависимостей
    • Шаг 6 Проверка проекта
      • cdk ls
    • Шаг 7 Определение инфраструктуры AWS с помощью Python
    • Шаг 8 Развертывание инфраструктуры
      • cdk synth
      • cdk bootstrap
      • cdk deploy
  • Очистка демонстрационного стека
    • cdk destroy
  • Важные команды
  • Заключение
  • Ссылки

Введение

Инструменты IaC на основе языков программирования становятся известными в последнее время. В этой статье мы рассмотрим один из таких инструментов AWS CDK.

Мы рассмотрим шаги, необходимые для того, чтобы приступить к созданию инфраструктуры в AWS CDK для AWS. Я буду использовать язык Python для создания инфраструктуры в AWS с помощью AWS CDK.

AWS начала поддерживать инфраструктуру как код (сокращенно IaC) на основе языка программирования и назвала ее AWS Cloud Development Kit. Другими подобными инструментами являются CDKTF и Pulumi.


Что такое AWS CDK

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

Подробнее об этом вы можете прочитать в документации AWS CDK

Концепции и ключевые компоненты

  • Изучите документацию AWS CDK, чтобы узнать больше о концепциях и компонентах AWS CDK.

Шаги к освоению AWS CDK

  • Нам нужно установить NodeJS.
  • Также нам нужно настроить учетные данные AWS для настройки инфраструктуры в AWS

Шаг 1 Установка предварительных требований

Установите менеджер пакетов node

  • Перейдите к репозиторию nodesource на GitHub и следуйте инструкциям по установке NodeJS.
  • Также мы можем использовать,
sudo npm install -g npm@latest
Войти в полноэкранный режим Выйти из полноэкранного режима

Установите Python и Pip

  • Обратитесь к документации по Python для установки Python
  • Обратитесь к документации по установке Python PIP для установки Pip

Настройка учетных данных облака AWS

  • AWS по умолчанию считывает данные конфигурации auth в соответствии с приоритетом, указанным здесь.
  • Поэтому мы будем использовать aws configure для установки деталей аутентификации, и они будут добавлены в ~/.aws/credentials и ~/.aws/config.
  • Установите AWS CLI из документации
  • Настройте AWS CLI

Шаг 2 Установите AWS CDK

sudo python3 -m pip install aws-cdk-lib
sudo npm install -g aws-cdk
Войдите в полноэкранный режим Выйдите из полноэкранного режима
  • Проверьте команду cdk
cdk version
Войдите в полноэкранный режим Выйти из полноэкранного режима

Шаг 3 Создание проекта CDK

  • Создайте каталог и инициализируйте AWS CDK
mkdir awscdk
cd awscdk/
Войти в полноэкранный режим Выйти из полноэкранного режима

cdk init

  • Поскольку мы создаем код на базе python, инициализируйте приложение для поддержки модулей Python
cdk init app --language python
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Эта команда инициализирует пустой каталог и создает необходимые файлы, необходимые для начала разработки AWS CDK.
  • Она также показывает возможные следующие шаги для продолжения работы с AWS CDK в виде содержимого README в выводе консоли
Applying project template app for python

# Welcome to your CDK Python project!

This is a blank project for CDK development with Python.

The `cdk.json` file tells the CDK Toolkit how to execute your app.

This project is set up like a standard Python project.  The initialization
process also creates a virtualenv within this project, stored under the `.venv`
directory.  To create the virtualenv it assumes that there is a `python3`
(or `python` for Windows) executable in your path with access to the `venv`
package. If for any reason the automatic creation of the virtualenv fails,
you can create the virtualenv manually.

To manually create a virtualenv on MacOS and Linux:

``
$ python3 -m venv .venv
``

After the init process completes and the virtualenv is created, you can use the following
step to activate your virtualenv.

``
$ source .venv/bin/activate
``

If you are a Windows platform, you would activate the virtualenv like this:

``
% .venvScriptsactivate.bat
``

Once the virtualenv is activated, you can install the required dependencies.

``
$ pip install -r requirements.txt
``

At this point you can now synthesize the CloudFormation template for this code.

``
$ cdk synth
``

To add additional dependencies, for example other CDK libraries, just add
them to your `setup.py` file and rerun the `pip install -r requirements.txt`
command.

## Useful commands

 * `cdk ls`          list all stacks in the app
 * `cdk synth`       emits the synthesized CloudFormation template
 * `cdk deploy`      deploy this stack to your default AWS account/region
 * `cdk diff`        compare deployed stack with current state
 * `cdk docs`        open CDK documentation

Enjoy!

Initializing a new git repository...
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint: 
hint:   git config --global init.defaultBranch <name>
hint: 
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint: 
hint:   git branch -m <name>
Please run 'python3 -m venv .venv'!
Executing Creating virtualenv...
✅ All done!
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Содержимое каталога, созданного командой init
$ ls -a
.  ..  app.py  awscdk  cdk.json  .git  .gitignore  README.md  requirements-dev.txt  requirements.txt  source.bat  tests  .venv
Вход в полноэкранный режим Выход из полноэкранного режима

Шаг 4 Настройка виртуальной среды Python

  • Чтобы работать с новым проектом cdk, активируйте его виртуальную среду python. Это позволит устанавливать зависимости проекта локально в папке проекта, а не глобально.
  • В системах ubuntu, Python venv может быть установлен с помощью,
# in ubuntu this is needed
sudo apt install python3.9-venv
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Затем запустите,
python3 -m venv .venv
Войти в полноэкранный режим Выйти из полноэкранного режима

или

source .venv/bin/activate
Войти в полноэкранный режим Выйти из полноэкранного режима

Шаг 5 Установка зависимостей

  • После того как мы установили python venv, мы можем установить зависимости проекта с помощью команды,
python3 -m pip install -r requirements.txt
Войти в полноэкранный режим Выйти из полноэкранного режима

Шаг 6 Проверка проекта

cdk ls

  • Непосредственно перед добавлением кода для настройки нашей инфраструктуры мы можем проверить установку кода CDK, выполнив приведенную ниже команду,
$ cdk ls

AwscdkStack
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Отобразится стек AWS CDK, определенный в каталоге./awscdk/awscdk_stack.py.

Шаг 7 Определение инфраструктуры AWS с помощью Python

  • Теперь откройте каталог проекта в vscode или в предпочитаемом вами редакторе кода, чтобы добавить код инфраструктуры.
  • Я использую команду code . из текущей рабочей директории, чтобы открыть проект в редакторе vscode.
  • Добавьте код Python для создания ведра s3 в учетной записи AWS
  • Откройте файл ./awscdk/awscdk_stack.py.
import aws_cdk as cdk
import aws_cdk.aws_s3 as s3

class HelloCdkStack(cdk.Stack):

    def __init__(self, scope: cdk.App, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        bucket = s3.Bucket(self, "MyFirstBucket", versioned=True)
Войдите в полноэкранный режим Выйти из полноэкранного режима
  • Давайте разберем блоки кода, которые определены в приведенном выше коде. Вот пример кода, определенного в документации

Bucket – это первая конструкция, с которой мы познакомились, поэтому давайте рассмотрим ее подробнее. Как и все конструкции, класс Bucket принимает три параметра.

scope: указывает ведру, что стек является его родителем: он определен в области видимости стека. Вы можете определять конструкции внутри конструкций, создавая иерархию (дерево). Здесь и в большинстве случаев областью видимости является this (self в Python), то есть конструкция, содержащая ведро: стек.

Id: Логический идентификатор ведра в вашем приложении AWS CDK.

props: Пакет значений, определяющих свойства ведра.

  • Теперь перейдите к следующим шагам, чтобы начать развертывание стека CDK

Шаг 8 Развертывание инфраструктуры

  • После добавления кода давайте попробуем синтезировать предложенную инфраструктуру

cdk synth

  • Выполните приведенную ниже команду для синтеза,
$ cdk synth

Resources:
  MyFirstBucketB8884501:
    Type: AWS::S3::Bucket
    Properties:
      VersioningConfiguration:
        Status: Enabled
    UpdateReplacePolicy: Retain
    DeletionPolicy: Retain
    Metadata:
      aws:cdk:path: AwscdkStack/MyFirstBucket/Resource
  CDKMetadata:
    Type: AWS::CDK::Metadata
    Properties:
      Analytics: v2:deflate64:H4sIAAAAAAAA/yXI0QpAMBSA4Wdxvx0iyS0vIB5AzOQYZ7WdJcm7I1f/159CWkASDYeXajJywxGujgdlxLt6n8FVBWU0i3qmX/fHVnsbnNKfa0sTMlq6RXPyYinOoIQ8Wj2idIEYdw3t3wdyVYK2bwAAAA==
    Metadata:
      aws:cdk:path: AwscdkStack/CDKMetadata/Default
    Condition: CDKMetadataAvailable
Conditions:
  CDKMetadataAvailable:
    Fn::Or:
      - Fn::Or:
          - Fn::Equals:
              - Ref: AWS::Region
              - af-south-1
          - Fn::Equals:
              - Ref: AWS::Region
              - ap-east-1
          - Fn::Equals:
              - Ref: AWS::Region
              - ap-northeast-1
          - Fn::Equals:
              - Ref: AWS::Region
              - ap-northeast-2
          - Fn::Equals:
              - Ref: AWS::Region
              - ap-south-1
          - Fn::Equals:
              - Ref: AWS::Region
              - ap-southeast-1
          - Fn::Equals:
              - Ref: AWS::Region
              - ap-southeast-2
          - Fn::Equals:
              - Ref: AWS::Region
              - ca-central-1
          - Fn::Equals:
              - Ref: AWS::Region
              - cn-north-1
          - Fn::Equals:
              - Ref: AWS::Region
              - cn-northwest-1
      - Fn::Or:
          - Fn::Equals:
              - Ref: AWS::Region
              - eu-central-1
          - Fn::Equals:
              - Ref: AWS::Region
              - eu-north-1
          - Fn::Equals:
              - Ref: AWS::Region
              - eu-south-1
          - Fn::Equals:
              - Ref: AWS::Region
              - eu-west-1
          - Fn::Equals:
              - Ref: AWS::Region
              - eu-west-2
          - Fn::Equals:
              - Ref: AWS::Region
              - eu-west-3
          - Fn::Equals:
              - Ref: AWS::Region
              - me-south-1
          - Fn::Equals:
              - Ref: AWS::Region
              - sa-east-1
          - Fn::Equals:
              - Ref: AWS::Region
              - us-east-1
          - Fn::Equals:
              - Ref: AWS::Region
              - us-east-2
      - Fn::Or:
          - Fn::Equals:
              - Ref: AWS::Region
              - us-west-1
          - Fn::Equals:
              - Ref: AWS::Region
              - us-west-2
Parameters:
  BootstrapVersion:
    Type: AWS::SSM::Parameter::Value<String>
    Default: /cdk-bootstrap/hnb659fds/version
    Description: Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]
Rules:
  CheckBootstrapVersion:
    Assertions:
      - Assert:
          Fn::Not:
            - Fn::Contains:
                - - "1"
                  - "2"
                  - "3"
                  - "4"
                  - "5"
                - Ref: BootstrapVersion
        AssertDescription: CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI.
Войдите в полноэкранный режим Выйдите из полноэкранного режима

cdk bootstrap

  • Затем выполните команду bootstrap.
  • Используйте команду cdk bootstrap для загрузки одной или нескольких сред AWS. В базовой форме эта команда загружает одну или несколько указанных сред AWS.
$ cdk bootstrap

 ⏳  Bootstrapping environment aws://account-id/us-west-2...
Trusted accounts for deployment: (none)
Trusted accounts for lookup: (none)
Using default execution policy of 'arn:aws:iam::aws:policy/AdministratorAccess'. Pass '--cloudformation-execution-policies' to customize.
CDKToolkit: creating CloudFormation changeset...
 ✅  Environment aws://account-id/us-west-2 bootstrapped.
Вход в полноэкранный режим Выход из полноэкранного режима

развертывание cdk

  • После загрузки среды CDK выполните команду cdk deploy для добавления инфраструктуры.
$ cdk deploy

✨  Synthesis time: 3.83s

This deployment will make potentially sensitive changes according to your current security approval level (--require-approval broadening).
Please confirm you intend to make the following modifications:

IAM Statement Changes
┌───┬───────────────────────────────────────────────────────────────┬────────┬───────────────────────────────────────┬───────────────────────────────────────────────────────────────────┬───────────┐
│   │ Resource                                                      │ Effect │ Action                                │ Principal                                                         │ Condition │
├───┼───────────────────────────────────────────────────────────────┼────────┼───────────────────────────────────────┼───────────────────────────────────────────────────────────────────┼───────────┤
│ + │ ${Custom::S3AutoDeleteObjectsCustomResourceProvider/Role.Arn} │ Allow  │ sts:AssumeRole                        │ Service:lambda.amazonaws.com                                      │           │
├───┼───────────────────────────────────────────────────────────────┼────────┼───────────────────────────────────────┼───────────────────────────────────────────────────────────────────┼───────────┤
│ + │ ${MyFirstBucket.Arn}                                          │ Allow  │ s3:DeleteObject*                      │ AWS:${Custom::S3AutoDeleteObjectsCustomResourceProvider/Role.Arn} │           │
│   │ ${MyFirstBucket.Arn}/*                                        │        │ s3:GetBucket*                         │                                                                   │           │
│   │                                                               │        │ s3:List*                              │                                                                   │           │
└───┴───────────────────────────────────────────────────────────────┴────────┴───────────────────────────────────────┴───────────────────────────────────────────────────────────────────┴───────────┘
IAM Policy Changes
┌───┬───────────────────────────────────────────────────────────┬──────────────────────────────────────────────────────────────────────────────────────────────┐
│   │ Resource                                                  │ Managed Policy ARN                                                                           │
├───┼───────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────┤
│ + │ ${Custom::S3AutoDeleteObjectsCustomResourceProvider/Role} │ {"Fn::Sub":"arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"} │
└───┴───────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────────────────────┘
(NOTE: There may be security-related changes not in this list. See https://github.com/aws/aws-cdk/issues/1299)

Do you wish to deploy these changes (y/n)? y
AwscdkStack: deploying...
[0%] start: Publishing 075615afa517203dd67c21:current_account-current_region
[0%] start: Publishing b3e30b6400895ee28d0614:current_account-current_region
[50%] success: Published 880615afa517203dd67c21:current_account-current_region
[100%] success: Published b3e30b6400895ee28d0614:current_account-current_region
AwscdkStack: creating CloudFormation changeset...

 ✅  AwscdkStack

✨  Deployment time: 77.86s

Stack ARN:
arn:aws:cloudformation:us-west-2:account-id:stack/AwscdkStack/398ef750-e70b-11ec-b89d-021a55f488dd

✨  Total time: 81.69s
Войти в полноэкранный режим Выход из полноэкранного режима

Очистка демонстрационного стека

  • Поскольку мы создаем демо-развертывание, давайте снесем ресурсы AWS.
  • Используйте команду cdk destroy для удаления ресурсов

cdk destroy

$ cdk destroy

Are you sure you want to delete: AwscdkStack (y/n)? y
AwscdkStack: destroying...

 ✅  AwscdkStack: destroyed
Войдите в полноэкранный режим Выход из полноэкранного режима

Важные команды

Команда Функция
cdk init Создает новый проект CDK в текущем каталоге из указанного шаблона
Перечисляет стеки в приложении
Синтезирует и печатает шаблон CloudFormation для указанного стека (стеков)
cdk bootstrap Развертывает стек постановки CDK Toolkit
cdk deploy Развертывает указанный стек (стеки)
cdk destroy Уничтожает указанный стек(ы)
cdk diff Сравнивает указанный стек с развернутым стеком или локальным шаблоном CloudFormation

Заключение

  • В этом блоге мы обсудили, как начать работу с AWS CDK, и создали пример ведра s3 в рамках демонстрации.
  • Мы можем узнать больше о AWS CDK из документации, и в ней есть больше примеров для практики.
  • Я экспериментировал с созданием IaC на основе Python как с CDKTF, так и с AWS CDK. В качестве следующего шага я планирую написать сравнительный блог.

Ссылки

  • Документация AWS CDK
  • Первое приложение CDK
  • Команда AWS CDK CLI

Сообщество и социальный след

  • Dev
  • GitHub
  • LinkedIn
  • Twitter
  • gsaravanan.dev

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