【AWS】チャットサーバを作りながら、クラウドインフラの基本を学ぼう

0-1

この教材について

目次

サービス開発の勉強、「プログラミング」に終始していませんか?

新しいサービスを考えて、プログラミングによってそれを実現する。将来を思い浮かべながらプログラミングの勉強をしているとワクワクしてきますよね! ですが、実際にサービスを世に出すために必要なスキルはプログラミングだけではありません。実際にサービスを一般に提供するためには、開発で利用していた自身のPCでプログラムを動かすのではなく、プログラムを動かす専用のコンピュータ、「サーバ」が必要になります。

ここ10年くらいで、クラウドの考え方が発達し、この「サーバ」を用意することは一般の方でも手軽に行えるようになってきました。ですが「サーバ」をダウンさせることなく、応答速度を早くし、セキュリティも担保するとなると、プログラミングの勉強にはない、ITインフラの構築・運用スキルが必要になります。

本教材では、クラウドの中でも最も有名なもののひとつであるAWS(Amazon Web Services)を用い、まずは簡単に、サーバをどのように作ることができるのか、チャットサーバの構築を例にしてその手法を学んでいきます。「サーバ」をダウンさせることなく、応答速度を早くし、セキュリティも担保する前に、そもそもサーバはどのようにして動かすのか、基本をしっかり押さえておきたい方におススメです。

本教材で学べること

  • AWS上にシンプルなネットワークを作れるようになる
  • AWS上にシンプルに仮想サーバを作れるようになる
  • AWS上で仮想サーバのバックアップが取れるようになる

本教材で学ばないこと

本教材ではAWSを初めて使い始める方のために、初学者でもイメージしやすく、前提知識を多く必要としない、Amazon EC2を利用します。AWSのコンテナサービスやサーバレスアーキテクチャなど、AWSを高度に活用する手法については学ぶことが出来ませんので、ご了承ください。

本教材が合っている方

  • AWSを触るのが初めての方
  • AWSを触っているが、よりその仕組みを理解して利用したい方

本教材で学ぶ上での必要条件

  • ターミナル (Windowsの場合はコマンドプロンプトやPowerShell) を起動し、コマンドが打てる
  • 簡単なコマンドラインの知識 (cd、ls、pwd、mkdir、cat、viを使ったことがある)

本教材の構成

  • 0章: はじめに
    • 本章です。サービス創出においてITインフラを学習する重要性や、そもそもAWSとは何なのかといった、前提となる情報についてお話します。
  • 1章: 自分だけのチャットサーバを作ってみよう
    • Mattermostというチャットサーバの構築を通して、AWS上にサーバを構築する際に必要な手順と気をつけるべきことを学習していきます。
  • 2章: チャットサーバのバックアップをとってみよう
    • サービスは作ったらそれで終わりではなく、その後には運用作業が待っています。この章では運用作業の内でも特に重要な、データのバックアップについて学習していきます。
  • 3章: アカウントのクリーンアップ
    • 特に学習後、この教材で作成したチャットサーバが不要な場合は、本手順にしたがってリソースを削除します。

本教材における注意事項

  • 学習前に、AWSアカウントを作成済みであることを確認してください。本教材ではアカウントの作り方については説明していません。
  • AWSアカウントに対する数ドル程度の課金が発生します。ご留意の上、学習を始めてください。
  • AWSやITインフラの前提知識は問いません。

完了して次のパートに進む

0-2

サービス創出においてITインフラを学習する重要性

機能要件と非機能要件

突然ですが、皆さんに問題提起をさせてください。新しいサービスを創出するためにプログラミングの勉強だけしていませんか?

確かにプログラミングの勉強をすることは必要です。プログラミングの知識がなければ、そもそも実現したい機能を作れませんから。一方でそれだけでいいのでしょうか。実は、実際に新しいサービスを世に出すために必要な技術はプログラミングだけではありません。

他の人にその創ったサービスを使ってもらうためには、あなたがそのサービスがしっかり動き続けるよう、運用していく必要があります。その際には非機能要件を実現するための技術が必要です。

「非機能要件」という聞き慣れない言葉が出てきましたね。非機能要件とは噛み砕いていうと、「プログラムが動作する前提に求められること」を言います。これに対して「プログラムに実現してほしいこと」は「機能要件」といいます。

非機能要件の重要性

簡単な例としてチケット発行Webアプリを想像してみましょう。チケット発行Webアプリには以下の機能が必要だとします。

  • 全チケット一覧機能
  • チケット購入機能
  • 購入済みチケット一覧機能
  • 購入済みチケットキャンセル機能

このアプリにおいて、これらは「プログラムに実現してほしいこと」です。なので、これらは機能要件にあたります。一方でこのWebアプリが動いているサーバに1秒間に5000人もの人がアクセスしており、チケット購入ボタンを押してから購入が確定するまでに15秒待たされるようなものだったらどうでしょうか。きっと、同じチケットが別のWebアプリから購入できるのであればみんなそちらを使うようになり、ユーザは離れていくでしょう。できるなら、3秒以内に購入確定されてほしい。そうしたとき、この「3秒以内に購入確定されてほしい」というのは、サーバの性能に影響されることから、「プログラムが動作する前提に求められること」にあたります。つまり、非機能要件です。

もし、非機能要件を考慮せずにサービスを世に出してしまうと、以下のような問題が生じることが往々にしてあります。結果、どんなにそのサービスが優れたコンセプトを持っていたとしても、そもそも使えない時間が多かったり、安心してデータを預けられなかったりして、ユーザは離れて行ってしまうでしょう。

  • 実際にリリースしてみたら、サーバの応答に時間がかかりすぎ、ユーザ体験に影響がある
  • サーバ1台でのみリクエストを処理しており、サービスが頻繁にダウンする
  • ログやCPU・メモリの使用率などが収集されておらず、サービスがダウンした時、原因を特定できなくなる
  • セキュリティ対策がなされておらず、脆弱性を突かれてデータを奪われたり、他の攻撃の踏み台にされる
  • データや設定のバックアップが取られておらず、障害からの復旧ができず、ユーザのデータを損失する

非機能要件を実現するための技術

したがってサービスを世に出す、つまり本番環境にリリースするときには非機能要件を適切に設定し、それらを実現するITインフラ – ネットワークだったり、ストレージやサーバなど – を構築できる技術力が、サービス創出には不可欠になります。

かつてはITインフラは自分でコンピュータを購入して用意したり、月額利用料を支払って、レンタルサーバを借りたりするのが一般的でした。しかし、現在はクラウドを利用できるため、秒単位で本当に自分が必要な時だけITインフラを立ち上げて、不要になったら停止しておいたり、削除することが容易になったりと、ITインフラの用意の難易度は格段に下がっています。個人でも一定の非機能要件を実現するための地盤が整ったと言えるでしょう。だからこそ是非、本講座でITインフラに興味を持っていただき、サービス創出の際には非機能要件のことも忘れずに考えられるようになっていただければ幸いです。

さて、次の節ではそんなクラウドの中でも今回利用してみるAWSについてまず簡単に説明しておきましょう。前のパートに戻る完了して次のパートに進む

0-3

そもそもAWSとは

AWSとは何か

皆さんの中にはAWSについて、なんとなく知っているという方々から、聞いたことはあるけれど中身はよくわからないという方々まで、様々かと思います。ここで実際にAWSを触り始める前に、その理解を深いものにするため、そもそもAWSとは何なのか? ということについて確かな理解をしておきましょう。

AWSとは、Amazon.comが提供するパブリッククラウドです。これだけではまだよくわからないですよね。そもそもクラウドとは一体何でしょうか。

クラウドとは端的に言うと、「計算資源を簡便に、必要に応じて、ネットワークを通じて利用するための仕組み」のことです。ここでいう計算資源とは、コンピュータそのものやSSDやハードディスクのようなストレージ、ご家庭にもあるかと思われるルータやハブといったネットワークなどを指します。まず、これらを「ネットワークを通じて利用する」とは、どういうことでしょうか。

皆さんはオンラインストレージサービスを使ったことがありますか? DropboxやMicrosoftのOneDrive、GoogleのGoogle ドライブなどです。これらのストレージを利用するとき、一般的にはブラウザを開いて、各サービスにログインし、データを保存するときは、ファイルをブラウザ上にドラッグ&ドロップすれば保存されます。逆にパソコン内にダウンロードしたいときは、右クリックした際に現れるメニュー内で「ダウンロード」に類する項目をクリックすれば、ブラウザ経由でダウンロードされるでしょう。このことがまさしく、「ネットワークを通じて」ストレージを「利用する」ということなのです。同じようにブラウザからリクエストすることで、クラウドではサーバを作って利用したり、サーバが接続されるためのネットワークを作ったり、削除したりすることができます。これが計算資源を「ネットワークを通じて利用する」ということなのです。

そして、クラウドでは計算資源を「ネットワークを通じて利用する」とき、利用するまでに契約書のやり取りがあったり、計算資源を準備する人手がなかったりなどして、大きな待ち時間が発生することはありません。これらの手続きは自動化されていて、利用者は簡便に利用することができます。つまり、クラウドは「セルフサービス」です。さらにクラウドでは、ユーザが必要な時にクラウド上の計算資源を利用でき、不要になったらそれらを削除することができます。このことから、クラウドは「オンデマンド」であるといえます。

以上のことからクラウドとは、計算資源を「セルフサービス」かつ「オンデマンド」で「ネットワーク経由」で利用するための仕組みと言えます。このことが「クラウド」という言葉の本質になりますので、覚えておきましょう。

AWSはパブリッククラウドなので、特に制限なく、誰もが利用できるクラウドになります。つまり、インターネットを経由して計算資源をセルフサービスかつオンデマンドで利用できる、Amazon.comが提供する仕組み、それがAWSとなります。

パブリッククラウドはAWSだけではありません、よく知られているものとしてGoogleのGoogle Cloud、MicrosoftのAzureなどがあります。この教材では筆者がAWSのことに最も詳しいため、他のクラウドとの比較はあえて行いません。が、少しサーバを立ててみようとする用途では、どのクラウドも機能的に差異はないかと思われます。

AWSの代表的なサービス

AWSには無数のサービスがありますが、代表的なもの、筆者がよく使っているものを挙げ、簡単に概要を説明します。すべてを一度に覚える必要はありませんが、本教材内でも当然いくつかのサービスが使われておりますので、サービス名を見てどんなサービスかわからなくなったら、このページに立ち戻って、おさらいしてみてください。

コンピュートサービス

  • EC2 (Elastic Compute Cloud)
    • サーバを必要な時に必要な数起動できるサービスです。CPUの種類やメモリ量によっていろんなタイプのサーバを起動することができ、なかにはGPUを備えたタイプもあります。
  • ECS (Elastic Container Service)
    • コンテナを必要な時に必要な数起動できるサービスです。コンテナとは、サーバ内で実行されるアプリケーションを論理的な区画内に閉じ込める技術で、昨今の開発現場でよく使われています。厳密にはECSはこのコンテナたちを実行制御、つまりオーケストレーションを行うサービスです。
  • Lambda
    • プログラムソース内の特定の関数を実行できるサービスです。「S3にデータが置かれた」「特定時刻になった」などのクラウド上の様々なイベントを契機に、必要な処理をこのサービスで実行することができます。これをイベントドリブン(イベント駆動)といいます。

ネットワーキングサービス

  • VPC (Virtual Private Cloud)
    • サーバなどが接続されるネットワークを構築できるサービスです。様々なネットワークを構築するための部品が用意されており、インターネットと通信可能なネットワークから、インターネットとの通信を完全に遮断した、プライベートなネットワークも作ることができます。
  • ELB (Elastic Load Balancing)
    • ロードバランサを作成できるサービスです。ロードバランサとは、単一のサーバでは性能的に不可能な処理を、複数台に分散させるときに利用するネットワーク装置です。
  • CloudFront
    • CDN(Content Delivery Network)を構築できるサービスです。主に、htmlファイルやjsonファイル、画像ファイルなど、動的に内容が変化することがないデータをやり取りするときに、CDNを利用すると、レスポンス速度向上が図れます。
  • Route53
    • DNSサーバを作成したり、独自ドメインを取得が行えるサービスです。DNSサーバとは、xxx.example.comといった、インターネット上などで使われる名前を、コンピュータの所在を直接表すIPアドレスに変換してくれるサーバのことです。

ストレージサービス

  • EBS (Elastic Block Store)
    • ブロックストレージを提供するサービスです。厳密にはEC2の中の一機能になります。ブロックストレージとはいわゆるSSDやHDDに代表されるようなストレージのことで、「ブロック」という単位でデータを読み書きできるストレージのことです。
  • S3 (Simple Storage Service)
    • オブジェクトストレージを提供するサービスです。オブジェクトストレージとは、「オブジェクト」という単位でデータを読み書きできるストレージのことです。基本的にRestful APIで操作が可能という特徴があります。
  • EFS (Elastic File System)
    • ファイルストレージを提供するサービスです。ファイルストレージとは、いわゆるおなじみの「ファイル」単位でデータを読み書きできるストレージのことです。よく家庭で使われているNAS(Network Attached Storage)は、大抵ファイルストレージの機能を持っています

データベースサービス

  • RDS (Relational Database Service)
    • リレーショナルデータベースを構築できるサービスです。RDSでは、自分でEC2にリレーショナルデータベースをインストールしなくても、既にMySQLやPostgreSQLがセットアップされたインスタンスをAWSが管理した状態で提供してくれます。セキュリティパッチの適用や、ソフトウェアのアップデートもAWSが行ってくれるので、自分でデータベースサーバを運用するよりも運用負荷を下げることができます。
  • DynamoDB
    • Key-Value形式でデータを格納できる、いわゆるNoSQL型のデータベースサービスです。スキーマを厳格に定める必要がないので、柔軟にデータを読み書きできます。また、DynamoDBはコストをかければかけただけ性能を上げることができる点も特徴的です。ユーザからデータベースサーバが見えないようになっており、いわゆるサーバレスデータベースを作ることができます。
  • Elasticache
    • DynamoDBと同じくKey-Value形式でデータを格納できますが、主記憶(メモリ)上にデータを保存しておくタイプのデータベースを構築できるサービスです。いわゆるRedisやMemcachedと呼ばれるデータベースサーバをAWSが管理してくれるサービスです。

セキュリティサービス

  • IAM (Identity and Access Management)
    • ユーザやロール、ポリシーを管理するサービスです。AWSを操作するのは人ばかりではありません。プログラムやAWS内のサービスがAWSを操作することもあります。一般的に、操作する主体が人の場合はIAMユーザを作成します。そうでない場合はIAMロールを作成します。その後、そのIAMユーザ・IAMロールが操作する対象に対して、適切に権限を割り当てたIAMポリシーを適用します。
  • WAF (Web Application Firewall)
    • Web Application Firewallを構築できるサービスです。WAFはいわゆるDoS攻撃やポートスキャンといった、悪意ある攻撃からサービスを保護するために利用します。
  • Secrets Maganer
    • 秘匿情報を安全に格納しておくためのサービスです。データベースにアクセスするためのパスワードなど、サーバ内のファイルに書いておくのではセキュリティ上問題がある情報は、AWSではSecrets Maganer内に置いておきます。アプリケーションからはAWSのSDKを使って、適切に認証することで秘匿情報にアクセスすることができます。

運用・監視サービスおよびその他

  • CloudWatch
    • ログデータやCPU使用率などのメトリクスデータを蓄積・一元管理し、可視化、分析、通知まで行うことができる、総合運用監視サービスです。
  • Certificate Manager
    • サーバをHTTPS対応するために必要なTLS証明書を、作成・管理してくれるサービスです。
  • Systems Manager
    • 様々な運用作業を効率的にしてくれる機能が詰まったサービスです。Systems Manager内のSession Managerを用いれば、EC2インスタンスにインターネットからSSH経由でログインしなくても、AWSの管理画面上からインスタンスにログインすることができるようになります。
  • CloudFormation
    • AWSクラウドインフラのパラメータを、JSONファイルもしくはYAMLファイルで記述することにより、インフラの構築、変更、削除といった運用作業を自動化してくれるサービスです。AWS CDK(Cloud Development Kit)と組み合わせることで、Typescriptなどの高級言語で、インフラをコード化することができるようになります。

さて、第0章はここで終了です。お疲れさまでした。次の第1章から実際にAWSに触れて、クラウドインフラの勘所を掴んでいきましょう。

1-1

この章でやること

前章では、そもそもなぜITインフラについて学ぶ必要があるのか、そしてAWSやクラウドとは何なのかについて、お伝えしました。ここからは実際にAWSに触れることにより、AWSにはどんなコンポーネントがあるのか、そしてどのように関連しあっているのかを体感していきましょう。

この章では、オープンソースで公開されているチャットツール「Mattermost」の構築を実施し、実際にチャット機能を利用できるようになるところまで設定を行います。具体的には以下のような構成で、チャットサーバを構築・設定していきます。

この章を通じて以下のことを習得できるでしょう。

  • AWS上にインターネット上からアクセス可能なネットワークを構築できるようになる
  • 自分だけの仮想サーバを作成できるようになる
  • データ専用ストレージを用意し、仮想サーバ上で利用可能な状態に設定できるようになる

1-2

自分だけのネットワークを作ろう

この節で作るもの

この節ではまず、仮想サーバが接続されるネットワークを作っていきます。直感的には、皆さんのご自宅にもブロードバンドルータやハブなどの、LANケーブルをつなぐ先があるかと思いますが、あれらをAWS上に設置するイメージになります。詳細には以下を作成し、設定していきます。

  • VPC
  • サブネット
  • インターネットゲートウェイ
  • ルートテーブル

この節の終わりには、AWS上の状態は次のようになるはずです。

この図のうち、インターネットゲートウェイとルートテーブルがご家庭におけるブロードバンドルータ、サブネットがハブに相当します。VPCはこれらを格納する入れ物だと思っておくと良いでしょう。

以下から、実際にAWS上で作業していきます。お持ちのアカウントでAWSにログインし、準備をしておいてください。

VPCの作成

まずはVPCを作成します。VPCとは、ネットワークを構成する際、各部品を入れておくための論理的な入れ物です。以下の手順で作成します。

  1. 上部の検索フォームに「vpc」をと入力し、表示された選択肢の中から「VPC」をクリックします。
  1. VPCダッシュボードが開いたら、左のメニューから「VPC」をクリックします。
  1. 右上の「VPCを作成」をクリックします。
  1. 以下のパラメータを入力します。それ以外は元々の値で問題ありません。その後「VPCを作成」をクリックします。
    • 名前タグ: 任意のわかりやすい名前(ここでは mattermost-vpc とします)
    • IPv4 CIDRブロック: 10.0.0.0/16
  1. 「正常に作成されました」と表示されれば、無事にVPCは作成されています。

[解説] IPv4 CIDRブロック

ここで、IPv4 CIDRブロックという言葉が登場したので説明しておきます。IPv4 CIDRブロックとは、このネットワークにいくつのIPアドレスがあるかという、コンピュータネットワークの大きさを表すものです。

IPアドレスとは、複数のコンピュータを区別するために設定する、4つの数字列になります(ご存知の方向けに厳密に言えば、32ビットのビット列を8バイトごとに区切ったもの)。 192.168.0.100 のような値を見たことがある方もいらっしゃるのではないでしょうか。これがIPアドレスです。 192.168.0.100 と 192.168.0.101 は異なるコンピュータを指し示すことになります。

戻って、CIDRブロックについてです。CIDRブロックとは、特定のIPアドレスに対して「プレフィックス」と呼ばれる 0 から 32 の値を付与したものです。具体的には 192.168.0.0/24 や 172.17.0.0/16 といったものがあります。 / のあとに付与された値を「プレフィックス」といいます。プレフィックスはこのネットワークの大きさを表す値で、小さければ小さいほど、ネットワークとしては大きくなります。

AWSのVPCにおいて、プレフィックスの最小は 16 です。一般的にはこれよりも大きなネットワークを作ることができるのですが、AWSを利用する際の制約として、これ以上の大きなネットワークを作ることは出来ないようになっています。後々にIPアドレスが足りないといった無用なトラブルを避けるため、プレフィックスは最小の 16 を選択することが多いです。

サブネットの作成

VPCを作成したら、次にサブネットを作りましょう。サブネットはご家庭機器に例えるとハブに相当し、固有のCIDRブロックを保持して1つのネットワークを構成します。以下の手順で作成します。

  1. VPCダッシュボードの左メニューから「サブネット」をクリックします。その後、右上の「サブネットを作成」をクリックします。
  1. まず、先程作成したVPCをプルダウンリストから選択します。
  1. 以下のパラメータを入力します。それ以外は元々の値で問題ありません。その後、「サブネットを作成」をクリックします。
    • サブネット名: 任意のわかりやすい名前(ここでは mattermost-subnet とします)
    • アベイラビリティーゾーン: ap-northeast-1a
    • IPv4 CIDRブロック: 10.0.0.0/24
  1. 「正常に作成されました」と表示されれば、無事にサブネットは作成されています。

[解説] アベイラビリティーゾーン

クラウドはサーバなどのITインフラを魔法のように用意して、提供してくれます。そうすると私達には理解できないすごい技術を使って、サーバが生成されているように思えます。すごい技術であることには変わりありませんが、実際には理解できないようなものではありません。裏側ではサーバ・ネットワーク・ストレージの仮想化の技術を使って、物理的に存在するサーバ・ネットワーク・ストレージから、それぞれのリソースを要求された分だけ切り出して、ユーザに提供しているに過ぎません。魔法のように見えても裏側には、物理的なサーバ・ネットワーク・ストレージが存在しています。

物理的に存在している以上は、クラウドのサーバ・ネットワーク・ストレージもいつか必ず故障します。また、サーバ・ネットワーク・ストレージ機器が存在するデータセンター自体が、停電や火災などによって停止する自体も考えられます。

アベイラビリティーゾーンはこのような障害に備えるために存在する、地理的に離れた1つ以上のデータセンター群のことをいいます。複数のアベイラビリティーゾーンをまたがるようにシステムを設計・設定することで、特定のアベイラビリティーゾーンが停止する障害発生時にも、動き続けるシステムを設計することが出来ます。

インターネットゲートウェイの作成とルートテーブルの設定

サブネットの作成が完了し、仮想サーバを接続するネットワークが出来上がりました。ですが、このままでは仮想サーバを起動したとしても、インターネットには繋がりません。ご家庭のネットワークがブロードバンドルータに繋がっているのと同様に、AWS上ではインターネットゲートウェイを作成しVPCに接続、またルートテーブルを設定してあげる必要があります。まず、インターネットゲートウェイを作成して、VPCにアタッチしてみましょう。

  1. VPCダッシュボードの左メニューから「インターネットゲートウェイ」をクリックします。その後、右上の「インターネットゲートウェイの作成」をクリックします。
  1. インターネットゲートウェイに任意の名前を付与します。ここでは mattermost-igw とします。入力したら「インターネットゲートウェイの作成」をクリックします。
  1. 「作成されました」 と表示されれば、インターネットゲートウェイの作成には成功しています。続いて、「アクション」 から 「VPCにアタッチ」 をクリックします。
  1. 接続するVPCのidを選択します。先に作成した mattermost-vpc のidを選択して、「インターネットゲートウェイのアタッチ」をクリックします。
  1. 「アタッチされました」 と表示されれば、インターネットゲートウェイのVPCへのアタッチは成功です。

続いて、元々用意されているルートテーブルの設定を変更していきましょう。

  1. VPCダッシュボードの左メニューから「ルートテーブル」をクリックします。その後、VPCが先に作成した mattermost-vpc となっているルートテーブルのチェックボックスにチェックを入れます。
  1. 「アクション」から「ルートを編集」を選択します。
  1. 「ルートを追加」をクリックし、新しいエントリを追加します。その後、「送信先」には 0.0.0.0/0 (上で示されていない、任意のネットワークを指します) と入力し、「ターゲット」には インターネットゲートウェイ を選択します。
  1. インターネットゲートウェイの候補が表示されるので、先に作成した mattermost-igw を選択します。その後、「変更を保存」をクリックします。
  1. 「ルートを正常に更新しました」 と表示されれば、ルートテーブルの設定は完了です。

[解説] ルートテーブル

コンピュータが遠隔地にある目的のサーバと通信できるのはなぜでしょうか。当然、そのサーバのIPアドレスを指定しているからなのですが、そのサーバが日本に存在するか、はたまたアメリカに存在するかなど知らなくても、普通に通信できています。

この通信を実現しているのが、物理機器としては「ルータ」という機器になります。ルータは、「あるネットワークに到達するためには次にどのルータと通信すればいいか」という情報が事前に書かれた「ルートテーブル」というデータ持っています。ルータにデータが届くと、ルータはその宛先IPアドレスを確認して、ルートテーブルにしたがい、次のルータにデータを渡します。ルータ達はこれを繰り返すことで、最終的に目的のIPアドレスを持つサーバにデータを届けることが出来ます。ルータがあるおかげで、コンピュータが特定のサーバと通信するときに、そのサーバの所在がわからなくても、通信することが出来ます。とりあえず近くのルータにデータを送ってあげれば、あとはルータたちが世界中でつながっているので、データを目的のサーバに届けてくれるわけです。

先に実施したAWSの「ルートテーブル」の設定は、AWS内の仮想ルータにルートテーブルを事前定義する設定になります。ここではデータの送信先に特別なCIDRブロック 0.0.0.0/0 を指定していますが、これは「任意のネットワーク」を指します。つまり、自分の所属するネットワーク以外を送信先とするデータは、全てターゲットに指定したインターネットゲートウェイ mattermost-igw に送る、というのが先に設定したものの意味になります。インターネットゲートウェイはインターネットに直接つながっているルータで、AWSではここからインターネット上のコンピュータたちにアクセスすることが出来ます。

さて、ここまでで自分だけのネットワークが出来上がりました。次の節ではサーバのデータを格納するためのストレージを作成していきましょう。

1-3

データの置き場所を作ろう

この節で作るもの

この節ではチャットサーバのデータの置き場所となる、EBSストレージを作成していきましょう。具体的にはデータベース用、それ以外用の2つを作成します。

EBSストレージはブロックストレージに分類されます。高速なデータの入出力ができる代わりに、EC2インスタンスなどの特定のサーバに紐付くため、アクセスできるのはアタッチされたサーバのみになります。

この節の終わりには、AWS上の状態は次のようになるはずです。

EBSの作成

それでは、EBSを作成していきます。以下の手順で2つ作成しましょう。

  1. 上部の検索フォームに「ec2」をと入力し、表示された選択肢の中から「EC2」をクリックします。
  1. EC2ダッシュボードが開いたら、左のメニューから「ボリューム」をクリックします。
  1. 右上の「ボリュームの作成」をクリックします。
  1. 「サイズ」にデータベース用ストレージに適切な数値を入力します。今回は 10 GiB としておきます。また、アベイラビリティーゾーンに仮想サーバを作成するときのゾーンを選択します。ここでは ap-northeast-1a を選択します。
  1. タグとして「キー」に Name、「値」に mattermost-mysql と入力し、ストレージに名前をつけます。その後、「ボリュームの作成」をクリックします。
  1. 「正常に作成されました」と表示されれば、無事にEBSは作成されています。同じ要領で、その他のデータ用のストレージも作成します。「ボリュームの作成」をクリックします。
  1. 「サイズ」にその他のデータ用ストレージに適切な数値を入力します。今回は 30 GiB としておきます。また、アベイラビリティーゾーンに仮想サーバを作成するときのゾーンを選択します。ここでは ap-northeast-1a を選択します。
  1. タグとして「キー」に Name、「値」に mattermost-data と入力し、ストレージに名前をつけます。その後、「ボリュームの作成」をクリックします。
  1. 「正常に作成されました」と表示されれば、無事にEBSは作成完了です。

[解説] リソースタグ

AWSのほとんどのリソースには、タグを付けることができます。タグとは、リソースに紐づく情報のことで、「キー」と「値」を持ちます。リソースにタグを付けておくことで、運用時に開発環境・検証環境・本番環境の見分けをつきやすくしたり、特定のキーと値を持つリソースに対する課金額を集計したりなど、運用の役に立つことが多いです。このため積極的に、リソースに関する情報をタグとして付与しておくと良いでしょう。特に、キーに Name を持つタグはダッシュボード上のリソース一覧上に表示されることも多いため、可能な限り付与しておくことをおすすめします。

以上で、EBSストレージが出来上がりました。次はいよいよ自分だけの仮想サーバを作成していきます。

1-4

自分だけのサーバを作ろう

この節で作るもの

この節ではとうとうチャットサーバを実行するための仮想サーバを作成していきます。そのために、以下の順に作業をしていきましょう。

  • キーペアの作成
  • セキュリティグループの作成
  • EC2インスタンスの作成
  • EIPの確保とアタッチ
  • EBSストレージのアタッチ
  • インスタンスへのログイン

この節の終わりには、AWS上の状態は次のようになるはずです。

Image from Gyazo

キーペアの作成

まずはじめに、SSHキーペアを作成していきます。SSHキーペアは、作成する仮想サーバにログインするために使用します。

  1. EC2ダッシュボードから、左のメニューの「キーペア」をクリックします。
Image from Gyazo
  1. 右上の「キーペアの作成」をクリックします。
Image from Gyazo
  1. 「名前」をわかり易い名前にし(ここでは mattermost-key とします)、「プライベートキーファイル形式」を .pem にします。その後、「キーペアを作成」をクリックします。
Image from Gyazo
  1. 「正常に作成されました」と表示され、キーペアがPCにダウンロードされたら、作成は成功です。キーペアはPCのホームディレクトリ内の .ssh ディレクトリの中に保管しておいてください。
Image from Gyazo

セキュリティグループの作成

次に、セキュリティグループを作成していきます。作成する仮想サーバはデフォルトではあらゆるアクセスを拒否する設定になっています。セキュリティグループを作成し、仮想サーバに適用することで、指定したアクセス元からの仮想サーバに対するアクセスを許可することができます。ここではサーバへのssh(tcp 22番ポート)と、チャットサーバ(tcp 8065番ポート)を許可します。

  1. EC2ダッシュボードから、左のメニューの「セキュリティグループ」をクリックします。
Image from Gyazo
  1. 右上の「セキュリティグループの作成」をクリックします。
Image from Gyazo
  1. 「セキュリティグループ名」および「説明」をわかり易い内容にし(ここでは mattermost-sg とします)、「VPC」に以前の節で作成したVPCを設定します。
Image from Gyazo
  1. 「インバウンドルール」の欄の「ルールを追加」を2回クリックして、エントリを2つ作ります。その後、以下のパラメータを設定します。
    • 1つ目
      • タイプ: カスタム TCP
      • ポート範囲: 22
      • ソース: マイIP
    • 2つ目
      • タイプ: カスタム TCP
      • ポート範囲: 8065
      • ソース: Anywhere-IPv4
Image from Gyazo
  1. 「セキュリティグループを作成」をクリックします。
Image from Gyazo
  1. 「正常に作成されました」と表示されたら、作成は成功です。
Image from Gyazo

EC2インスタンスの作成

次に仮想サーバである、EC2インスタンスを作成しましょう。

  1. EC2ダッシュボードから、左のメニューの「インスタンス」をクリックします。
Image from Gyazo
  1. 右上の「インスタンスを起動」をクリックします。
Image from Gyazo
  1. ステップ1ではAMI(仮想サーバのテンプレート)を選択します。ここでは「Amazon Linux 2 AMI (HVM)」の内、Kernelバージョンが最新のもの(スクリーンショット上は 5.10)の選択ボタンをクリックします。
Image from Gyazo
  1. ステップ2ではインスタンスタイプ(仮想サーバのスペック)を選択します。ここでは t2.micro のチェックボックスを入れ、右下の「次のステップ」をクリックします。
Image from Gyazo
  1. ステップ3では細かい仮想サーバのパラメータを設定します。以下のパラメータを設定して、右下の「次のステップ」をクリックします。
    • ネットワーク: 以前の節で作成したVPC
    • サブネット: 以前の節で作成したサブネット
    • 自動割当パブリックIP: 有効
Image from Gyazo
  1. ステップ4ではOSの使うebsストレージを設定します。デフォルトで特に問題ありません。右下の「次のステップ」をクリックします。
Image from Gyazo
  1. ステップ5ではインスタンスに付与するタグを設定します。以下のパラメータを設定し、インスタンスに名前をつけます。その後、右下の「次のステップ」をクリックします。
    • キー: Name
    • 値: mattermost-instance
Image from Gyazo
  1. ステップ6ではインスタンスに付与するセキュリティグループを設定します。「既存のセキュリティグループを選択する」を選択し、本節で作成したセキュリティグループのチェックボックスにチェックを入れます。その後、右下の「次のステップ」をクリックします。
Image from Gyazo
  1. ステップ7は最終確認画面です。設定し他パラメータが正しく設定されていることを確認し、右下の「起動」をクリックします。
Image from Gyazo
  1. 仮想サーバを起動する直前で、利用するキーペアを尋ねられます。本節で作成したキーペアを選択し、チェックボックスにチェックを入れたら、「インスタンスの作成」をクリックします。
Image from Gyazo
  1. 「インスタンスは現在作成中です」と表示されたら、右下の「インスタンスを表示」をクリックします。
Image from Gyazo
  1. しばらくして、「実行中」と表示されたら、仮想サーバの作成は完了です。
Image from Gyazo

EIPの確保とアタッチ

次に、作成したEC2インスタンス用のEIPを払い出して、インスタンスにアタッチします。EIPはAWSが確保している、インターネットからアクセス可能な固定パブリックIPです。インスタンスへのアクセスはこのIPアドレス経由で今後実施します。

  1. EC2ダッシュボードから、左のメニューの「Elastic IP」をクリックします。
Image from Gyazo
  1. 右上の「Elastic IPアドレスを割り当てる」をクリックします。
Image from Gyazo
  1. デフォルトのままで特に変更する必要はないため、右下の「割り当て」をクリックします。
Image from Gyazo
  1. 「正常に割り当てられました」と表示されたら、Elastic IPの払い出しは完了です。
Image from Gyazo
  1. 次に「アクション」を選択して、「Elastic IP アドレスの関連付け」をクリックします。
Image from Gyazo
  1. 「インスタンス」の欄で、本節で作成したインスタンスを選択し、右下の「関連付ける」をクリックします。
Image from Gyazo
  1. 「正常に関連付けられました」と表示されたら、Elastic IPのインスタンスへのアタッチは完了です。
Image from Gyazo

EBSストレージのアタッチ

最後に、前節で作成したEBSストレージをEC2インスタンスにアタッチして、インスタンスから利用できるように設定します。

  1. EC2ダッシュボードから、左のメニューの「ボリューム」をクリックします。
Image from Gyazo
  1. 前節で作成したEBSストレージ mattermost-data のチェックボックスにチェックを入れ、「アクション」を選択します。そのメニュー内の「ボリュームのアタッチ」クリックします。
Image from Gyazo
  1. 「インスタンス」の欄で、本節で作成したインスタンスを選択し、右下の「ボリュームのアタッチ」をクリックします。
Image from Gyazo
  1. 「正常にアタッチしました」と表示されたら、 mattermost-data のアタッチは完了です。
Image from Gyazo
  1. 同様に、前節で作成したEBSストレージ mattermost-mysql のチェックボックスにチェックを入れ、「アクション」を選択します。そのメニュー内の「ボリュームのアタッチ」クリックします。
Image from Gyazo
  1. 「インスタンス」の欄で、本節で作成したインスタンスを選択し、右下の「ボリュームのアタッチ」をクリックします。
Image from Gyazo
  1. 「正常にアタッチしました」と表示されたら、 mattermost-mysql のアタッチは完了です。
Image from Gyazo

以上で、自分だけのサーバが出来上がりました。次の節ではサーバにログインして、チャットソフトウェアである mattermost をインストールしていきましょう。

インスタンスへのログイン

お手元のPCからインスタンスにsshログインしましょう。以下のコマンドを実行します。 「インスタンスのEIP」の部分は適宜読み替えてください。

bash1 Copied!$ ssh -i ~/.ssh/mattermost-key.pem ec2-user@<インスタンスのEIP>

無事ログインできたらコンソールは以下のような表示になります。

Copied!
       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
2 package(s) needed for security, out of 5 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-X-X-X-X ~]$

注意

  • AWSなどのクラウドで作成されたインスタンスは、管理者用ユーザ名が予め決まっており、今回作成したAmazon Linux 2ですと ec2-user になります。
  • もし、このコマンドで Permission denied となる場合は、.ssh のディレクトリ権限が 700 で、 mattermost-key.pem のファイル権限が 600 であるようにしてください。bash12 Copied!$ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/mattermost-key.pem
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次