はじめに
AWSはAmazonが提供している便利なクラウドサービスとして有名ですが、初めて使おうと思うと何やら知らない言葉が沢山出てきて圧倒されてしまう人もいるのではないでしょうか?
そのような方々のために、この記事ではAWSを使うにあたって最低限知っておきたい10の重要概念・サービスをピックアップして解説します!
紹介するのは以下の概念・サービスです。
- マネジメントコンソール
- リージョン
- アベイラビリティゾーン
- EC2
- S3
- VPC
- RDS
- Lambda
- IAM
- CloudWatch
ここで紹介する重要概念・サービスを理解すればAWSを使っていくための土台が出来上がります。ぜひこの機会にAWSの根幹をなす概念・サービスを抑えてみましょう!
このくらいは当然知っていると思われた方向けに、おまけとしてその他のよく使うサービスの紹介も行います。おまけで紹介しているサービスもよく使われるものばかりなので知らないものがあれば、この機会に触れてみてはいかがでしょうか?
弊社Nucoでは、他にも様々なお役立ち記事を公開しています。よろしければOrganizationのページも覗いてみてください。
また、Nucoでは一緒に働く仲間も募集しています!興味をお持ちいただいた方は、ぜひこちらまでご連絡ください。
そもそもAWSとは何か?
AWS(Amazon Web Services)は一言で説明すると、
システム運用に必要な様々な機能を提供しているクラウドサービス
です。
クラウドサービスとは?
クラウドサービスとはインターネット経由で提供されるサービスの総称です。
AWSのようなクラウドサービスは世界中にデータセンターを保有しており、これらの計算資源を適切に管理することでサービスを提供しています。これにより、サービス利用者は 自身で物理サーバなどを管理することなく計算資源にアクセスする ことが出来るようになります。
クラウドサービスには SaaS、PaaS、IaaSの分類がありますが、AWSは使う計算資源を細かく管理できる IaaS(Infrastructure as a Service)に該当します。AWSは IaaSの世界シェア1位 の最も知名度の高いクラウドサービスの一つとなっています。
具体的にはどのようなサービスがあるか?
AWSが提供しているサービスの中には
- Webサーバ
- IPアドレス
- ドメイン
- データベース
- ストレージ
などのウェブアプリに必須のものだけなく、
- ファイアウォールの設定
- サービスのログ解析
- 機械学習モデルの構築
- プログラムのビルドやデプロイ
を行うサービスまで用意されており、2024年10月現在では328種類ものサービスが提供されています。
10の重要概念・サービスの紹介
AWSの基本的な理解が出来たところで本題に入ります。
実際に手を動かすことが出来る方は、時間のある時にでも自分で手を動かしてみてください。自分の手で操作することで学習効果を更に高めることが出来るでしょう。
その1 AWS マネジメントコンソール
一言で言うと、マネジメントコンソールはAWSの操作画面のこと です。ここではアカウントで利用しているサービスの利用状況や設定・料金などをまとめて管理できます。
リソース(計算資源)をIaCでコード管理する場合を除けば、ほとんどのインフラ構築の作業はマネジメントコンソールで完結します。規模の大きいプロジェクトではリソースが非常に多くなり、ヒューマンエラーが増えるのでIaCでリソース管理することが推奨されます。
使い方
[このリンク](https://console.aws.amazon.com) にアクセスすると以下のようなサインイン画面が表示されます。AWSアカウントを持っている場合はここからログインすることが出来ます。AWSアカウントを持っていない場合は 新しいAWSアカウントを作成 から作成することが出来ます。
無料枠もあるのでまだ持っていない方は一度自分でアカウントを作ってみることをおすすめします!
初めてログインすると以下のような画面が表示されます。この画面からAWSのサービスを選択して使用する方法はこれ以降の章で説明していきます。
その2と3 リージョンとアベイラビリティゾーン
AWSの仕組みを理解するための鍵となる考えにリージョンとアベイラビリティゾーンがあります。
本記事の初めで、AWSは世界中にデータセンターを保有していてそれらの計算資源を管理してユーザに提供している、という話をしました。これについて、より詳細に解説します。
リージョンとは、AWSが契約しているデータセンターが集中的に存在している地域のこと です。2024年10月現在では、世界で34の地域でAWSが提供されています。それぞれのリージョンの中には概ね3つのアベイラビリティゾーンが含まれます。
アベイラビリティゾーンとは、1つ以上のデータセンターを有するそれぞれが独立したデータセンター群のこと です。複数のデータセンター群を使うことで自然災害などの障害に強いクラウドサービスを作ることが出来ます。
これらの情報を視覚化すると以下の図のように表すことができます。
注:AZはアベイラビリティゾーン、DCはデータセンターの略
その4 Amazon EC2
EC2 は Elastic Compute Cloud の略で、その名の通り柔軟に計算資源を管理することが出来るサービス となっています。
自分で使いたい計算資源のインスタンスタイプを選択することでコストを最適化することが出来るほか、一時的なイベントのためにサイトを用意する場合にもインスタンスサイズを大きく設定することで簡単に計算資源を調達することが出来ます。
インスタンスタイプによって、CPU・メモリ・ストレージ・ネットワーク帯域幅のどれに特化しているかが変わるので用途に応じて適切なタイプを選択することが出来ます。メモリを最適化したい場合やGPUを用いた高速な計算をしたい場合などで選ぶべきインスタンスタイプは異なります。
インスタンスの性能とサイズに応じて料金は高くなりますが、見積りが難しい場合にも簡単に作って壊すことが出来る点は便利な点の一つです。
また、インスタンスの作成時にはマシンイメージを指定することでOSやアプリケーションソフトウェアを導入した状態で仮想マシンを使うことが出来ます。
使い方
1. EC2 インスタンスの起動
まずマネジメントコンソールでサービス一覧または検索バーからEC2のダッシュボードを開きます。
この画面で「インスタンスを起動」をクリックします。すると以下のような画面に遷移し、インスタンスの設定を行うことが出来ます。
名前は"TestApplicationServer"とし、マシンイメージで用いるOSはデフォルトのままAmazon Linuxを使用します。さらにインスタンスタイプもt2.micro、VPCもデフォルトの設定でストレージも最小の8GBとします。
キーペアには新しく作成したキーペアを用います。また、セキュリティグループの設定はあとでSSH接続が出来るように自分のIPからのSSHを許可するようにします。
ここまでの設定が済むとEC2を作成することが出来ます。「インスタンスを起動」をクリックし、正常に起動すると以下のような画面が表示されます。
2. EC2 インスタンスへの接続
次のステップと書かれている下の「インスタンスに接続する」をクリックします。
ここではSSH接続によってアクセスを試みます。上の画像に示されているコマンドを参考にしてターミナルで以下のコマンドを入力することでインスタンスへの接続を行うことが出来ました。
> ssh -i {作成したキーペアのファイルのパス} ec2-user@{パブリック IPv4 DNS}
その5 Amazon S3
S3 は Simple Storage Service の略で、様々な用途に応じてデータを保管することが出来るサービスになっています。
機械学習などのために用いる大規模データを保存したり、ログを長期間使用しないまま保管しておいたり、すぐに使いたいデータを一時的に保存しておくといった場合でもそれぞれの用途でコスト効率の高い選択肢が用意されています。S3のコストは保存容量+転送量で決定されるのでそれらのコストのバランスが適したストレージクラスを選ぶことが大切です。
例)長期間の保存用 →{保存容量コスト:低,転送量コスト:高}
S3ではバケットと呼ばれる格納場所に任意の形式のファイル(オブジェクトとも呼ばれます)を保存することが出来ます。バケットは後からスケールアップ・ダウンが可能です。
S3にはオブジェクトを静的Webサイトとして公開したり、直感的なUIでクエリ操作を行えたり、アクセス権限を細かく設定することが出来るといった便利な機能がいくつも備わっています。
使い方
#### 1. S3バケットの作成EC2の時と同様にS3の画面に移動し、「バケットを作成」をクリックします。以下の画面に辿り着いたら設定項目を入力していきます。
バケットタイプは汎用、バケット名は"testappbucket-1"とし、ACL無効、パブリックアクセスはブロック、バージョニングは有効、暗号化はS3のマネージドキーで行うように設定をしてバケットを作成しました。
2. オブジェクトのアップロード
次にバケットの名前をクリックして以下の画面に移動します。
「アップロード」を押して以下の画面で「ファイルを追加」をクリックすることでローカルからファイルをアップロードすることが出来ます。
以下のような画面になればファイルをアップロード出来ていることになります。ここでアップロードしたファイルはローカルへのダウンロードや静的Webサイトとしてインターネット上に公開することが出来ます。
その6 Amazon VPC
VPCはAWSが提供する仮想ネットワークサービスであり、Virtual Private Cloudの略です。EC2のインスタンスなどをインターネットに接続するためのネットワークの設定を担っています 。一つのVPCの中には複数のサブネットを配置することが出来ます。
インターネットに接続するためにはインターネットゲートウェイとルーティングの設定を行う必要があります。セキュリティ対策も当然可能で、インスタンスに対するファイアウォールとして セキュリティグループ を設定し、サブネットに対する ネットワークACL を設定することが出来ます。
使い方
初めにVPCのダッシュボードに移動し、「VPCを作成」をクリックします。
以下の画面に移動したらVPCの設定を行います。「VPCなど」を選択するとデフォルトで2つのAZにプライベート・パブリックの2つのサブネットを配置するような構成になっています。この画面からネットワーク構成を選択するだけでDNSホスト名の有効化・DNS解決の有効化・インターネットゲートウェイの作成と配置・ルートテーブルの作成までを1クリックで行ってくれます。
先程EC2を起動した際にはデフォルトVPCを利用しましたが、今回のような手順で作成したVPCをEC2の配置場所として指定することも出来るようになります。
その7 Amazon RDS
RDSは代表的なリレーショナルデータベースのサービスである MySQL、MariaDB、PostgreSQL、Oracle Database、SQL Server、Db2、Amazon Auroraの7種類のサービスをクラウド上で利用できるサービスです。
RDSで作成できるデータベースインスタンスはEC2などのように用途に応じたインスタンスクラスとサイズを設定することが出来ます。RDSはマネージドサービスであるため、データベースサービスのアップデートは自動で行われます。
一般的なインフラ構成の例として、EC2にソフトウェアを配置してデータベースをRDSに構築してこれらを連携させるというものが考えられます。RDSの特徴としては、自動バックアップ機能と負荷分散機能による応答の高速化があります。
使い方
RDSはEC2インスタンスと同様にVPCのサブネットに配置することができます。これで適切なソフトウェアを走らせるEC2インスタンスからアクセスできるようになります。
以下はAWSの公式に想定されている一般的な構成の例です。
以下では、このような構成でインフラ構築を行う方法を解説します。
1. DBサブネットグループを作成する
前項で作成したVPCのサブネットにはインターネットからのリクエストを処理するためのパブリックサブネットとVPC内部からのリクエストを処理するプライベートサブネットが存在しています。
パブリックサブネットの設定はEC2の項で扱ったように自分のIPからSSH接続を許可するようにします。ここではプライベートサブネットの設定も行います。
VPCのダッシュボードからセキュリティグループに移動し、「セキュリティグループを作成」をクリックします。
セキュリティグループの名前を "test-private-sg" として、作成済みのVPCを選択します。
インバウンドルールを編集し、タイプに "MySQL/Aurora" を選択することでEC2インスタンスから MySQL のトラフィックを許可する設定に出来ます。
次にDBインスタンス用のサブネットグループを作成し、VPC内にRDSを配置します。まずRDSのダッシュボードを開き、サイドバーから「サブネットグループ」を選択します。
この画面から「DBサブネットグループを作成」をクリックし、以下の画面でサブネットグループの設定を行います。
名前と説明を適切に設定して、VPCの項で作成したものを選択します。更に「サブネットを追加」の項ではプライベートに設定してあるサブネットの識別子を選択します。設定が完了したら作成を行い、以下のような画面に遷移したらOKです。
2. DBインスタンスを作成する
RDSのサイドバーから「データベース」を選択し、下の画面で「データベースの作成」をクリックします。
データベースの作成では、「接続」の項で予め作成したEC2インスタンスとの接続を行い、予め作成したDBサブネットグループとVPCのセキュリティグループを設定することでEC2インスタンスとの接続が可能になります。
ここまでで初めに述べたインフラの構成が完成したことになります。ここでは解説はしませんが、この状態からEC2インスタンスにウェブサーバをインストールすることでDBインスタンスと接続することが出来ます。
その8 AWS Lambda
LambdaはAWSのサービスの中でも非常に便利なサービスの一つです。Lambdaを使うことでサーバを全く意識せずに計算資源を用いてコードを実行することが可能になります。
Lambdaの実行は予め設定したトリガーとなるイベントの発生によって自動で行われます。リクエストに応じてスケーリングは自動で行われるのでサーバの負荷などを注意深く監視しておく必要もありません。
Lambdaのようなコードを配置するだけで自動で実行してくれるサービスをFunction as a Service(FaaS)と呼ぶこともあります。管理に手間がかからないだけでなく、Lambdaは従量課金制なので使われていない間はコストもかかりません。
使い方
初めにLambdaのダッシュボードにアクセスし、「関数の作成」をクリックします。
「一から作成」を選択して関数の作成を行うと以下の画面に遷移します。
デフォルトでは以下のようなコードがLambda関数に設定されています。ここではこの関数を実行してその結果を見ます。
テストタブで空のイベントJSONを用いてテストを実行すると以下のように実行結果が返ってきます。
このLambda関数にはもちろんライブラリなどを用いることも可能になっており、様々な場面で柔軟にアプリの機能を実現させることが出来ます。
その9 AWS IAM
AWSのサービスを使う中で重要になってくる概念がこのIAMです。IAMはIdentity and Access Management の略です。
IAMはユーザやアプリケーションがどのAWSリソースにアクセスすることが出来るかを管理します。
より具体的には、リソースへのアクセスを求めるIAMユーザ・フェデレーションユーザ・IAMロール・アプリケーション(公式ドキュメントではこれらを総称してプリンシパルと呼んでいます)が各リソースへのアクセスを許可されているか確認する役割を果たしているのがIAMです。
IAMユーザとは、ルートユーザ以外のAWSアカウントに対して付与することが出来る権限で、ルートユーザやIAM管理者によって作成されます。
フェデレーションユーザとはSSOによってAWSリソースにアクセスするユーザのことです。AWSはSAML2.0の認証に対応しているので同じくSAMLに対応しているGoogle WorkspaceやSlackなどのユーザであればIAMロールを付与することが出来ます。
IAMロールとは、IAMユーザやIAMユーザグループで管理されていないプリンシパルに対して付与する権限のことを指します。
アクセス権限のデフォルトでは、ルートユーザに全てのリソースへのアクセスを許可し、それ以外のユーザには全てのリソースへのアクセスを拒否しています。最小権限の原則に基づき、必要なだけの権限を付与することが推奨されています。
アクセスの許可を付与する方法は以下の3通りです。
- AWS外のユーザやアプリケーションに対してIAMロールを付与する
- IAMユーザグループに対してアクセス許可を付与する
- IAMユーザに対してアクセスを許可する
なお、上記のIAMロール・IAMユーザグループ・IAMユーザの権限はIAMポリシーを紐づけることで管理することが出来ます。ポリシーにはユーザに対してリソースへのアクセス権限を定義するIDベースのポリシーとリソースに対して信頼するユーザの条件を定義するリソースベースのポリシーの2種類があります。このうち、よく使われるのは直感的にも分かりやすいIDベースのポリシーです。
これらの概念を整理するために以下の図を参考にしてみてください。
その10 Amazon CloudWatch
CloudWatchはAWSリソースの監視、異常検知と通知、最適なリソース使用の促進をするためのサービスです。
AWSでは利用する仮想的な計算資源のスペックを指定することで物理サーバと同等の可用性を確保することが出来ますが、このリソースのメモリ使用率などをモニタリングして適切なスペックを決めるために用いるのがこのCloudWatchです。
CloudWatchはマネジメントコンソール上でリアルタイムのログを表示するインタフェースであると同時にそのログから監視したいデータを自動的に数値化してくれます。更にこれらの数値変動に対してアラームを発生させるように設定することも出来ます。このアラーム機能を用いることで、他のAWSサービスと統合した際に多くの機能を実現することが出来るようになります。
使い方
CloudWatchの機能の一つであるログ機能をAWS Lambdaの例で確認します。
以下のLambdaの実行画面から「ログ」と記されている箇所をクリックします。
遷移先の画面で下にスクロールし、該当する時刻のログストリームをクリックします。
ログストリームではLambda関数の実行開始時間や終了時間、エラーがある場合はそのメッセージなども確認することが出来ます。
【おまけ】その他のサービス
おまけとして、よく使われているサービス14選を簡単に紹介します。上の10個では物足りなかったという方はこちらもチェックしてみてください。
操作ツール
1. AWS CLI
CLIはAWS特有の呼称というわけではなく、Command Line Interfaceの略です。
画面をクリックして操作する代わりに全ての操作をキーボードの操作によるコマンド入力で行うことができる操作画面のことをCLIと呼びます。逆に、画面をクリックして操作するマネジメントコンソールのような操作画面は GUI(Graphical User Interface) と呼びます。
先程インフラ構築の作業はほとんどマネジメントコンソールで完結すると言いましたが、AWS CLIを使うことでも同じ操作を実行できます。
コンピューティング
2. ECS
ECS(Elastic Container Service)は、アプリケーションをコンテナで実行するためのサービスです。コンテナとは、アプリを小さな単位でまとめて動かす技術で、ECSを使うとその管理をクラウド上で簡単に行うことが出来ます。
EC2やFargateのインスタンスから実行をすることが出来ます。
3. Fargate
Fargateは、サーバの管理が不要な場合に用いられるコンテナサービスです。アプリをコンテナで実行するときに必要なインフラを自動で管理してくれます。
データベース
4. DynamoDB
RDB(Relational Database)とは異なる、NoSQLと呼ばれるデータベースの一種で、素早くデータの読み書きができます。オンラインゲームやチャットアプリなど、多くのユーザーが同時にアクセスする場面で活躍します。
5. ElastiCache
ElastiCacheは、データを一時的に保存するキャッシュ用のサービスです。頻繁に使うデータをキャッシュに置くことで、アプリの動作を速くできます。
ネットワーク
6. CloudFront
CloudFrontは、CDN(コンテンツ配信ネットワーク)と呼ばれる仕組みで、画像や動画などのファイルを速く届けるサービスです。世界中の拠点からユーザーに近い場所から配信してくれます。
7. ELB
ELB(Elastic Load Balancer)は、アプリへのアクセスを複数のサーバーに振り分けてくれるサービスです。アクセスが集中したときも、サーバーへの負荷を分散して安定動作を保ちます。
8. Route 53
Route 53は、DNS(ドメイン名システム)のサービスで、ドメインの管理やルーティングを行います。ドメイン名にアクセスしたとき、どのサーバーに接続するかを決める役割を持っています。
セキュリティ
9. Cognito
Cognitoは、アプリにログイン機能を簡単に追加できるサービスです。ユーザーのIDを安全に管理し、GoogleやFacebookなどのアカウントでのログインもサポートします。
10. WAF
WAF(Web Application Firewall)は、ウェブサイトを攻撃から守るための防御システムです。不正なアクセスを防ぎ、アプリを安全に保ちます。
アプリ統合
11. SNS
SNS(Simple Notification Service)は、通知を送るためのサービスです。メールやSMSでユーザーにお知らせを送ったり、他のシステムと連携することができます。
12. SQS
SQS(Simple Queue Service)は、データを順番に並べて待たせるためのサービスです。複数のシステム間でデータをやり取りするときに便利で、処理が遅れてもデータを失わないようになっています。
機械学習
13. SageMaker
SageMakerは、AIモデルを作ったり学習させたりできるサービスです。AIを使ったアプリを簡単に開発し、実際に動かすための環境を提供してくれます。
14. Bedrock
Bedrockは、文章を生成するAIモデルなど、さまざまなAI技術を使いやすくするサービスです。複雑な設定なしで、大規模なAIモデルをアプリに組み込むことができます。
AWSにはここで紹介しきれないほど豊富なサービスが存在しています。使いたいサービスがある場合は公式サイトのドキュメントを参考にしてみましょう。
終わりに
いかがだったでしょうか?この記事ではAWSを使えるようになるための10の重要概念・サービスを解説しました。この記事で紹介した概念をしっかりと理解して実践に繋げてみてください!
弊社Nucoでは、他にも様々なお役立ち記事を公開しています。よろしければOrganizationのページも覗いてみてください。
また、Nucoでは一緒に働く仲間も募集しています!興味をお持ちいただいた方は、ぜひこちらまでご連絡ください。