【読書】AWS コンテナ設計・構築 [本格] 入門

AWS 書籍

つい最近(2021 年 9 月)に発売された AWS のコンテナ本ということで、早速 kindle 版を購入してみました。

まず、そもそも流れが早い AWS 界隈において、2021 年 9 月時点の最新情報が盛り込まれた本というだけで価値がありますし、かといって最新情報だけにとどまらず、普遍的な解説もふんだんに含まれているので、長く活躍できそうな本だなという印象でした。コンテナ系サービスを中心に、それらのサービスの概要とよくある構成について、かなり網羅的に説明されており、これからコンテナに取り組む人、資格取得を目指している人に特にオススメです。

また、「Design for Failure」や「Well-Architected Framework」や「Building Blocks」や「Infrastructure as Code」といった、コンテナに限らず AWS やクラウドを利用していく上で大切になるメッセージについてもさりげなく触れられていて、学びのレンジがとても広いです。図による解説がとても多くてイメージもしやすいし、特に AWS 初学者にとっては「こうやって AWS のアーキテクチャ図を書けば良いんだ!」という学びにもつながりそうです。後半のハンズオンでは、ただコンテナ(ECS)を触ってみるだけではなく、CI/CD パイプラインを作ってデプロイを自動化したり、セキュリティに配慮した構成としたりと、プラスアルファで多くのことを学ぶことができます。

なお、本書はタイトル通り、あくまで AWS におけるコンテナの設計や構築に焦点が当てられているので、コンテナという技術そのものであったり、Docker や Kubernetes について詳しく解説があるわけではありません。そういった根本から学習を進める際には他の書籍をあたったほうがよいでしょう。

以下、各章でどんな学びがあったかまとめています。また、より詳細な章立ては こちら から確認することができます。

1.コンテナの概要

この章では、AWS の内容に入る前段階として、コンテナそのものについての簡単な解説がまとめられています。この部分は、特に目新しい情報はなく、独特の切り口での説明というわけではないです。ただ、「コンテナ 入門」で出てくるような情報をスッキリと再構築してまとめてくれているとともに、かなり図も多用してくれているので、初めてコンテナ技術について学ぶ人にとっても非常にイメージしやすい内容となっているように感じました(ただ、cgroup や overlayfs などに言及しているわけではありません)。また、手放しでコンテナを推奨しているのではなく、導入前に考慮すべきことについても言及があり(1.5 節)、バランス感覚がよい印象でした。

2.コンテナ設計に必要な AWS の基礎知識

この章では、ECS や EKS、EC2 や Fargate についての概要を、図を多用しながら解説してくれています。「ECS の用語ってわかりにくいよね!なので図でまとめました!」のような記載があり、つい「わかる~~~~~~」と相槌をうっていました。クラスター、サービス、コンテナ、コンテナ定義、…。このあたりのイメージを掴むことができるようになります。

この章での個人的なポイントは「2.3 アーキテクチャの構成例」でしょうか。AWS のコンテナ環境は、大きく、EC2 on EC2, EC2 on Fargate, EKS on EC2, EKS on Fargate の 4 パターンがあるわけですが、これらについて、コスト・拡張性・信頼性・エンジニアリング、の 4 つの観点から特徴を整理してくれています。AWS の資料だとあまりしっかりまとめてくれていない、各組み合わせにおける(2021 年 9 月時点の)制限についてもとてもよくまとまっていて、非常に勉強になりました。

3.コンテナを利用した AWS アーキテクチャ

この章では、Well-Architected Framework (W-A) という、AWS が提供するベストプラクティス集になぞらえて、どういうサービスや機能を、どうコンテナ系サービスと組み合わせていくかについて、その設計例をかなり詳しく言及してくれています。具体的には、コンテナベースの Web アプリケーションを ALB + ECS on Fargate + Aurora で構築するとして、 W-A における 5 つの柱( 「運用上の優秀性」「セキュリティ」「信頼性」「パフォーマンス」「コスト」 )の観点から、どういう検討が必要か?ということについて詳述されています。 おそらく、ある程度コンテナや ECS, EKS の経験がないと一度で理解できないだろうと思うくらい、ボリューム感がすごいです。

例えば最初の「運用上の優秀性」だけでも、メトリクス設計では CloudWatch と CloudWatch Container Insights、ログ設計では CloudWatch Logs と Firelens、トレース設計では X-Ray、CI/CD 設計ではマルチアカウント環境における Code シリーズの配置例など、かなりの選択肢について特徴や留意点についてまとめられています。また、「セキュリティ」では、ECR のイメージスキャンや OSS のスキャンツールの紹介にとどまらず、関連リソース(S3 など)のポリシー設定などにも言及があり、タイトルの “本格” 入門は伊達ではないな… という感じでした。この他、残りの「信頼性」「パフォーマンス」「コスト」でも濃い解説が続き、一読の価値ありです。

4.コンテナを構築する(基礎編)

この章からは、3章で触れたアーキテクチャの一部を、ハンズオン形式で実際に構築していく手順が紹介されています。自前でアカウントの準備が必要ですが、もし持っていない場合でも 補足テキスト でアカウントの作り方(+最低限必要な設定の紹介)が pdf で準備されているので、これを機に AWS デビュー!もできてしまいます。ただ、結構な手順数で時間もかかるので、余計な課金を減らすために、休日まるまるハンズオンの時間をとって、一日のうちにエイヤッと終わらせてしまうことをオススメします。また、Git については慣れておいたほうがよいかもしれません。

扱う Web アプリケーションの構成は、フロント側は Britz.js を用いた React 製、バックエンド側は echo フレームワークを用いた Golang 製となっています(多分)。また、主に扱う AWS サービスは、CFn, C9, VPCe, ECR, ALB, ECS, Aurora, SecretsManager あたりです。開発環境は Cloud9 (AWS クラウド上に構築可能な開発環境) で行うことを想定しているので、手元の環境にあれやこれやとインストールしなくて済む点も嬉しいポイントですね。

大まかな進行の流れは、VPC 周りのリソースは CFn テンプレートで自動で作成してしまい、そこから、C9 上でコンテナをビルドして ECR にプッシュ、ALB や ECS や Aurora を作成してデプロイし、最後に動作確認。といった流れです。コンテナ系サービス以外の設定(VPCe とか Aurora とか)もガッツリやるので、AWS 初学者は可能であれば経験者と一緒にモブプロ的に取り組むと学習効果が高いんじゃないかなと思いました(もちろん、書籍内で各設定の解説はあるのですが、なにぶん量が量なので…)。

注意点は 3 つ。1 番目は、Docker や Git の知識はある程度前提みたいな雰囲気があるので、少しかじっておいたほうが良さそうなこと(Git のコマンドは載ってるので知識は不要といえば不要だが、Dockerfile は読めたほうがいいかも)。2 番目は、kindle 版でもテキストのコピーができないので写経が辛いということ(設定ファイルについては ここ にあるので、ありがたく使わせていただきましょう)。3 番目は、手順の説明がスクリーンショット頼りになっている部分が多いので、なるべく早めにハンズオンを実施したほうがよいこと(AWS の UI はコロコロ変わるので…)。

5.コンテナを構築する(実践編)

この章は、前章の続きで、アーキテクチャを更に進化させていきます。具体的には、3 章で検討した内容について反映させていっています。この章では、繰り返しの部分については解説が控えめになっていて、個人的には逆に分かりやすくなった感じでした。というのも、2021/10 時点で、すでに ALB の UI が変わっていて、スクショでの説明だとかなり混乱することになったので…。

追加で扱う AWS サービス&外部サービスは、CodeCommit, CodeBuild, CodeDeploy, CodePipeline, Auto Scaling, WAF, Firelens(Fluent Bit), Trivy/Dockle あたりです。大まかな手順は、CI/CD パイプラインを作ってビルド&デプロイを自動化して、スケーリングの設定をして負荷テストをしてみて、セキュリティを高めるための追加の設定をして、踏み台サーバーを作って、ログの配信設定も変えて、最後にパイプラインを動かしてみよう!といったところです。わざとセキュリティテストにひっかかるような手順となっていて、なるほどこうやってテストを自動化するのか!という学びが大きかったです。コンテナ本でありながら、そういった DevOps 的な環境の体験もできるのはとてもありがたいですね。

ちなみに、あまり本筋とは関係ないのですが、Session Manager 経由でアクセスする踏み台サーバーとして Fagate 上に構築する方法(書籍内では Fargate Bastion と命名している)が紹介されていたのですが、素直に EC2 を立てる時と比較した優位性ってなんなのか気になりました(もしかして解説があったかもしれませんが、読みぬけしてしまったかも)。EC2 でつくる踏み台サーバーよりも起動が速いとか、アプリと同じように踏み台サーバーの管理もコンテナイメージベースでできるとかでしょうかね。

注意点は 1 つ。ハンズオンで使ったリソースのクリーンアップについては書籍内で言及はない(と思う)ので、補足テキスト の pdf を参照すべし。そうしないとずっと課金が発生してしまうため要注意です!(なお、pdf 中には言及ないですが、RDS の Subnet Group も消したほうがいいと思います)

タイトルとURLをコピーしました