AWS CDKの良いところ


My Redmine

原田です。今回はAWS Cloud Development Kit(AWS CDK)を使用して感じた良いところについて書きます。

今まではCloudFormationテンプレート(YAMLファイル)を手書きしていました

私がAWSを使い始めたのは2020年3月頃でした。主にLambda(Ruby)やStepFunctions(JSON)などをVisual Statio Code(AWS Toolkit for Visual Studio Code)を使用して作成しています。

また、IAMロールやIAMポリシーはテキストエディターを使用してCloudFormationテンプレート(YAML)を作成(コーディング)していました。当時作成したYAMLファイルを今あらためて確認すると、設定の足らない(もっと厳しいポリシーにするべき)箇所もありました。社内でレビューは実施していますが、1000行を超えるYAMLファイルのコードレビューを依頼するのは非効率でさらに確認漏れが発生する恐れを抱えています。レビュワーの精神的な負担も大きいです。

AWS CDKを使い始めました

私が所属するサービス開発グループでは、週初めに各自の先週実施した作業についてみんなで振り返り(YWT)を行っています。そこで行数の多いYAMLファイルを手書きすることについて、振り返りのネタ(議題の一つ)として挙げました。このYWTの中でAWS CDKを使用すればYAMLファイルの手書きより少ない記述で、条件分岐(IF文)や繰り返し処理(FOR文)などプログラミング言語の制御命令も使用できることを教えてもらいました。

弊社では多くの案件をRubyで開発していますが、TypeScriptであれば多少の違いはあるけど開発する上で大きな支障は無いと判断しAWS CDKはTypeScriptでコーディングすることに決まりました。学習コストは思っているほど高くないことも理由の一つです。

ワークショップを実践してAWS CDKを学習しました

この時はAWS CDKがどのように動作するのか全く未知でしたが、インターネット上にワークショップが公開されていましたので、TypeScriptのワークショップを実践し基本的なことを学びました。とても分かりやすい内容ですので、初めてAWS CDKを使用される方にお勧めします。

ワークショップのホームページ
ワークショップのホームページ

AWS CDKを使用して良かった点

2022年末から以下のことを実施しています。新たなサービスに展開できるよう作業を進めています。

アーキテクチャー図
アーキテクチャー図

実際にAWS CDKを使用して良かった(便利だな)と思う点をご紹介します。

数行コーディングするとセキュリティグループやロールなども定義してくれる

以下のTypeScriptはVPCのコンストラクタですけど、この数行(実質1行)のコードから400行を超えるCloudFormationテンプレート(YAMLファイル)が生成されます。props.maxAzs分のアベイラビリティゾーンを生成し、パブリック、プライベートサブネットとEIP、Routeテーブル、NATゲートウェイなどが各サブネットに設置されました。

(痒いところに手が届くような気分ですが)APIリファレンスも用意されていますので、リソースが分かっていれば何を使用すればよいかAPIリファレンスから見つけ出せると思います。

export class Vpc extends Construct {
  constructor(scope: Construct, id: string, props: VpcProps){
    super(scope, id);

    // VPC
    const vpc = new ec2.Vpc(this, 'VPC', {
      maxAzs: props.maxAzs,
    });
  }
}
上記TypeScriptから生成されたCloudFormationテンプレート(一部)
上記TypeScriptから生成されたCloudFormationテンプレート(一部)

リソース単位にコンストラクトを分けると見通しが良い

上記TypeScriptのようにリソース(ALB・ECS・S3バケットなど)単位にコンストラクト(Construct)に分けて作成すると、各コンストラクトのコード量が少なくなり見通しも良くなります。

インフラ構成に合わせてスタックを分割することも容易

将来AWS Backupを使用して、データベースやストレージなどをバックアップしたいと思っています。ただバックアップを補助的なインフラリソースと考えた時、メインのスタックから分離して別スタックにコンストラクタを移すことも可能です。

CloudFormationテンプレートの知識が深まる

AWS CDKを使用して作成したTypeScriptからCloudFormationテンプレート(YAML)を出力することも可能です(cdk synth)。出力されたYAMLファイルから今まで知らなかった記述をAWS CloudFormationのドキュメントのAPIリファレンスから調べて今までよりCloudFormationテンプレートの知識を得ることができました。

まとめ

簡単ではありますがAWS CDKについて感じたことを書かせて頂きました。やはりCloudFormation(YAMLやJSONファイル)をゼロから作成するのはとても大変でした。このAWS CDKを使用してからコード量は以前に比べ断然に少なくなりました(作成する側として気分的にも楽)。コード量が減ることでレビュワーの負担も少なくなると思います。

私自身はAWS CDKを使用してプログラミングすることで、楽しく(そして検討しながら)インフラ構築を行えていますので、引き続きAWS CDK(TypeScript)を使用したいです。

【スタッフ募集中】
弊社ではAWSを活用したソリューションの企画・設計・構築・運用や、Ruby on Rails・JavaScriptフレームワークなどを使用したアプリケーション開発を行うスタッフを募集しています。採用情報の詳細
弊社での勤務に関心をお持ちの方は、知り合いの弊社社員・関係者を通じてご連絡ください。

My Redmine

こちらの記事もオススメです!
AWS(アマゾン ウェブ サービス)の初心者が実際に使って感じたこと
AWS Lambda と AWS Step Functions を当社検証環境で使用してみました。
Amazon AppStream 2.0 Elastic Fleets 好印象!
AppStream Elastic Fleetsを使ってみました。運用管理が楽で、用途によってはコスト面でもメリットあります。
無料でRedmineの疑問を解決!オンライン質問会を開催しています
月に概ね2回、Zoomのウェビナー形式でRedmineオンライン質問会を開催。Redmineに関する質問にその場で回答します。
たのしい自作キーボード〜分割キーボードやPRK Firmwareの話〜
自作キーボードを作ってみました。キー配列のカスタマイズにはPRK Firmwareがおすすめです。
RedmineのREST APIを活用してプロジェクトメンバーやロール、公開設定などのレポートを作成しています
「プロジェクトに対してユーザーが過剰な権限を持っていないか」「プロジェクトが公開状態になっていないか」などのチェックができます。
ファーエンドテクノロジーからのお知らせ(2024/04/24更新)
入門Redmine 第6版 出版記念企画セミナー「Redmineのアクセス制御」【2024/5/30開催】
入門Redmine 第6版(2024年3月23日発売)の書籍から「Redmineのアクセス制御」について解説します。
My Redmine 初回ご契約で「入門Redmine 第6版」プレゼントのお知らせ
Redmineのクラウドサービス「My Redmine」を初めてご契約いただいたお客様にRedmine解説書「入門Redmine 第6版」を進呈いたします。
2024年度ブランドパートナーに島根県在住のモデル ユイさんを継続起用
ユイさん(モデルスタジオミューズ所属)をファーエンドテクノロジーの2024年度ブランドパートナーとして継続して起用します。
My Redmine スタンダードプランおよびAdminサポートデスクプランの料金改定のお知らせ【2024年4月ご利用分より】
2024年4月ご利用分より、My Redmine スタンダードプラン(民間企業・個人向け及び官公庁向け)とAdminサポートデスクプランの料金を改定いたします。
Redmineの最新情報をメールでお知らせする「Redmine News」配信中
新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け