こんにちは。SafieでAndroidアプリの開発をしている渡部です。
先日、Safie社内でAWS Startersが開催されました。
AWS Startersは、AWS初学者を想定したハンズオンで、サービスの解説やグループワークを通じてAWSの基礎について学ぶことができます。
新卒エンジニアを対象としたハンズオンでしたが、社内で受講希望者を追加募集していたので自分も参加してみました!
今回はAWS Startersの大まかな内容と、当日の様子をお伝えしたいと思います。
AWS Startersについて
冒頭でもお伝えした通り、AWS StartersはAWS初学者を対象としたプログラムとなっています。
- AWSサービスの解説
- VPC、EC2、RDS等のハンズオン
- グループディスカッション
AWSのエンジニアの方を社内にお招きして、上記の内容を直に受講することができます。
参加にあたって、社内では事前に「AWS Cloud Practitioner程度の知識が必要」とアナウンスされていました。
(ちなみに私はAWSについてはサービスの概要を知っている程度で、実務経験もありません🙂)
以下の動画を視聴してから当日に臨みました。
AWS Cloud Practitioner Essentials
※ AWS Startersの開催には、一定の条件を満たす必要があり開催が限定されています。
セッションの流れ
今回の目標
まずはセッションの全体の流れについての説明と、今回の目標について共有します。
今回の目標は、「堅牢なWebシステム(障害が起こってもサービスを提供できる環境)を作る」ことです。
その実現のためにどのようなサービスやアーキテクチャが必要かを学んでいきます。
AWSのサービスにふれる
まず、今回のハンズオンで登場するAWSサービスについて説明を受けます。
- Amazon EC2
AWS上で利用可能な仮想サーバー - Amazon VPC(Virtual Private Cloud)
AWS上にプライベートネットワーク空間を構築 - Amazon Relational Database Service (RDS)
データベースエンジンの選択が可能なマネージド・リレーショナルデータベースサービス - Elastic Load Balancing(ELB)
AWS上のロードバランシングサービス - AWS Auto Scaling
EC2 インスタンスを負荷またはスケジュールに応じて自動増減
リージョンの概念やセキュリティグループ(ファイヤーウォール)などの基礎的な部分から解説を受けました。
解説の後、実際に手を動かしながらサービスの構築を体験します。各参加者に当日限りのデモアカウントが用意されており、本番と同じ操作感で作業を進められます。
今回のデモの具体的なゴールは、【WordPressを用いながら、AWS上でスケーラブルなWebシステムの構築を行う】ことです。
そのための手順が細かく解説され、一つ一つ順を追って構築していきます。
大まかな作業としては、以下のように進めていきました。
(WordPressの環境はあらかじめ用意されていたので、初期設定のみを行いました。)
基本的な環境構築
- VPCとサブネットの作成
- EC2インスタンスの作成
データベースを準備
- RDSの作成
サーバー負荷を分散
- ELBの作成
構成の冗長化
- AMIを作成し、EC2のマシンイメージを取得
AMIとはAmazon Machine Imageの略で、EC2インスタンスを起動する際のテンプレートのような役割を果たします。 - AMIを用いてEC2インスタンスを複製
- RDSをマルチAZ配置
AZとはアヴェイラビリティゾーンの略で、AWSのデータセンターのグループを指します。 RDSのマルチAZ配置とは、元データのコピーを異なるAZに配置して管理するアクションです。
以上の作業の結果、図のような環境ができあがります。
出典:AWS Workshop Studio スケーラブルウェブサイト構築 ハンズオン Webページ
https://catalog.us-east-1.prod.workshops.aws/workshops/47782ec0-8e8c-41e8-b873-9da91e822b36/ja-JP/hands-on/phase9
(2024年6月30日アクセス)
EC2インスタンスやRDSを、複数のAZに配置しています。これにより万が一どこかのAZがダウンしたとしてもサービスを提供し続けられますね。
このように、今回の目標である「堅牢なWebシステム」実現するために、可用性を高めた構成となりました。
アーキテクチャ検討
ここまでは個人による作業でしたが、次にグループに分かれてのディスカッションが行われました。
今日学んだことを踏まえて、課題が発表されます。
課題の詳細は割愛しますが、概要としましては、「提示された要件を叶えて、且つ可用性も高まる、AWSのアーキテクチャを考える」といった内容です。
各グループに分かれ、ディスカッションを行いました。
今回は初学者向けのハンズオンではありますが、参加者の中にはAWSを実務で使用している方やサービスに詳しい方もいて、講義では触れなかったサービスも積極的に構成に取り入れるグループも多かったです。
グループでの検討が完了したら、各グループが参加者の前で発表を行い、講師の方からフィードバックを頂きました。
複数のAZにEC2やRDSを配置するといった基本的な構造はどのグループも取り入れていましたが、セキュリティの担保やログの保持については異なる案がいくつも出てきて、大変勉強になりました。
ちなみに私が参加したグループでは、ユーザー側が読み込む必要のある画像ファイルなどはAmazon S3で管理してはどうかという案が出ました。
S3は費用対効果が優れつつ、デフォルトで3つのAZにデータを保存できるので、可用性の面でも適したサービスとなっています。
終わりに
1日かけてのハンズオンでしたが、楽しくためになる時間を過ごせました。
解説を受けてからすぐに実際に手を動かしてサービスに触れることで、理解が深まると同時にAWSサービスへ触れるハードルが下がったような気がします。
また自分にとっては、日頃はモバイル以外の開発にあまり関わっていないため、サーバーのアーキテクチャについて学べたこともとても勉強になりました。
Safie社内では定期的にエンジニアのためのイベントを開催しています。
今後も参加する機会があったら、ぜひまたお伝えしたく思います。
ここまで読んでくださりありがとうございました。