3.4K Views
May 22, 24
スライド概要
JAWS-UG CDK支部 #14 IaC Generator祭り の発表資料です。
https://jawsug-cdk.connpass.com/event/317935/
経済ニュースアプリのSREの仕事をしています。
IaC Generatorからのcdk migrate&importで 手動作成リソースをIaC化するモブプロを定例化した話 株式会社ユーザベース 安藤裕紀 JAWS-UG CDK支部 #14 2024/5/22
00 自己紹介 安藤裕紀 / あんどぅ 株式会社ユーザベース NewsPicks事業 SRE Unit Leader SREチームのマネージャー 兼 テックリード 特技:AWSコスト削減や障害対応を愚直に100本ノックすること CDK Conference 2023の発表: 『3年間運用したCDKの失敗から学ぶCDK開発のプラクティス』 https://www.docswell.com/s/integrated1453/5GXL7N-AWS-C DK-Conference-Japan-2023 ©Uzabase, Inc. All Rights Reserved.
00 ソーシャル経済メディア NewsPicksについて ©Uzabase, Inc. All Rights Reserved.
01 Infrastructure as Codeの民主化をしたい ©Uzabase, Inc. All Rights Reserved.
01 NewsPicksの開発組織では全面的にCDKを採用 AWSに関するテックブログをたくさん出していますが、ほぼすべてCDKで実装 https://tech.uzabase.com/archive/category/AWS ©Uzabase, Inc. All Rights Reserved.
01 SREチーム以外からもCDKのPRが毎日のように飛んできます SREチームのSlackチャンネルに日々送られるCDKのPRレビュー依頼 ©Uzabase, Inc. All Rights Reserved.
01 とはいえ、IaC化されていないリソースも多数存在 ● NewsPicksは2013年9月にサービス開始。当初からAWSを利用 ● CDKは2019年7月にGA。サービスの歴史としては後半から導入 https://aws.amazon.com/jp/blogs/aws/aws-cloud-development-kit-cdk-typescript-and-python-are-now-generally-available/ ● サービス開始当初から存在するストレージやネットワークのリソースは 当然のように手動作成😇 ○ コンテンツのデータを格納するDynamoDBテーブルやS3バケット ○ 昔からあるVPCやサブネット、Security Groupなど ©Uzabase, Inc. All Rights Reserved.
01 IaC化されていないとPRを作れない ● 開発チーム「このネットワーク設定の変更のPRを出したいと思ったんですが、CDKの コードってありますか?」 ● SREチーム「手動作成なので、dev環境で変更手順を検証して、本番のマネコンで変 更権限を持った人とのペア作業でリリース実施していただけますか?」 ○ CDKによる変更は、PRがマージされることを条件に開発チームのメンバーが 本番適用できるが、マネコンやCLIによる本番環境の変更はIAMの権限で制限している → 手動作成リソースは、開発者がセルフサービスで インフラの変更を行うことを阻害していた ©Uzabase, Inc. All Rights Reserved.
02 IaC Generatorからのcdk migrate&importで 手動作成リソースをIaC化するモブプロを定例化 ©Uzabase, Inc. All Rights Reserved.
01 毎月の当番制で「cdk import day」というイベントを開催 ● 手動作成リソースは膨大にあって、すべてをCDK管理に変更することは非現実的 ● 継続的に手動作成リソースをIaC化していく習慣をつけることで、IaC化の要望の多い リソースを徐々にCDK管理にしていくことにした ● IaC化の優先度の高いリソースをリストアップしておき、 当番制で交代しながら1時間でcdk importまでやりきる ○ 会の最初で以下のような目標を決める 「今日はXxxというCloudFront Distributionを importして既存スタックで管理できるようにするぞ!!」 ○ 終わらなかったら当番が宿題で持ち帰る ©Uzabase, Inc. All Rights Reserved.
02 IaC Generatorの機能では、cdk migrateでスタックを作成 IaC Generatorに記載されているのはスタックとして取り込むところまで → CloudFormationスタックが増殖していってしまうのは具合が悪い 1リソース単位で既存スタックに取り込んで行きたい ©Uzabase, Inc. All Rights Reserved.
01 cdk import dayの流れ 1. (事前準備)IaC Generatorのスキャンを開始しておく 2. 取り込み対象のリソース・スタックを決める 3. IaC Generatorでリソースを作成して、テンプレートを作成 4. 作成したテンプレートからcdk migrate でスタックのコードを作成 5. スタックのコードをConstructに書き換える 6. 既存のCDKのスタックにConstructを移植(本番環境のみデプロイされるようにする) 7. cdk importで既存のCDKのスタックにimport 8. CloudFormationでドリフト検出 9. PRをマージして完了 ©Uzabase, Inc. All Rights Reserved.
01 cdk import dayの流れ 1. (事前準備)IaC Generatorのスキャンを開始しておく 2. 取り込み対象のリソース・スタックを決める 3. IaC Generatorでリソースを作成して、テンプレートを作成 4. 作成したテンプレートからcdk migrate でスタックのコードを作成 5. スタックのコードをConstructに書き換える 6. 既存のCDKのスタックにConstructを移植(本番環境のみデプロイされるようにする) 7. cdk importで既存のCDKのスタックにimport 8. CloudFormationでドリフト検出 9. PRをマージして完了 ©Uzabase, Inc. All Rights Reserved. →ここだけ紹介
01 環境別の値がハードコードなテンプレートになるが、それを許容 ● 本番環境のリソースをIaC Generatorでテンプレート化した場合、参照している他リ ソースのARN等は固定値になってしまい、環境別のデプロイに対応しない ● 例えばCloudFront Distributionをテンプレート化すると、ACM証明書のARNが 本番に存在するACM証明書の固定値になったりする。 →CDKでdev,production別に同じコードで管理するのは諦めて本番だけ管理する ©Uzabase, Inc. All Rights Reserved.
01 Construct化したコードを作成するかどうかを設定で管理
● Construct化してcdk importをする環境を、パラメータで管理
● 本番はデプロイする、開発はデプロイしない、をスタックで管理
本番環境のconfig.ts
{
既存スタックのコード
if (props.config.shouldCreateCloudFrontDistribution) {
shouldCreateCloudFrontDistribution: true,
}
new XxxCloudfront(this, "XxxCloudfront", {});
}
dev環境のconfig.ts は false
→IaC Generatorでテンプレート化したコードをなるべく修正せずに本番環境だけ管理
頑張らずに1リソースだけ、本番だけ、1時間で取り込むことを目指す
©Uzabase, Inc. All Rights Reserved.
01 cdk import dayの流れ 1. (事前準備)IaC Generatorのスキャンを開始しておく 2. 取り込み対象のリソース・スタックを決める 3. IaC Generatorでリソースを作成して、テンプレートを作成 4. 作成したテンプレートからcdk migrate でスタックのコードを作成 5. スタックのコードをConstructに書き換える 6. 既存のCDKのスタックにConstructを移植(本番環境のみデプロイされるようにする) 7. cdk importで既存のCDKのスタックにimport 8. CloudFormationでドリフト検出 9. PRをマージして完了 ©Uzabase, Inc. All Rights Reserved.
03 まとめ ©Uzabase, Inc. All Rights Reserved.
04 まとめ ● cdk importを習慣化したことで、手動作成リソースがなくなっていく気持ちよさ ○ よく開発チームからCDKで管理したい要望を受けるリソースも、無理なく 「来月のcdk import dayでIaC化しましょう」と予定を立てることができる ○ 1時間で終わらなくても、みんなでやって終わらないと悔しいので、 PRをマージするまでやりきろうという気持ちになる ○ とりあえず本番だけ管理するimportをやるが、結局devのリソースも管理できよ うにするコード修正までやりたくなる(devは本番影響ないので気楽にできる) ● CDKのコードのリファクタリングの必要性に気づいてコードを改善する機運 ○ スタックのコードが肥大化しがちなので、シンプルに保ちたい気持ちになる ○ モブプロで話しているので、コードを改善していきたいという機運が高まる ©Uzabase, Inc. All Rights Reserved.
ご清聴ありがとうございました! ©Uzabase, Inc. All Rights Reserved.