muku.のプロフィール
コンテナ時代のwebアプリケーションの作り方についての記事の画像

「コンテナ時代のWebサービスの作り方」読了。ポートフォリオ作成の手助けとなる一冊。

2020.9.20

コンテナ時代のWebサービスの作り方を読了したのでまとめました。

コンテナ時代のWebサービスの作り方の本の画像

対象読者

一度簡単なCRUDアプリケーションを作成したことがあるけど、インフラ関連の知識はあまりないといった初学者の方でも丁寧に解説されているため理解が早いと思います。 特に、TerraformやDockerなどのモダンな技術を使用して、これから就職・転職用のポートフォリオ作成を行っていきたいといった方におすすめです。

ちなみに書籍内では、 "インフラが十分できる方、AWSでECSを使ってサービス構築をしたことのある方は物足りない内容の可能性がありますのでご了承ください。" と述べられています。

目次

この書籍では、全体を通して一つのアプリケーションをデプロイするまでの手順に沿って、それぞれの技術の導入方法を学んでいきます。


1章.目指すゴール

まずはじめに、書籍内で作成するアプリケーションのディレクトリ構成から、使用する技術についてまでを解説されています。


2章.TerraformとECS

この章ではTerraformの使い方を中心に解説されています。 使用例としてTerraformによるEC2作成例が書かれていました。 HCLの書き方について1つ1つ解説されているため知識がなくともある程度理解できました。

terraformコマンドでインフラを作成するとterraform.tfstateというファイルが生成されます。 これには作成したインフラの最新の設定情報がJSON形式で保存されています。 tfstateは差分確認のために利用するためチーム開発時には個人で保管すると効率が悪い上、どれが正しいものかわからなくなってしまいます。 そのため、クラウドストレージに保存するのが一般的です。 書籍ではAmazon S3に保存する方法が解説されています。

Terraform ・インフラストラクチャ定義ツールです ・クラウド上のリソースを定義ファイルの状態になるよう生成、操作します ・インフラの構成を宣言的に定義できます = Infrastructure as Code(IaC)を実現します ・HCL(HashiCorp Configuration Language)という言語で.tfファイルに作成したいインフラ構成を記述し、terraformコマンドを用いてその構成通りのインフラを作成します

ECS(Amazon Elastic Container Service) ・クラスター(Amazon EC2インスタンスの集合)を構成しDockerコンテナの実行、停止を行う管理サービスです ・クラスター含め、ECSの概念についてこちらの記事がわかりやすかったです「Amazon EC2 Container Service(ECS)の概念整理」 ・ちなみに書籍内でも概念解説されています

Amazon S3 ・クラウド型のオブジェクトストレージ(ファイル単位で出し入れ可能なストレージ)サービスです ・基本的なストレージ機能の他、ライフサイクルポリシー、バージョニング、ログ、静的サイトホスティングなどの機能を持っています


3章.Webアプリケーションの作成及びCIでのコンテナビルド

3章ではアプリケーションの作成・Dockerイメージの作成・CircleCIでのCIの設定までを行っています。 作成したアプリケーションのCIによる自動テスト、Dockerイメージを作成し、CIによるECRへの登録の自動化について解説がされています。ECR、そして権限管理に必要なIAMはterraformで作成します。

CircleCI自体についてはあまり深く言及されていませんでした。(それぞれの設定キーについてなど) こちらの記事がわかりやすかったので参考になると思います。 →「いまさらだけどCircleCIに入門したので分かりやすくまとめてみた

CI(継続的インテグレーション) ・GitHubなどの共有リポジトリにコミットをマージした時のビルドとテストを自動化するための手法です

ECR(EC2 Container Registory) ・Dockerのコンテナイメージを保存するためのレジストリです ・IAMによる権限管理も可能です

IAM(Identity and Access Management) ・AWSの利用者、AWSのサービスがアクセスできる範囲を制御します ・サービス、リソースの操作について誰に許可するかを設定します


4章.ECS関連のリソース作成

この章ではTerraformによるVPC(サブネット、インターネットゲートウェイ、ルートテーブル)、EC2とECSのためのIAM、EC2(セキュリティグループ、インスタンス)、そしてECS、ALBの作成をしていきます。 全てのコードについて、詳しく解説されていました。ディレクトリ構成も参考になります。

ALB(Application Load Balancer) ・ロードバランサーです。トラフィックの分散を行います。 ・開放型システム間相互接続(OSI)モデルのL7、アプリケーション層で機能します


5章.ドメイン取得とSSL化

5章ではRoute53でのドメイン取得、ALBへのルーティング、AWS Certification ManagerでのSSL化を行います。

Route53 ・DNSサービスです。ドメインからIPアドレスを参照します ・ネームサーバの役割を果たします ・特に権威DNS(ドメイン名とIPアドレスの変換情報を持つDNS)と呼ばれるものです ・他のレジストラ(お名前.comなど)で得たドメインでもホストゾーンを作成しネームサーバの変更をすることで扱えます

AWS Certification Manager ・SSL証明書を管理するサービスです


6章.デプロイ

6章ではCircleCIによるCDを実現しています。 そのために必要なTaskDefinitionのリビジョン更新、Serviceの更新の方法が解説されています。


7章.RDSの接続

最後の章ではデータベースとの接続を行なう本格的なWebアプリケーションの作成をしていきます。 RDSを使用してMySqlサーバを立て、接続する手順が解説されています。 RDSのセキュリティグループ、サブネットはtこれまで通りerraformで作成していますが、RDS自体はterraformで作成するとapplyに時間がかかりタイムアウトしてしまうこと、誤ってRDSを削除されることを避けることを理由に手動で作成しています。

また、RDS接続に必要なホスト名などの設定はSSMパラメータストアで管理しECSコンテナで使用する方法が解説されています。

RDS(Relational Database Service) ・リレーショナルデータベースのサービスで、バックアップやパッチなどの作業を自動的に行います ・「Amazon Aurora」「PostgreSQL」「MySQL」「MariaDB」「OracleDB」「SQL Server」などのデータベースエンジンを選択できます

SSMパラメータストア ・Key-Value Storeです ・「パスワード」「DB文字列」「ライセンスコード」などのシークレットや設定データのストレージ、管理です

まとめ

現在、就職・転職用のポートフォリオのレベルがインフレしているとの話を聞きました。 転職の場合はこのレベルのがもしかしたら標準となってくるのかもしれません。

この書籍で一通り作成していく手順を学んで雰囲気を掴み、それぞれの技術について適時深掘りしていく、というのが良い学習手順だと思いました。

あと、これからTerraformについて学んでいこうと思っていた僕にとって、この書籍内でサンプルが豊富に書かれていたのでとてもよかったです。

今後も僕が学んだことや読んだ書籍について発信していく予定です。 もしよかったらTwitterのフォローをよろしくお願いします。<muku.(@mmuu_kkuu)>

リンク「コンテナ時代のWebサービスの作り方」