JAWS-UG CDK支部 #1 〜初回拡大版〜 の LT 資料です
Construct Hub に自作ライブラリを公開しようwith projenJAWS-UG CDK 支部 #1 〜初回拡大版〜June 1st, 2022小杉 隼人 | Hayato Kosugi
View Slide
About Me• Cloud Engineer @ セゾン情報システムズ• AWS Community Builder (Fall of 2020)• 2019 - 2022 APN AWS Top Engineers• 11x AWS Certified• CDK は個人利用がメイン2@hayaok3 @hayao_k
Agenda• Construct Hub って何• projen はいいぞ3
What is Construct Hub?• コミュニティや AWS、AWS パートナーが公開する Construct Library を検出・共有するためのレジストリ• 昨年 12 月 AWS CDK v2 と同日に GA• 現在 1000 以上の Construct Library が掲載• https://constructs.dev/4
Construct Hub に掲載される条件• JSII-compatible であること• 多言語対応のため• オープンソースライセンスであること• Apache, BSD, EPL, MPL-2.0, ISC, and CDDL or MIT• CDK Keyword を使用して npm Registry に公開されていること• cdk, awscdk, aws-cdk, cdk8s, or cdktf• これらを満たすと 約 30 分で自動で掲載5
6
難しそう?projen を使った開発がおすすめ7
CDK で TypeScript をやっているときの私• プロジェクト構成の管理は近年複雑化している• TypeScript プロジェクトの場合• package.json, tsconfig.json, .gitignore, eslint, jest, etc•ぜんぜんわからない、俺 たち は雰囲気でTypeScript をやっている…8
What is Projen?• A new generation of project generators• Construct の考え方をプロジェクト構成に適用• プロジェクト構成をコードで定義し、維持するためのツール• package.json, tsconfig.json 等、通常は自分で管理する必要のある構成ファイルを自動で管理• プロジェクトの雛形を作るだけではなく、継続管理する• https://github.com/projen/projen9
• node - Node.js project.• project - Base project.• python - Python project.• react - React project without TypeScript.• react-ts - React project with TypeScript.• typescript - TypeScript project.• typescript-app - TypeScript app.Built-in Project types• awscdk-app-java - AWS CDK app in Java.• awscdk-app-py - AWS CDK app in Python.• awscdk-app-ts - AWS CDK app in TypeScript.• awscdk-construct - AWS CDK construct library project.• cdk8s-app-ts - CDK8s app in TypeScript.• cdk8s-construct - CDK8s construct library project.• cdktf-construct - CDKTF construct library project.• java - Java project.• jsii - Multi-language jsii library project.• nextjs - Next.js project without TypeScript.• nextjs-ts - Next.js project with TypeScript.10$ mkdir awesome-project$ cd awesome-project$ git init$ npx projen new PROJECT-TYPE🤖 Synthesizing project...
Construct Library プロジェクトの作成• projen new awscdk-construct• 開発に必要なファイルが生成される• package.json, jsii によるビルドスクリプト,GitHub Actions Workflow など• .projenrc.js に必要な設定を定義• サポートする CDK の最小バージョン• 他のライブラリとの依存関係• 各パッケージマネージャーでのライブラリ名など12
.projenrc.js の例13• projen コマンドで変更を反映• projen が管理するファイルの多くは手動で編集しない (できない)• 編集した場合はビルドが Fail する• e.g., publishToPypi• package.json の jsii 設定に python が追加• GitHub Actions の release.yml にPyPI へ publish する Step が追加指定可能なオプションは多岐にわたるため、API リファレンスを参照https://projen.io/api/API.html#projen-awscdk-awscdkconstructlibraryconst { awscdk } = require('projen');const cdkVersion = '2.25.0';const project = new awscdk.AwsCdkConstructLibrary({author: 'hayao-k',authorAddress: '[email protected]',cdkVersion,defaultReleaseBranch: 'main',name: 'cdk-sample-lib',repositoryUrl: 'https://github.com/hayao-k/cdk-sample-lib.git',description: 'Sample AWS CDK Construct Library by projen',keywords: ['sample'],license: 'Apache-2.0',deps: [`@aws-cdk/aws-apigatewayv2-alpha@${cdkVersion}-alpha.0`,`@aws-cdk/aws-apigatewayv2-integrations-alpha@${cdkVersion}-alpha.0`,'other-useful-lib'],publishToPypi: {distName: 'cdk-sample-lib',module: 'cdk_sample_lib',},});project.synth();
Release も簡単自動化• Build workflow (.github/workflows/build.yml)• pull request 作成時に起動• ライブラリのビルド、改ざんチェック• Release workflow (.github/workflows/release.yml)• リリースブランチへの push 時に起動• ライブラリのビルド、改ざんチェック• Conventional Commits による Semantic Versioning• GitHub Releases, 各言語のレジストリへの公開 (要 Secrets 登録)14
Step by Step の手順はこちら• projen ではじめる快適 AWS CDKConstruct Library 開発生活• https://qiita.com/hayao_k/items/194dfb051f18a38b6dbd• A Beginner's Guide to Create AWSCDK Construct Library with projen• https://dev.to/aws-builders/a-beginner-s-guide-to-create-aws-cdk-construct-library-with-projen-5eh4• Construct Hub の Contribute ページでも紹介いただいてます15
Summary• Construct Hub• コミュニティや AWS、AWS パートナーが公開する Construct Library を検出・共有するためのレジストリ• 時間の関係で紹介できなかったが便利なライブラリがたくさん• 自作ライブラリも公開できる• projen• プロジェクト構成の管理や CI が劇的に楽になる• Developer Experience に感動• 特別な考慮不要で自作ライブラリを Construct Hub に掲載できる16
AWESOME Book & Posts & Slide• The CDK Book• https://thecdkbook.com/• CDKの成り立ちとその可能性について (The CDK Bookより)• https://qiita.com/oktomoya/items/3cf66205b8c932d252ef• CDK Construct ライブラリを開発する際のTips• https://tmokmss.hatenablog.com/entry/20220517/1652755027• AWSアカウントの共通設定をCDK ConstructHubで公開しました• https://docs.google.com/presentation/d/1X2r7LUuijiWISgL-P2SPyVFz6l2EqZ1DFzbaAjb9SKo• 【レポート+やってみた】projen – a CDK for software project configuration #CDK Day• https://dev.classmethod.jp/articles/cdk-day-projen-try/17
Happy Constructing!18