diary2019-12-01CDKでEC2のBlue/Greenデプロイをするパイプラインを作るこんばんは@manoです。12月ということで、今年もNewsPicksではアドベントカレンダーをやります!(って、僕は初参加なんだけども。2019の1日目の記事ということになります。最近CDKばっかり触っているということもあり、当ブログとしてはここまで2記事連続でCDK関連の話をしてきましたが、今日もCDK関連の話をします。NewsPicksでは現在、デプロイフローの見直しを進めています。Tomcatといったwebサーバー構成でアプリケーションを動かしています。今後それをコンテナ化したり、大きなモノリスになってしまっている部分のマイクロサービス化などをどんどんやっていこうと思っているのですが、まず着手しているのがデプロイフローの改善です。groupのBlue/Greenデプロイを実現しています。これを、CodeDeployを使用してBlue/Greenデプロイを行うようにしようとしていて、そのあたりの仕組みの実装方法にCDK(言語はtypescript)を採用しています。書かなければならないコードの量が少ない。CloudFormationだと、一つ一つのコンポーネントには基本的にroleの明記が必要で、一つのyaml(またはjson)ファイルが巨大になっていくこともしばしばかと思います。その点、CDKではコード内の依存関係から、ある程度勝手に必要なpolicyが割り当てられたroleが自動的に作成されます。IDE等でclassやinterfaceの定義にジャンプすれば、ドキュメントを見ずとも開発が可能CloudFormationだと、yamlやjsonに書いていかなければならないため、自身でドキュメントを確認し、適切に書かなければいけません。CDKだと、typescript等の型のある言語を選択すれば(というかtypescript以外で書いたことないから他はよく知らないんだけど)、classやinterfaceの定義にジャンプすれば必要なパラメータがどのようなものかがすぐにわかるため、便利です!また、テストが書けるというのもとても魅力的です。「デプロイして初めて書いた内容が合っているのかどうかがわかる」という局面も少なからずありますが、テスト実行時点でわかるものも結構あります。CDK自体の開発がものすごく活発これも大きな理由です。最近だと毎週のようにバージョンが上がっています。新デプロイフローの構成このような感じで進めています。tagがbitbucketにプッシュされたらCodeBuildプロジェクトがビルドを実行する1の成果物がS3にアップロードされる2のbucketにアップロードされたことをトリガーとして、CodePipelineが走る2でアップロードされた成果物を整理してS3に上げ直す手動approveCodeDeployによりBlue/Greenデプロイを実行するという構成にしています。上記構成のCDKでの実装このような感じで実装しています。GroupがCDKでは実装できません。roleだけを作っています。create-deployment-group等で行う必要があります。手動approveステージが作れる例えば「ビルドまでは完了してあとはデプロイだ」というとき、そのままデプロイが走ってしまうと、万一それがよからぬタイミングだったりすると大変です。approveという機能があり、手動でapproveしないと以降のステージには進めないようになっています。CodeDeployが使える後述しますが、CodeDeployが素晴らしいです。CDKによりコードで管理できる素敵ですね。groupがまだ生きていればすぐにrollbackできるし、terminate済みだとしても簡単に戻したいリビジョンを選択肢リデプロイできます。細かいイベントフックごとに任意の処理を実行できるこちらに詳細が書かれていますが、デプロイ中のフックが結構細かく分けられていて、それぞれに任意の処理を挟むことができます。終わりにアドベントカレンダーというものに初めて参加したのですが、記事を強制的に書かざるを得ないという意味で貴重な機会だなと感じました。これを機に、様々なカレンダーにどんどん参加したいなと思いました。2019-12-02追記アドベントカレンダー2日目の記事です。月別アーカイブはてなブログをはじめよう!jumpeim37さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。