Обзор AWS CDK, примеры на TypeScript и Python и производительность

Отличный инструмент для платформенной разработки на AWS

Содержимое страницы

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

aws cdk chain of events

Этот открытый фреймворк упрощает инфраструктуру как код, позволяя моделировать ресурсы AWS с помощью высокоуровневых конструкций, а затем синтезировать их в шаблоны CloudFormation для развертывания. Это делает разработку, развертывание и итерацию вашей инфраструктуры AWS более поддерживаемой и тестируемой.

Вот краткие примеры кода для AWS CDK на TypeScript и Python:

Пример на TypeScript:

import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';

export class MyStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    new s3.Bucket(this, 'MyFirstBucket', {
      versioned: true,
      removalPolicy: cdk.RemovalPolicy.DESTROY
    });
  }
}

Этот пример создает корзину S3 с включенной версионизацией.

Пример на Python:

from aws_cdk import (
    Stack,
    aws_s3 as s3,
    RemovalPolicy
)
from constructs import Construct

class MyStack(Stack):
    def __init__(self, scope: Construct, id: str, **kwargs):
        super().__init__(scope, id, **kwargs)

        s3.Bucket(self, "MyFirstBucket",
                  versioned=True,
                  removal_policy=RemovalPolicy.DESTROY)

Аналогично создается версионизированная корзина S3 с политикой удаления при удалении стека.

Эти примеры иллюстрируют, как AWS CDK использует привычные конструкции языка, классы и объекты для определения инфраструктуры, которую затем можно легко развернуть с помощью cdk deploy.

AWS CDK поддерживает другие ресурсы и более сложные шаблоны инфраструктуры, выходящие за рамки этих простых примеров. Он также хорошо интегрируется с IDE, фреймворками тестирования и CI/CD-конвейерами для улучшения опыта разработчика и автоматизации.

TypeScript vs Python для AWS CDK

TypeScript и Python полностью поддерживаются для разработки и развертывания AWS CDK, но у них есть некоторые заметные различия:

TypeScript

  • AWS CDK изначально реализован на TypeScript, что обеспечивает нативную проверку типов, интерфейсы и сильную статическую типизацию.
  • TypeScript получает наиболее полную официальную документацию, примеры и поддержку сообщества, что облегчает поиск ресурсов и устранение неполадок.
  • IDE, такие как Visual Studio Code, предлагают отличную поддержку TypeScript с умными подсказками, выделением ошибок и рефакторингом.
  • Поскольку CDK сам написан на TypeScript, его использование кажется более “нативным” и плавным с меньшим количеством абстракций.
  • Статическая типизация TypeScript выявляет многие проблемы на этапе сборки, предотвращая некоторые ошибки времени выполнения.
  • Разработчики, которые хотят строгой безопасности типов и более обширных ресурсов сообщества, могут предпочесть TypeScript для CDK.

Python

  • Поддержка Python стабильна и полностью функциональна, но представляет собой связку поверх ядра TypeScript через jsii, полагаясь на динамическую типизацию с необязательными аннотациями типов.
  • Python использует соглашения об именовании snake_case вместо camelCase TypeScript, поэтому требуются незначительные синтаксические корректировки при переводе примеров.
  • У Python меньше официальных примеров и ресурсов сообщества, что может затруднить обучение и отладку для новичков.
  • Динамическая типизация означает, что некоторые ошибки типов появляются только во время выполнения, а не на этапе компиляции, что может привести к задержке обнаружения ошибок. Однако модули Python имеют аннотации типов, которые можно использовать с IDE или инструментами статического анализа, такими как MyPy.
  • Разработчики Python ценят привычные инструменты, такие как виртуальные окружения (virtualenv) и pip для управления пакетами.
  • Python предпочтителен, если ваша команда или проект уже сильно ориентированы на Python, хотя документация и поддержка сообщества несколько легче.

Разработка и развертывание

  • CDK Toolkit (cdk deploy) работает одинаково независимо от выбора языка, так как CDK синтезирует шаблоны AWS CloudFormation под капотом.
  • Оба языка поддерживают полный спектр ресурсов AWS и конструкций.
  • Выбор между ними часто зависит от экспертизы вашей команды в языке, доступности поддержки сообщества и предпочтений в отношении статической или динамической типизации.

Итог

  • TypeScript предлагает наиболее зрелый и отполированный опыт с более богатыми документами, сильной типизацией и нативной интеграцией, так как CDK построен на нем.
  • Python предлагает надежную функциональность и удобство использования для программистов Python, но с меньшим количеством примеров и некоторыми дополнительными трудностями из-за динамической типизации и переводов между идиомами языков.
  • Если вы хотите быстрой разработки с обширными ресурсами, TypeScript часто рекомендуется. Если ваш проект или команда ориентированы на Python, Python остается хорошим, полностью поддерживаемым выбором несмотря на незначительные компромиссы.

Это соответствует отзывам сообщества и официальной документации AWS, описывающей их соответствующие преимущества и недостатки для разработки и развертывания AWS CDK. Оба языка можно использовать эффективно; ваш выбор зависит от ваших приоритетов в отношении дисциплины типизации, знакомства с языком и поддержки экосистемы.

Официально поддерживаемые языки для AWS CDK

AWS Cloud Development Kit (AWS CDK) официально поддерживает следующие языки программирования:

  • TypeScript
  • JavaScript
  • Python
  • Java
  • C# (.NET)
  • Go

Эти языки полностью поддерживаются, причем CDK изначально был разработан на TypeScript, а затем расширен на другие языки с помощью инструмента под названием JSII, который генерирует связки языков, чтобы CDK чувствовал себя естественно в синтаксисе и соглашениях каждого языка.

Что касается того, какой язык лучше, это зависит от ваших предпочтений и контекста:

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

  • Python — очень популярная альтернатива, особенно для тех, кто приходит из мира Python. У него чистый синтаксис, делающий его более интуитивным для новичков, хотя его динамическая типизация означает, что некоторые ошибки обнаруживаются только во время выполнения. Инструменты и примеры Python хороши, но не такие обширные, как у TypeScript.

  • Java, C# и Go полностью поддерживаются, но обычно имеют меньше примеров сообщества и несколько менее обширную документацию по сравнению с TypeScript и Python. Они подходят, если ваша команда владеет этими языками.

В итоге:

  • TypeScript предлагает самый нативный, отполированный и широко поддерживаемый опыт разработки AWS CDK.
  • Python обеспечивает более простой синтаксис и дружественный для новичков опыт с полной поддержкой CDK, но с немного меньшей полировкой инструментов.
  • Java, C# и Go — хорошие варианты, если они соответствуют вашим существующим навыкам или требованиям проекта, но могут потребовать больших усилий для поиска учебных ресурсов.

Ваш выбор должен учитывать экспертизу вашей команды в языке, доступность примеров и поддержки, а также предпочтение статической типизации (TypeScript, Java, C#) или динамической типизации (Python). TypeScript и Python обычно являются самыми популярными и рекомендуемыми для проектов AWS CDK.

Производительность языков в разработке и развертывании AWS CDK

При рассмотрении лучшей производительности в разработке и развертывании AWS CDK важно уточнить, что основная функциональность AWS CDK — синтез инфраструктуры как кода в шаблоны CloudFormation и развертывание — является независимой от языка. Все поддерживаемые языки (TypeScript, Python, Java, C#, Go) компилируются в одни и те же базовые шаблоны AWS CloudFormation, поэтому производительность времени выполнения для развертывания не зависит от языка.

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

  • TypeScript — это родной язык AWS CDK, изначально разработанный на нем. Это приводит к наиболее плавной работе инструментов, сильнейшей статической типизации и раннему обнаружению ошибок во время разработки, что делает кодирование быстрее и менее подверженным ошибкам.
  • Самая богатая документация, примеры сообщества и поддержка IDE (например, умные дополнения и рефакторинг в Visual Studio Code) существуют для TypeScript, ускоряя продуктивность разработчика.
  • Код TypeScript обнаруживает многие ошибки на этапе компиляции, избегая сюрпризов во время выполнения и проблем с развертыванием, что ускоряет итеративную разработку и отладку.

Python занимает очень близкое второе место по опыту разработки, предпочитаемый за более простой, читаемый синтаксис и популярность в DevOps. Однако из-за своей динамической типизации и того, что это привязка языка JSII поверх ядра TypeScript, некоторые ошибки проявляются только во время выполнения, что может немного замедлить отладку и разработку.

Другие языки, такие как Java, C# и Go, поддерживаются, но обычно имеют меньше ресурсов, менее зрелые инструменты и, следовательно, могут предлагать меньшую скорость разработки.

Итог:

Аспект TypeScript Python Другие (Java, C#, Go)
Родная реализация CDK Да Нет Нет
Статическая типизация Сильная (на этапе компиляции) Динамическая (во время выполнения) Сильная (на этапе компиляции)
Инструменты и поддержка IDE Лучшие (VS Code, Автозаполнение) Хорошие, но менее зрелые Менее зрелые
Сообщество/примеры Самые обильные Хорошие, но меньше, чем у TS Ограниченные
Скорость разработки Быстрая, менее подвержена ошибкам Медленнее из-за динамической типизации Обычно медленнее
Производительность развертывания Одинаковая (выход CloudFormation) Одинаковая Одинаковая

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

Это соответствует официальным рекомендациям AWS и широкому опыту сообщества, которые подчеркивают родную и оптимизированную поддержку TypeScript для разработки AWS CDK. Python остается сильной альтернативой, особенно если ваша команда его предпочитает или ценит простоту синтаксиса. Другие языки пригодны, но обычно менее оптимальны для быстрой разработки.

Ссылки, связанные с AWS CDK

Другие полезные ссылки