AWSサービス
前回はAWSの概要とクラウドについて解説しました。
今回はAWSのサービスを実際に紹介していきたいと思います。
EC2
基本的なインスタンス(サーバ)を作成するサービスです。サーバアクセスのピークに合わせてインスタンスを増やしたり減らしたりを設定できます。またCPUやメモリも簡単に変更することができます。
料金体系は以下です。
- 稼働料金
- 転送料金
- ストレージ料金
基本的に時間単位で課金され、OSやインスタンスタイプによって料金は変わります。転送料金はEC2の外にデータを転送する時にかかります。
ストレージ料金は厳密にはEBSというサービスの料金になります。EBSはEC2とセットで使われ、EC2のストレージ(ディレクトリやファイル置き場)の役割を果たします。
S3
EBSと違い容量無制限のストレージサービスです。Googleドライブと同じようなものだと思っていただければと思います。自動で複数のAZ(アベイラビリティゾーン=データセンター)に保存されるため、耐久性がとても高いです。セキュリティ設定も細かく設定可能で、アクセス設定や暗号化を簡単にできます。
料金体系は以下です。
- ストレージ料金
- リクエスト料金
- データ転送料金
リクエスト料金とはデータをアップロードしたり、ダウンロードするリクエストに対する料金です。
Lambda
Lambda(ラムダ)はサーバを用意せずにソースコードだけでプログラムの実行ができるサービスです。このようなサーバの管理や構築を必要としない考えをサーバレスと言います。もちろん裏ではサーバが動いているのですがサーバの管理は完全にAWS側がやってくれているということです。そのため私達はソースコードを作ることだけに集中できます。
料金体系は以下です。
- リクエスト料金(月間100万リクエストまで無料)
- メモリ使用量
Lambdaは実行されなければ料金はかかりません。それどころか月100万リクエストまで無料なのでとてもコスパがいいです。メモリは設定の変更が可能で料金を下げることもできます。
API Gateway
API GatewayはAPIの管理や実行を簡単にできるサービスです。
料金体系は以下です。
- APIリクエスト料金
- データ転送料金
- (キャッシング料金)
キャッシング料金はキャッシュを有効にした場合のみ適用されます。
RDS
AWSでデータベースを使う場合かつリレーショナルデータベースを使う場合に便利なサービスです。元はデータベースといえばサーバーの中にOSやパッケージを用意しその中にインストールするという手順を踏んでやっと作成できました。そのような手間が不要なのがRDSです。王道のMySQLやPostgreSQLなども揃っているので既存の環境からの移行も簡単にできます。
料金体系は以下です。
- 稼働料金
- ストレージ料金
- バックアップストレージ料金
- データ転送料金
ストレージ料金は確保している分だけ課金されます。そのため使っていないのに余分に確保していると課金額が無駄に増加するので注意が必要です。またバックアップストレージも課金対象となります。そのため、インスタンスを消してもバックアップだけ残していると課金されます。
DynamoDB
こちらもRDSと同じデータベースサービスですが、NoSQL型データベースです。SQLは使用できませんので検索能力は落ちますが、大量のアクセスに柔軟に耐えることができます。
料金体系は以下です。
- ストレージ料金
- データ転送料金
- キャパシティ料金
キャパシティ料金というのはデータベースがどれくらいの性能を出せるかというインスタンスタイプのようなものです。また、RDSと違いストレージ料金は使った分のみに課金されます。
実装例(応用編)
ここからは私も実装したことがある「よくある実装例」を紹介していきたいと思います。少し難しいと感じるかもしれませんが今回は理解できなくて大丈夫です。今後の記事でそれぞれのサービスを詳しく解説していきます。
EC2 + RDS
クラウドサーバーとデータベースの基本的な構成です。EC2にApache(Webサーバソフトウェア)を入れ、WordPressをインストールすることで簡単にwebサイトを作成・公開することができます。
オートスケーリングによりサーバの増強を自動で行うことができるため、サーバが落ちる可能性が激減します。
また、RDSを使うことで自動バックアップが行われ、データが消失するリスクを減らします。リレーショナルデーターベースなので結合や検索なども簡単にできます。RDSの詳細についてはまた別ページで紹介します。
API Gateway + Lambda + DynamoDB
APIを作る際の基本構成です。サーバレスの考え方に基づき構成しています。そのため、サーバの管理が不要かつ費用を抑えることができます。
最近ではAPIGatewayを使用することなく、LambdaのみでAPIを作ることもできるようになり実装がより簡易になってきています。
Lambdaを使用する場合はデータベースはDynamoDBを使うことが多いです。DynamoDBは高い可用性(常にデータを読み書きできること)を持ち、Lambdaと同じく自動スケーリングが可能なためこれらはとても相性が良いです。
GitHub + Codepipeline
GitHubと連携し、ソースコードの自動デプロイを行います。リリースの手間を減らすことができ、運用の効率が格段に上がります。
AWSサービスの一つであるCodepipelineはGitHub等の更新で発火し、パイプを流れるようにビルドからデプロイまで自動で行います。
これらはCI/CDの考え方に基づいており、GitHub Actions等使うことで自動テストも行います。CI/CDの詳細については別ページで紹介します。