[レポート] Deep dive into AWS Cloud Development Kit #reinvent #DOP402

DOP402 - Deep dive into AWS Cloud Development Kitに参加してきましたのでレポートをお届けします。デモではライブコーディングを交えながらCDKのパワフルな機能が紹介されました。
2019.12.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。サービスグループの武田です。

DOP402 - Deep dive into AWS Cloud Development Kit に参加してきましたのでレポートをお届けします。デモではライブコーディングを交えながらCDKのパワフルな機能が紹介されました。

セッション概要

The AWS Cloud Development Kit (AWS CDK) is a multi-language, open-source framework that enables developers to harness the full power of familiar programming languages to define reusable cloud components and provision applications built from those components using AWS CloudFormation. In this session, you develop an AWS CDK application and learn how to quickly assemble AWS infrastructure. We explore the AWS Construct Library and show you how easy it is to configure your cloud resources, manage permissions, connect event sources, and build and publish your own constructs.

機械翻訳したものも掲載します。

AWS Cloud Development Kit(AWS CDK)は多言語のオープンソースフレームワークであり、開発者が使い慣れたプログラミング言語のフルパワーを活用して、再利用可能なクラウドコンポーネントを定義し、AWS CloudFormationを使用してそれらのコンポーネントから構築されたアプリケーションをプロビジョニングできます。 このセッションでは、AWS CDKアプリケーションを開発し、AWSインフラストラクチャをすばやく構築する方法を学びます。 AWS Construct Libraryを調べ、クラウドリソースの設定、アクセス許可の管理、イベントソースの接続、独自のコンストラクトの構築と公開がどれほど簡単かを示します。

スピーカー

  • Elad Ben-Israel
    • Principal Software Engineer , Amazon Web Services
  • Jason Fulghum
    • Software Development Manager , Amazon Web Services

アジェンダ

  • AWS CDKコンセプト
  • デモシナリオ
  • Let's code
  • まとめ

AWS CDKコンセプト

AWS CDKはTypeScriptやPythonといった、使い慣れたプログラミング言語を用いてクラウドインフラを定義できるソフトウェア開発フレームワークです。

コンストラクトがクラウドリソースになる流れです。コンストラクトとはプラグラムのソースコードで表現されるものです。CDK CLIを用いてこれをCloudFormationテンプレートとアセットに合成します。それらをCloudFormationを用いてデプロイし、クラウドリソースとしてプロビジョニングされます。

AWS CDKのメインコンポーネントです。

  • Core Framework
    • App、Stacks、Resourcesといった骨子を提供します
  • AWS Construct Library
    • VPCやEC2などのAWSリソースに対応したライブラリが提供されています
  • AWS CDK CLI
    • 構築したプログラムを用いて操作するためのCLIが提供されています

デモ

ここからはライブコーディングを交えたデモでした。詳細に説明することが難しいので概要だけお伝えします(セッション動画が公開されたらぜひご覧ください)。

ブラウザ上で各サービスの状態をチェックできるサービスヘルスモニターをCDKで作ってみようという内容です。

デモは2部構成になっています。

  • パート1:Health monitor construct library
    • Health monitor用のライブラリをTSで作っちゃおうという内容です
    • Custom resources
    • Nested stacks
    • Singletons
  • パート2:Packaging and publishing
    • ライブラリ化してさらにTS以外の言語からも使えるんだぜ!っていう内容です
    • Packaging multi-language libraries with jsii
    • Publishing multi-language libraries with aws-delivlib
    • Multi-environment apps

デモ パート1

Working backwards……つまり今回のゴールは、new walters.HealthMonitor()とすればリソースが作られるようにライブラリを作成することです。

Health Serviceへの登録にはCloudFormationのカスタムリソースを使います。CloudFormationのCREATE/UPDATE/DELETEに合わせてREST APIのPOST/PUT/DELETEを呼び出す処理などを定義できます。

処理はLambdaで実装しておき、CDKではそれをプロバイダとして登録します。ちなみにのちほどNestedStackのHealthMonitorProviderとして切り出されます。

作成したプロバイダを指定したカスタムリソースを追加します。myProviderの取得部分でstack.node.tryGetChild() || newという記述をしていますが、ここが Singleton construct pattern になります。

参考:Implement custom resource provider framework as singleton · Issue #5023 · aws/aws-cdk

synthして正しく動作することが確認できました。

パート1のRecap。

  • Working backward from API
  • Custom resources
    • Provider framework
    • AWS CloudFormation Registry
  • Singleton construct pattern
  • Nested stacks
  • CDK Explorer for VS Code

ブラウザでヘルスモニターを開いてみるとCDKで追加した2つのサイトの状態が確認できます。

デモ パート2

CDKはTypeScriptとPythonをGAでサポートしていました。先日JavaとC#も正式にサポートしました。来年はどんな言語をサポートするでしょうか?

CDKでは多言語ライブラリをサポートします。ライブラリはTypeScriptで作成し、jsiiを通すことでPythonやJava、C#といった他の言語のライブラリを生成できます。利用にはjsiijsii-pacmakモジュールをインストールします。

モジュールをインストールしたら、jsii用の設定をpackage.jsonに追記します。

途中でエラーが出たので修正します。ビルドはnpm run build(内部的にはjsii)、パッケージングはnpm run package(内部的にはjsii-pacmak)をそれぞれたたいて実行します。

各言語用のライブラリが生成されました。たとえばJava用のものをのぞいてみるとMavenの定義などが確認できます。

最後に紹介するのはaws-delivlibです。これはAW​​S CodeBuildおよびAWS CodePipelineを使用して、ライブラリを構築、テスト、公開するためのパイプラインを定義するためのライブラリです。

こんな画面がマネジメントコンソールで確認できます。

パート2のRecap。

  • jsiiとjsii-pacmakを使ったビルドおよびパッケージ
  • jsiiはTypeScriptのサブセット
  • delivlibはライブラリのためのデイrバリーパイプラインをセットアップします
  • 複数環境のアプリケーション

Wrap-up

awesome-cdk

Next steps

まとめ

最近新しいAWS環境を構築するにあたってCloudFormationではなくCDKを使いました。TypeScriptの言語機能やVS Codeのサポート機能などもあり使いやすく、とてもすばらしいプロダクトだと感じました。セッション一覧を見る前からCDKのセッションはぜひ参加したいと思っていたので、聴講できてよかったです。また多言語ライブラリとかまったく知らなかったので、そんなことまでやっているのかと驚きました。

AWS CDK Explorerはこのセッションで知り、さっそくセットアップしてみたので次のエントリです。使ったことのない方はこちらも参考にどうぞ。

CDKユーザー必見!AWS Toolkit for Visual Studio CodeのAWS CDK Explorerを試してみた #reinvent