目次

まえがき

第1章 AWSのWEBアーキテクチャーを使い倒す

1.1 はじめに
1.2 Lightsail
1.3 EC2
1.4 ECS
1.5 Lambda
1.6 おわりに

第2章 AWS ConfigとAWS CDKではじめるリソース設定管理

2.1 はじめに
2.2 AWS Configの概要
2.3 準備
2.4 AWS Configのルールの概要と作成方法
2.5 AWSリソースの管理ルールをAWS CDKで作成
2.6 運用のポイント
2.7 おわりに

第3章 チームの開発KPIをWebhookで計測しようとしていたらイベント駆動に目覚めた話

3.1 はじめに
3.2 開発におけるKPIを取りたい
3.3 DDDとイベント駆動設計、そしてAWS
3.4 イベント駆動における様々なデザインパターン
3.5 余談
3.6 まとめ

第4章 プロダクトマネジメントとエンジニアリングマネジメント

4.1 はじめに
4.2 開発組織がマネージするもの
4.3 プロダクトマネジメント活動の成果物
4.4 エンジニアリングマネジメント活動の成果物
4.5 マネジメントのトレードオフ
4.6 組織の組み方
4.7 おわりに
4.8 参考文献

第5章 やってみよう!チームでワークショップ

5.1 はじめに
5.2 ワークショップをデザインする
5.3 気をつけること
5.4 メインのワーク
5.5 おわりに

あとがき

まえがき

 この度は「for Startups Tech Book Vol.2 — スモールチームで開発するためのプラクティス —」をご購入いただきありがとうございます。


本書は、フォースタートアップス株式会社(以下、フォースタートアップス)の開発チームである「テックラボ」の有志メンバーにより執筆された技術書です。


簡単にフォースタートアップスについて紹介させていただくと、私たちは「for Startups - すべては、スタートアップスのために。」というビジョンのもと、成長産業・成長企業を創出することを目指しています。国内最大級の成長企業データベースである「STARTUP DB(スタートアップデータベース)※」を背景に、人的側面からスタートアップ企業を支援するタレントエージェンシーサービスを中心に、大企業等と連携したオープンイノベーションサービスや起業文化の醸成を目的としたインキュベーションサービスなどを展開しています。


そして私たちが所属するテックラボでは、成長産業支援事業における課題をテクノロジーで解決すべく、「タレントエージェンシー支援システム(SFA/CRM)」や、成長産業領域に特化した企業情報プラットフォーム「STARTUP DB※」を開発、運営しています。


※スタートアップを中心とした13,000社以上(※2021年7月時点)の企業情報を掲載


本書は有志のメンバーが、それぞれ日々の業務や個人の研鑽の中で得られた知識などを思い思いに執筆しています。そのため、各章はそれぞれで完結し、繋がりはありません。目次をご覧いただき、気になったところから読み進めていただければと思います。


初めて執筆するメンバーもおり、拙い文章もあるかもしれませんが、どなたかの発見に繋がれば幸いです。それでは早速ご覧ください。

第1章 AWSのWEBアーキテクチャーを使い倒す

AWSは数多くのサービスをパブリッククラウドとして提供し、WEBアプリケーションを展開するために必要なさまざまなリソースが用意されております。この章では,そのAWSで構成する一般的なWEBアーキテクチャーとそのアーキテクチャーを選択する際に考慮すべき内容について考えます。

1.1 はじめに

 こんにちは、2月からフォースタートアップスにジョインしています、HUR・JUNHAENGです。前職では主にインフラエンジニアとしてAzureをベースにクラウドアーキテクチャーを設計・構築しておりました。


 Azureはそれはそれで多機能で大きいパブリッククラウドですが、残念ながらWindows系のOSやミドルウェアの需要が少ないWEB業界ではあまり採用されないことが多いです。

 フォースタートアップスでも主にAWS基盤のWEBアーキテクチャーが採用されており、自分にとってはコンピューティングリソースもマネージドサービスも少し異なる環境を味わっております。もちろん、クラウドの基本的な考え方は同じなのでスムーズに理解することはできましたが、より深く理解するためには手を動かした方が早いですよね。


 なので今回は、AWSでWEBアプリケーションを展開する際によく使われるアーキテクチャーパターンを実装して、それに関わるリソースと特徴について自分なりの見解を述べたいと思っております。それぞれのWEBアーキテクチャーがどんな強みを持っているのか、どんなアーキテクチャーを検討した方が良いかを判断する際の材料として使っていただければ幸いです。

■ 説明の範囲について

本章では各アーキテクチャーに使うコンピューティングリソースや各種マネージドサービスの特徴についてフォーカスしております。企業によってコンソール・コマンド・IaCツールなど構築に利用する環境が異なりますので、詳細な構築手順については割愛させていただきます。各リソース詳細や構築手順については、公式ドキュメントを参考することをおすすめします。

1.2 Lightsail

 AWSで利用できるコンピューティングリソースを考えると、まずEC2を思い浮かべる方が多いのではないでしょうか。確かにEC2は高い汎用性を持っており、利用者側で各種AWSサービスを組み合わせて使うことに長けています。ただ、安価で簡単にコンピューティングリソースのみをレンタルする場合はLightsailを考慮するのも良いでしょう。

安価なコンピューティングリソース

 LightsailはAWSが提供するVPS(Virtual Private Server)のことで、コンピューティングリソースをユーザーが利用しやすい形でレンタルできるサービスです。国内では「さくらのVPS」や「ConoHaVPS」など、低価格で簡単にサーバーをレンタルできるので、利用したことがある方も多いでしょう。

 その意味で、コンピューティングリソースだけにフォーカスすると、AWSの各種サービスの中でLightsailは間違いなく一番シンプルにコンピューティングリソースを利用できます。


 Lightsailは通常のAWSのWEBコンソールとは別の「lightsail.aws.amazon.com」のURLを持っており、専用のインターフェースを持っています。リソースを作成する際の必須設定項目はインスタンスのロケーション、イメージ、サイズのみです。その他のストレージ・ネットワーク・パブリックIP・ファイアウォールなど、コンピューティングリソースを利用するために必要な構成は自動的に提供されます。

 本来であれば利用者の細かい設定が必要な構成が、Lightsailではインスタンスのオプションとして定義されているので、複雑なアーキテクチャーを採用する必要がない簡単なサービスはLightsailに向いているでしょう。

図1.1: 作成時にコンソール画面


 また、金額面においても低価格で実装することが可能です。例えば東京リージョンのEC2インスタンスの中で一番安い金額で運用することができるTシリーズは、Lightsailと同じくCPUが低負荷時にクレジットを獲得し、高負荷時にはバーストする特徴を持っています。1同じ仕組みのインスタンスサイズですが、一番小さいサイズのt4g.nanoでもコンピューティングリソースだけでLightsailより高くなってしまいます。

図1.2: lightsailとEC2の金額比較

 もちろん、Tシリーズはt3からnanoサイズも2vCPUで構成されているので、t4g.nanoサイズのEC2インスタンスにもメリットはありますが、ストレージが含まれてないので絶対的な比較にはなりません。

アーキテクチャーパターン

図1.3: 比較的にシンプルなアーキテクチャーで実装できる

 一般的にVPSサービスは安くて簡単に利用できる特徴がありますが、高可用性の構成や連携できるサービスが少ないことが多いです。それに比べLightsailはかなり豊富な機能が提供されており、以下のような機能がサポートされております。


 ・ロードバランサーを作成して、複数のサーバーに負荷分散処理を実装する。

 ・複数のインスタンスを別AZ(Availability Zone)に配置する。

 ・コンテナイメージを利用したインスタンスをデプロイする。

 ・CDN(Content Delivery Network)を利用して静的コンテンツを配信する。

 ・MySQL・PostgreSQLのRDS専用マネージドインスタンスを作成する。


注意点

 Lightsailはあくまで簡単にリソースを利用できることにフォーカスしているので、ユーザー好みの細かい制御はできない仕組みになっていました。例えば、Lightsailのインスタンスは全て外部からアクセスできるパブリックネットワークとして扱われます。ここに関しては、ファイアウォール機能が提供されているので、擬似的なプライベートネットワーク環境を作ることはできます。

 ただ、インターネット全体向けに開放されているポートは、IPアドレスのブラックリストを設定することができない上、インバウンドの設定しかサポートしてないので、セキュリティ的な要件に満たしているのかは充分に検討する必要があります。


 また、ひとつのインスタンスに紐づいているオプションでリソースを管理することは素晴らしい機能ですが、その設定値を他のインスタンスに割り当てることができないので、インフラの変化が激しい環境か、多くのインスタンスの管理しなければいけない場合はデメリットになってしまいます。IaC(Infrastructure as code)ツールなどで設定値を変数に指定して管理することも可能ですが、手軽にコンピューティングリソースを利用できるという本来の目的が薄れてしまいます。

図1.4: インスタンスに設定値が紐づいている


 最後に、安価でストレージを利用できることはメリットがありますが、高いIOPSパフォーマンスを担保できるストレージではないことに注意する必要があります。利用者のユースケースに合わせて複数のバリエーションの中で適切なパフォーマンスを選択できるEC2のストレージに比べると、Lightsailのストレージがやや性能不足だと感じるケースもあるでしょう。2

■ lightsailストレージのパフォーマンス3

For customers with applications that require sustained IOPS performance, high amounts of throughput per disk, or that are running large databases like MongoDB, Cassandra, etc., we recommend using Amazon EC2 with GP2 or Provisioned IOPS SSD storage instead of Lightsail.

 簡単にWEBアプリケーションを構築したい場合や、インフラレイヤーの変化が少ない場合はさくっと環境を構築できるLightsailは充分なメリットがあると思いますが、より厳密なリソース制御やパフォーマンスが求められる場合は別のアーキテクチャーを検討した方がよいでしょう。

1. https://lightsail.aws.amazon.com/ls/docs/ja_jp/articles/amazon-lightsail-viewing-instance-burst-capacity

2. https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-frequently-asked-questions-faq#amazon-lightsail-faq-instances

3. https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-frequently-asked-questions-faq#amazon-lightsail-faq-instances

試し読みはここまでです。
この続きは、製品版でお楽しみください。