[レポート] Deep dive into AWS Cloud Development Kit #reinvent #DOP402
こんにちは。サービスグループの武田です。
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#といった他の言語のライブラリを生成できます。利用にはjsii
とjsii-pacmak
モジュールをインストールします。
モジュールをインストールしたら、jsii用の設定をpackage.jsonに追記します。
途中でエラーが出たので修正します。ビルドはnpm run build
(内部的にはjsii)、パッケージングはnpm run package
(内部的にはjsii-pacmak)をそれぞれたたいて実行します。
各言語用のライブラリが生成されました。たとえばJava用のものをのぞいてみるとMavenの定義などが確認できます。
最後に紹介するのはaws-delivlib
です。これはAWS CodeBuildおよびAWS CodePipelineを使用して、ライブラリを構築、テスト、公開するためのパイプラインを定義するためのライブラリです。
こんな画面がマネジメントコンソールで確認できます。
パート2のRecap。
- jsiiとjsii-pacmakを使ったビルドおよびパッケージ
- jsiiはTypeScriptのサブセット
- delivlibはライブラリのためのデイrバリーパイプラインをセットアップします
- 複数環境のアプリケーション
Wrap-up
awesome-cdk
- Open CDK Guide
- opinionated set of tips and best practices
- kevinslin/open-cdk: This guide is an opinionated set of tips and best practices for working with the AWS Cloud Development Kit
- punchcard
- type-safe AWS infrastructure
- punchcard/punchcard: Type-safe AWS infrastructure.
- aws-cdk-pure
- purely functional CDK
- fogfish/aws-cdk-pure: Purely Functional and high-order cloud components with AWS CDK
- cdk-clj
- a clojure wrapper for the CDK
- StediInc/cdk-clj: A Clojure wrapper for the AWS Cloud Development Kit (AWS CDK)
- cdk-components
- a collection of higher-level cdk constructs
- cloudcomponents/cdk-components: A collection of higher-level aws cdk components: slack-approval-workflow, contentful-webhook, github-webhook, stripe-webhook, static-website, pull-request-check, codepipeline-merge-action, codepipeline-check-parameter-action...
- CDK GitHub Action
Next steps
- Get started
- Engage
- awslabs/aws-cdk - Gitter
- aws/aws-cdk: The AWS Cloud Development Kit is a framework for defining cloud infrastructure in code
- aws/jsii: jsii allows code in any language to naturally interact with JavaScript classes. It is the technology that enables the AWS Cloud Development Kit to deliver polyglot libraries from a single codebase!
まとめ
最近新しいAWS環境を構築するにあたってCloudFormationではなくCDKを使いました。TypeScriptの言語機能やVS Codeのサポート機能などもあり使いやすく、とてもすばらしいプロダクトだと感じました。セッション一覧を見る前からCDKのセッションはぜひ参加したいと思っていたので、聴講できてよかったです。また多言語ライブラリとかまったく知らなかったので、そんなことまでやっているのかと驚きました。
AWS CDK Explorerはこのセッションで知り、さっそくセットアップしてみたので次のエントリです。使ったことのない方はこちらも参考にどうぞ。
CDKユーザー必見!AWS Toolkit for Visual Studio CodeのAWS CDK Explorerを試してみた #reinvent