はじめに
AWS CDKを現場に導入できたらと思っていて、他の方の導入事例や考え方を学ぶ目的で参加してきました。
簡単な所管と内容について纏めておきます。
※残念ながら途中参加だったため、開始30分は聞けませんでした。。
※認識違いなどありましたらご指摘いただけると嬉しいです。
Session 1: 仮想通貨取引所 bitbank での IaC の導入と実践
途中参加だったので、最後の方しか聞けませんでしたが、
CDKは開発者には受け入れられないという部分だけ聞いてしまい、理由が気になったままです。。
Session 2: eurekaにおけるIaCの実践
IaC導入前はサービスリリース頻繁、セキュリティ管理厳しいなどたくさんの悩みがあり、
AWSマルチアカウント管理に絞ってIaCでどう改善したかをお話しされていました。
今の自分の現場はprod/stage含めて1アカウントで運営しているため、
セキュリティ問題の部分はかなり同感でした。
IaC tools
ProvisioningはTerraform、Ansible+Packerを利用
ServerlessはServerlessFramework利用
ContainerはFargateなど(だったと思います)
AWSマルチアカウント化
AWS Organizations利用
マルチアカウントで実現したいこと:セキュリティ担保やコストレポート、影響範囲の分離(サービスごと、ステージごと)など
アカウントの切り方:MasterAccount、eurekaさんのサービス単位(Pairs/couples/corporate)、prod/stage、sandbox
マルチアカウントの課題:不明アカウント残存、それぞれのアカウントへのログインしなおしが面倒、共通で利用したいリソースが多い
Terraformでのマルチアカウント管理
terraform-account-bootstrapを利用
↓あとで調べる
https://github.com/ericwestfall/terraform-account-bootstrap
QA
IPアドレス管理が煩雑になりがちだが、どう解決されたか?
→解決策特にない、結局Excelなどでの管理が必要。
tfstate破損のリスクが怖い。
→git管理しているため、破損のリスクはない。
Terraformで管理しなかったものなどあるか?
→Serverlessはコード管理していない
Session 3: Infrastructure as Codeに疲れたので、僕たちが本来やりたかったことを整理する+α
JAWSDAYSに参加した際にもお聞きした村主さんのお話。IaCについて色々考えさせられました。
IaCについていろいろ話した結論
IaCの概念は良いがツールが追いついていない。マイクロサービスなど他の概念も同じ
構成の可視化はしたかった。再利用性は捨てた。
2019年度のトレンド
AWS CDK CFnの動作理解が必須となる。
Terraform v0.12 for文で書けるようになったが、ここまで書けるならCDKの方が良さそう
コード化すべきリソース、するべきでないリソース
CloudTrailやSNS、SQSなど即時反映されるリソースはコード化しやすい。
逆にDB系やRedshiftはコード化するメリット少ない。
QA
コード化しなかった部分はあるか?
⇒Auroraのフェールオーバなど運用作業はコード化しなかった
自動テストはどうしているか?
⇒宣言型言語のTerraformではテストしない方針としていた。(処理結果が保証される)
Session 4:Ansible + CloudFormation を、AWS CDK に移行する方法 level0 (仮)
Cloudformationテンプレート管理をAWS CDKに移管するお話。CDK導入を検討中のため、コードの書き方など参考になった。
現行のテンプレート管理
AnsibleでCloudFormationテンプレートを作成していた。
AnsibleのCloudFormationモジュールを利用。
※恐らく下記のモジュール。
https://docs.ansible.com/ansible/latest/modules/cloudformation_module.html?highlight=cloudformation
AWS CDKへの移行
移行対象リソースはEC2、VPC、Cloudwatchアラームなど
移行フローをSTEP1、STEP2に分割して移行した
STEP1はテンプレートまで、STEP2でスタックの移行を行った
STEP2完了までの期間は2週間程度(業務をこなしながら)
Session 5: Ask The Speakers
・IACを始めるには?
⇒SQSやSNSからやってみる
⇒単体レベル(EC2一台など)から始めてみる
⇒AWS CLIを理解するとCloudFormation入りやすい
・CFnのテンプレートテストはどうしてる?良いツールあるか?
⇒ValidationCheck含めて完璧なツールはない。使えるとしたらCDKくらいか
・CFnのテンプレート分割方針について
⇒サービス単位(他サービスへの影響を少なくできる)
⇒ライフサイクル単位
・IaCでCI/CD実現する場合はブルーグリーンデプロイでデプロイするしかないのか?
⇒???
・なぜコード(DockerFile)はすぐに利用不可になるのか?
⇒DockerFileはDockerバージョンアップが多いため影響を受けやすい
AWSでいうとAWS APIに依存するがそれほど問題は起きない
・運用までIaC管理すると障害復旧時のインスタンスIDが変わってしまい、メンテに苦労する
⇒特に解決策はない。運用までIaC管理は行わないほうが良さそう。
得たこと、纏め
何か答えを求めて参加したのですが、やはり「銀の弾丸など無い」ようでした。
理想はありますが、実現性は別の話ですので、
正しくIaCの性質を理解した上で、案件の状況など含め、
使いどころをきちんと考えないといけないなと感じました。
X-Tech JAWS & JAWS-UGアーキテクチャ専門支部は初めての参加でしたが、
今後もインフラ運用業務改善について考えていけたらと思います。