先日 GA となった AWS CDK のミートアップ AWS Cloud Development Kit (CDK) GA 記念 Meetup が AWS Loft Tokyo で開催されました。
CDK についてはほぼ使用経験がないのですが、今後使えるようになりたいと思い参加してきました。そのレポートです。

ちなみに、事前の申込み時点でのイベントタイトルは AWS Cloud Development Kit (CDK) Meetup でしたが、当日のスライドでは GA 記念 が追加されていました。

イベントの概要

  • 2018年8月に Developer Preview として発表された AWS Cloud Development Kit (AWS CDK) は AWSの環境を管理するコードをTypeScript や Python など一般のプログラミング言語を使って記述できるフレームワークです。
  • CDKはAWSリソースに対するオブジェクト指向の抽象レイヤを提供するほか、ライブラリのデフォルト値としてAWSのベストプラクティスを組み込み、少ないコード量で記述できるよう設計されています。
  • このCDKについて解説し、お客様事例を共有いただくMeetupを開催します。すでにCDKを活用されているはてな様、DeNA様にご登壇いただきます。

イベントページ から引用

参加対象者としては下記のように書かれていました。

  • コードを使ってAWSの環境を構築・運用したいと思っている方
  • すでに AWS CloudFormation を利用していて、テンプレートの記述方法を改善したいと思っている方
  • CDKを使ったAWS環境管理の事例を知りたいと思っている方

私はこの条件で言うと コードを使ってAWSの環境を構築・運用したいと思っている方CDKを使ったAWS環境管理の事例を知りたいと思っている方 に該当する状態でした。
ただ、イベント参加時点ではインフラのコード化については未経験 (CFn と CDK のチュートリアルレベル) で、これを機に IaC に対するモチベーションを高めて勉強していこうという気持ちで参加しました。

タイムスケジュールは下記の通りでした。

  • 6:30PM–7:00PM 受付
  • 7:00PM–7:05PM ごあいさつ・事前説明
  • 7:05PM–7:50PM AWSのインフラはプログラミングコードで構築!AWS Cloud Development Kit入門(仮)
    アマゾンウェブサービスジャパン株式会社
    Solutions Architect 福井厚
  • 7:50PM–8:10PM CDKを用いたモダンなECSクラスタの構築と運用
    株式会社はてな サービス・システム開発本部 システムプラットフォーム部 SRE
    by id:cohalz 原田陽太 (ハラダヨウタ) 氏
  • 8:10PM–8:30PM はてなブログタグとCDK
    株式会社はてな サービスシステム開発本部 第1グループ ブログ統合チーム アプリケーションエンジニア
    by id:aereal 中澤亮太 (ナカザワリョウタ) 氏
  • 8:30PM–9:00PM Ansible + CloudFormation を、AWS CDK に移行する方法
    株式会社ディー・エヌ・エー
    by 佐藤学 氏
  • 9:00PM–9:05PM クロージング

各セッションのレポート (という名のメモ)

各セッションのレポート という名のメモです。メモレベルなので表記ゆれ・誤字脱字多いと思います。

AWSのインフラはプログラミングコードで構築!AWS Cloud Development Kit入門

アマゾンウェブサービスジャパン株式会社
Solutions Architect 福井厚

  • そもそも CDK が生まれた背景とは
    • 手作業は始めるのは簡単だが繰り返しの作業ではミスが起きやすい
    • API コールが失敗したら?どうなったらリソースが利用可能な状態?ロールバックは?
    • CFn を使うとそのあたりが容易、再作成も可能に。ただし文法が辛い
    • サードパーティでも辛さがある
  • CDK とは
    • CDK Apprication > Stack (s) > Construct (s) > Construct (s) …
      • Construct は AWS CDK App の基本ビルディングブロック
      • 単一のリソースを表現したり、複数の AWS CDK App を連携することも可能
      • AWS Construct Library (抽象化レベル)
        • low-level : 様々なプロパティを明示的に指定する必要がある
        • high-level : デフォルトパラメータを使ってより簡単に記述できる
        • Patterns : あらかじめ用意された複数リソースの関係を利用できる
          Composition と呼ばれる
      • CFn にはあるが CDK にはない場合の回避策
        • CFn constructs を直接利用する
        • CFN リソースがない場合は cd.CfnResource を使う (汎用の CFN リソース)
        • addOverRide、addDeleteOverride で上書きする
        • CFn のカスタムリソースを設定する
    • Stack は CFn の Stack と (ほぼ) 同意
    • 1週間前くらいに GA Release v1.0.0 · aws/aws-cdk · GitHub
    • GA 版の対応言語は Python, TypeScript。Java, C# は Developer Preview
    • AWS::CDK::METADATA というリソースは全てのスタックに自動的に付与される
    • cdk bootstrap リージョン、アカウントの設定
      • 指定しない場合は AWS CLI で指定している credential が使用される
    • cdk diff デプロイ済みと変更ごとの差分を確認できる
  • サンプルコーディング
    • demo 1
      • init appinit sample-app がある。後者ではサンプルスクリプトが自動で生成される
      • bin 配下のスクリプトがメイン。lib 配下に Stack のスクリプト
      • 基本的にパラメータにはデフォルト値が設定されている。必要な値のみ指定する
      • cdk synth で CFn テンプレートが生成される
      • cdk deploy でデプロイされる
    • demo 2
      • VPC: AZ 数はデフォルトでは指定のリージョン内すべて。最大数を指定して数を制限できる。
      • ECS: fromAsset() メソッドの実行のみで ビルド、 ECR への push までやってくれる。
  • まとめ

CDKを用いたモダンなECSクラスタの構築と運用

株式会社はてな サービス・システム開発本部 システムプラットフォーム部 SRE
by id:cohalz 原田陽太 (ハラダヨウタ) 氏

  1. どうして CDK を採用したか
    • クラウド環境は AWS
    • アプリケーションをコンテナ化している
    • CFn テンプレートは横展開が大変
    • プログラミング言語で書ける、パッケージ化しやすい、強力な CLI ツール
  2. ECS のライブラリを作る
    • 公式ライブラリはあったが昨日が足りない
    • ecs.config を使いやすく、SSM エージェントの導入、スポットインスタンス対応
    • 既存のツール、仕組みではデプロイやパッケージの更新が難しい
    • CDK なら簡単に設定できる
    • cohalz
  3. GitOps
    • GitHub -> CodeBuild -> ECR
    • stg -> prd の PR を自動生成、stg 環境にデプロイ
    • インフラとアプリのコードを分離できた
    • インフラ構成が GitHub のマスター
    • 今後の課題: cdk diff どうする?まだまだ手作りだが…
  4. 開発時にやったこと
    • Jest のスナップショット
      • 実行結果をファイルに書き込んで前回の実行時との差分を確認できる
    • CDK のアップデート時
      • Renovate と組み合わせてテストを通ればマージ
    • アップデートやバグへの対応
      • 社内 Slack
      • 積極的にバグ報告、PR
  5. まとめ
    • 慣れた言語でかける 以上のメリットがある
    • IaC とそのデプロイツールとして利用できる
    • まだまだ出たとこなので知見共有が大事

はてなブログタグとCDK

株式会社はてな サービスシステム開発本部 第1グループ ブログ統合チーム アプリケーションエンジニア
by id:aereal 中澤亮太 (ナカザワリョウタ) 氏

  1. CDK とわたし
    • プッロビジョニングツールが好き
    • TS 大好き
  2. CDK とはてなブログ タグ
    • インフラは全て AWS
    • ECS でホスト
    • 複数のコンポーネントからなる (API, GraphQL, SSR サーバ)
    • CFn を検討したが
      • SG 作成で同じようなコードが多い
      • クロススタック参照の順序に気を遣う
      • 差分チェック…
    • CDK
      • DP だったが乗っていくことを決めた
      • 最悪脱出できる (cdk synth で CFn テンプレート出力できる)
    • ECS デプロイと CDK
      • CDK でアプリケーションの面倒までみるのか (CDK app 内にアプリケーションのバージョンタグを記載)
    • アプリケーションのデプロイ
      • ツールのレイヤからみると Orchestration
    • レイヤリングの話 (難しい…)
    • ECS
      • アプリケーションの観点では、様々んコンポーネントを隠蔽してくれている
      • 構成管理の観点では、つながりを意識しないといけない
    • 懸念
      • ロールバックが遅くならないか?
      • Stack を細かく分けて対応
  3. アプリケーションエンジニアから見た CDK
    • ソフトウェアの抽象化に対するアンテナ
    • CDK は Clean Architecture を実現できている
    • 秩序立ったレイヤリングとその恩恵
    • CDK への期待
      • Higher-order construct

Ansible + CloudFormation を、AWS CDK に移行する方法

株式会社ディー・エヌ・エー
by 佐藤学 氏

  1. 現行 (Ansible + CloudFormation)
    • Jinja2 というテンプレートファイルから CFn のテンプレートファイルを生成
    • CFn にデプロイ
  2. CDK を知る
    • 現行の構成を AWS 社員向けに説明したところ、袋叩きにされた
  3. CDK への移行
    • Step1: CFn テンプレートの作成を CDK に移行 (synth で出力、現行と差分がないか)
      • Ansble で出力したものと CDK で出力したものの (物理的な) 差分をゼロにする
      • TypeScript のほうがサンプルが多い (多かった)
      • Metadata が出力されると diff が辛いので、オプションで出力しないようにする
    • Step2: CDK を使ってデプロイ
  4. まとめ

    • 移行は 2 ステップ
      • CFn テンプレートの出力 と デプロイ
  5. 質問

    • CDK で出力される Stack の順序は? -> 名前順

まとめ・感想

AWS CDK GA 記念 Meetup の参加レポート (メモ) でした。
感想としては、セッション内容のレベルたけー… です。私が理解できたのは最初の福井さまのセッション (の一部) くらいで、あとはもう「へぇ〜…」という感じで聞いていました。インフラのコード化についてはまだ自分の未体験ゾーンということもありますが、構成管理に対する考え方とか、そもそも出てくるワードの意味とか、わからん部分が多かったです。まあこれは仕方ないかなということで、今後がんばろうという良い刺激を受けることができました。

CDK のミートアップということでしたが、核となるは CloudFormation の話だなという感じでした。CDK については、とにかく

  • 主要な言語 (TypeScript, Python …) で書ける
  • 少量、直感的な記述で CFn テンプレートを生成できる

というところがメリットだという話でした。
ただそのメリットをより感じられるのは、これまでに手で CFn テンプレートを書いていた人や、サードパーティのツールを使って生成した人なのかなと感じました。
なので、このイベントきっかけで CDK を触り始めた・インフラのコード化してみようと思った自分にとっては、 CDK を使って構成管理をしていく前に、 CloudFormation についても勉強していかないといけないなと感じました。といっても、どうやって勉強していけばいいのかわからないので、これまでマネジメントコンソールでぽちぽち構築してきた諸々を再現できるような CDK アプリケーションを作ってみようかなと考えてます。

あと、やっぱりはてなの方々ってかなりレベル高いことやってるんやなーという印象を受けました。
3 年前くらいに転職活動してる時、実ははてなさんにも書類送ったんですが、あの時の自分では全くレベルが達してなかったですね。(じゃあ今は達してるのかというとそうではない)
近々新機能 (サービス) となるブログタグがリリースされるということなので、楽しみにしたいと思います。

長くなりましたが、AWS CDK 、IaC やりはじめたばっかりの自分でも、とにかく簡単に構成管理できるという印象です。
これを機にインフラのコード化はじめてみるのも良いかもしれません。


あと、どうでもいいんですが、ミートアップ終わったあと (21:30くらい) に目黒三大とんかつ屋の とんき に行こうとしたんですけど、その時間でも待ちがあったんです。さすが人気店。雨も降ってたので諦めて帰りました。。
来週も Loft Tokyo 行くので今度は待ってみてもいいかな…

Awswakaran.tokyo.powered By Aws


以上、よっしー (michimani) でした。

Share to ...

Follow on Feedly

comments powered by Disqus