- Начало работы с 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
- Очистка демонстрационного стека
- cdk destroy
- Важные команды
- Заключение
- Ссылки
- Сообщество и социальный след
Начало работы с 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
- Шаг 1 Установка предварительных требований
- Очистка демонстрационного стека
- 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
, Pythonvenv
может быть установлен с помощью,
# 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
- gsaravanan.dev