読者です 読者をやめる 読者になる 読者になる

AWS設定やった手順まとめ

AWS Infrastructure

参考サイト

0から始めるAWS入門:概要

http://qiita.com/hiroshik1985/items/6433d5de97ac55fedfde

ここの連続の記事を参考にさせていただきながら設定していきます。

さいしょに

最初に以下のことを行っておく。

  • アカウントを登録
  • リージョンをTokyoに変更


概要

  1. VPCの作成
  2. EC2インスタンス作成
  3. Nginxインストール
  4. ELBの作成
  5. RDSの作成

VPCの作成

VPCとは

VPCとは、

Amazon Virtual Private Cloud(Amazon VPC)を使用すると、定義した仮想ネットワーク内にアマゾン ウェブ サービス(AWS)リソースを起動できます。仮想ネットワークは、ご自身のデータセンターで操作していた従来のネットワークとよく似ていますが、AWS のスケーラブルなインフラストラクチャを使用できるというメリットがあります。 http://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/VPC_Introduction.html

ということらしく、

  • サブネット単位・ホスト単位での柔軟なアクセス制御ができる
  • パブリック・プライベートサブネットの切り分けができる
  • 固定のローカルIPを使える

というメリットがある。

VPC作成

Create VPCVPCを作成する。設定はこんな感じで。10.0.0.0/16のアドレス空間を扱うVPCを作成する。

  • Name tag: first-vpc
  • CIDR block: 10.0.0.0/16
  • tenancy: Default

tenancyとは、このVPCがハードウェアを専有するかどうか。

ということらしい。機密性が高かったりするとコンプライアンス的にハードウェアを占有する必要がある場合もあるのかな。

Subnet作成

そしたらこのVPC内にSubnetを作成する。

Subnetとは、

サブネットとは、大きなネットワークを複数の小さなネットワークに分割して管理する際の管理単位となる小さなネットワーク。 ... TCP/IPでコンピュータの住所をあらわすIPアドレスは、コンピュータが所属するサブネットのアドレス(ネットワークアドレス)と、サブネット内でのコンピュータ自身のアドレス(ホストアドレス)から構成されており、上位何ビットがネットワークアドレスかをあらわす値を「サブネットマスク」という。 http://e-words.jp/w/%E3%82%B5%E3%83%96%E3%83%8D%E3%83%83%E3%83%88.html

サブネットマスクがどこまでがネットワーク部でどこまでがホスト部なのかを決めてるのね。

Subnet作成

Available Zone(地理的にサーバーを離しておくことで緊急時に備えている)を設定する

  • Name tag first-AZ-a
  • VPC 上記で作成したVPCを選択する
  • Availability Zone ap-northeast-1a
  • CIDR 10.0.0.0/24

この要領でもうひとつ別のAvailable ZoneのSubnetを作成しておく。

CIDRを10.0.1.0/24とかにする。

Internet Gatewayの追加

Create Internet GatewayGatewayを作成して、それを選択したまま上のボタンのAttach to VPCVPCと紐づける。

Internet Gatewayとは

インターネットゲートウェイは、VPCインスタンスとインターネットとの間の通信を可能にする VPC コンポーネントであり、冗長性と高い可用性を備えており、水平スケーリングが可能です。そのため、ネットワークトラフィックに課される可用性のリスクや帯域幅の制約はありません。インターネットゲートウェイは 2 つの目的を果たします。1 つは、インターネットにルーティングできるトラフィックの送信先を VPC のルートテーブルに追加ことです。もう 1 つは、パブリック IP アドレスが割り当てられているインスタンスに対してネットワークアドレス変換 (NAT) を行うことです。

Routes Tableの追加

このままだとまだインターネットに接続できないので、Routes Tableを作成する。

下のRoutesからさっき作ったVPCに接続。

Route Tableとは

ルーティングテーブルとは、ルータや端末が保持するパケットの配送先に関する経路情報。

TCP/IPネットワークでパケットを送ろうとするとき、ルーティングテーブルを参照してパケットを送付すべき相手を判断する。ある端末から他の端末へとパケットを送ろうとする場合、目的の端末が自ネットワーク内にない場合、端末内にあるルーティングテーブルを参照し、パケットを中継させる端末を決定する。 http://www.atmarkit.co.jp/ait/articles/0111/01/news002.html

2. EC2インスタンス作成

EC2を選択して、Launch InstanceでEC2のインスタンスを作成。

OS

OSはAmazon Linuxを選択。Amazon LinuxRed Hat Enterprise互換とのこと。

The Amazon Linux AMI is an EBS-backed, AWS-supported image. The default image includes AWS command line tools, Python, Ruby, Perl, and Java. The repositories include Docker, PHP, MySQL, PostgreSQL, and other packages.

いたれりつくせりかんある。

インスタンスタイプ

インスタンスタイプを選択する。

今回は12ヶ月無料のt2.microで。

そのまま設定を行っていく。

細かい設定に関してはこの記事を参考にさせていただきました。

ポートはSSHの22とHTTPの80だけ開けておく。

あと開けとくとしたらping用にAll ICMPとのちのちHTTPSくらいかな?

起動画面の前に、秘密鍵・公開鍵を生成しておく。このときに鍵をダウンロードできる。sshで接続するときに必要なので絶対なくさないこと

ここで起動完了。

SSHで接続してみる

ということで早速立ち上げたインスタンスsshで接続してみる。

さっき作ったInstanceのdashboard的なところからPublic IPが確認できる。

デフォルトのユーザはec2-userになってる。

$ ssh ec2-user@{Public IP} -i ~/.ssh/first.pem

IPアドレスが違ったかセキュリティグループの設定を間違えたのか、このままだとsshで接続できなかったので他のサイトを参考に試してみた。

http://www.task-notes.com/entry/20141102/1414929682

ただこれだとセキュリティが甘々すぎてまずいのであとで変更する必要アリ。

ここでPingで疎通確認したいならICMP用のポートも空けておこう。

3.Nginxインストール

Nginxをインストールして、サーバーをスタートさせます。と言ってもやることはコマンド3つだけ。

$ sudo yum install -y nginx
$ sudo /etc/init.d/nginx start
$ sudo chkconfig nginx on

これでIPアドレスにアクセスすればひとまず200 OKが返ってくるはず。

f:id:to_tu:20150830154114p:plain

4. ELBの作成

EC2のDashboardからLoad Balancersを選択して、Create Load Balancersを選択する。

Basic Configure

HTTPとHTTPSを設定。Load Balancer PortとInstance Portをそれぞれ、

  • HTTP: 80, 80
  • HTTPS: 443, 80

とする(デフォルトでこうなるはず)

これでインターネットからELBへ80、443番でリクエストが来た場合、該当EC2インスタンスの80番へフォワードされる。

次の画面でSSLの証明書を登録する必要があるので、今回はHTTPのみで。

Assign Security Groups

Load BalancerはHTTPSなしだとSecurityを改善しようという画面になって作ることができなかった。。SSLなしでも作る方法あるのだろうか。

5. RDS作成

Subnetを作成

RDSのところから、Create Subnet Groupを選択。Subnetを先に設定しないといけない。

パラメータグループの作成

DBのパラメータ設定をしておく。DBの初期設定を登録しておける。

自分の環境は、

$ psql -V
psql (PostgreSQL) 9.4.4

だったのでpostgres9.4を選択。

Macの環境下で自分のpsqlのconfファイルなどを確認した場合、以下のパスを除けばいろいろ置いてあると思います。(brewでインストールした時)

$ ls /usr/local/var/postgres/

ひとまず

timezone = "Japan"

にしておきました。

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

DB用のセキュリティグループを設定します。

VPC内からのみDBへのアクセスを許可する感じに。

Inbound RulesにPostgreSQLの設定を。初期Portは5432なんだね。

Screenshot 2015-08-30 15.01.53.png

RDS起動!

そしたら前準備は整ったので、RDSを起動します。

トップのGet Started Nowのところから。

ここを参考に設定を進めてく

http://qiita.com/hiroshik1985/items/6643b7323183f82297b2

設定画面は一応キャプチャしておこう...笑

リードレプリカ作成

リードレプリカというものを作成しておきます。

これは、スケーリング、負荷分散のテクニックの一つで、

リードヘビー(読み込みが多い)なワークロードに関しては、読み込みを、複数の“リードレプリカ(読み込み用のレプリカ)”に分散させる http://aws.typepad.com/aws_japan/2010/10/amazon-rds%E3%81%AE%E6%96%B0%E6%A9%9F%E8%83%BDread-replica%E3%81%AE%E7%99%BA%E8%A1%A8.html

というテクニックとのことです。また、AWSでのRead Replicaの機能は2010年ごろに発表されたものみたい。

全ての書き込みは、ソースDBインスタンスに対して行われます。リードレプリカは、ソースDBインスタンスに対する書き込みを全てトラックし、自分自身のデータをアップデートします。

そういう仕組みなのかーー。すごいななんか...。もっと自分も知識つけなきゃ。ということで今回は複数ではなくひとつだけRead Replicaを作成してみます。

DBのInstanceの立ち上げが終わった後に、そのInstanceを右クリックしたところから、Read Replicaの作成をすることができます。

適当にidentifierを設定して、AZをもう一つの方にしておく。

ボタン一発。。。すごい。。。