Slide 1

Slide 1 text

『Amazon Web Services パターン別 構築・運用ガイド』 輪読会 ~Chapter3 パターン別構築例 3.1節~ meow (id: meow_noisy) 2019/11/08(金)

Slide 2

Slide 2 text

このスライド  本の補足資料の位置付けです  具体的な手順は本を御覧ください  ちなみに、私の本のバージョンは改定2版の初版第 3刷です  本の表記に違いがあるかもしれないので、予めご承知お きください

Slide 3

Slide 3 text

3章の内容  2章までで、VPC、EC2、ELBの構築のノウハウを 学んだ  本章では、それらを組み合わせて、Webサービス をよくある構成(パターン)で実現する方法を学ぶ

Slide 4

Slide 4 text

今日の内容(9つある節の1つまで)  3-1 EC2を利用した動的サイトの構築  3-2 Elastic Beanstalkによる構築レスな動的サイト  3-3 S3による静的サイトのサーバレス構築  3-4 Auto Scalingによる自動スケーリングシステム の構築  …  3-1は丁寧にやったほうがいい気がするので 章を3回分にわける

Slide 5

Slide 5 text

3-1 EC2を利用した動的サイトの構築

Slide 6

Slide 6 text

3-1  ブログサービスである『WordPress』を自分で構 築する  ねらいは、クラウドサービスの便利さを体験すること  基本的な流れは2章と同じ  VPC、サブネット、インターネットゲートウェイ  追加要素  RDS

Slide 7

Slide 7 text

AWS Cloud VPC Internet Internet gateway Availability Zone(ap-northeast-1a) Availability Zone(ap-northeast-1c) Public subnet Private subnet Amazon RDS instance Private subnet Amazon RDS instance Amazon EC2 構成 EC2にApache、その上にwordpressを乗せる

Slide 8

Slide 8 text

AWS Cloud VPC Internet Internet gateway Availability Zone(ap-northeast-1a) Availability Zone(ap-northeast-1c) Public subnet Private subnet Amazon RDS instance Private subnet Amazon RDS instance Amazon EC2 構成 EC2にApache、その上にwordpressを乗せる

Slide 9

Slide 9 text

VPC(p.183)  WordPress用のものを作る  2章をやられた方は、IPアドレスが”10.1.0.0/16” と若干異なることに注意

Slide 10

Slide 10 text

サブネット(p.185)  異なるアベイラビリティーゾーン2つにそれぞれ パブリック用NW1つ、プライベート用NW1つをつくる  WP-PublicSubnet-A  WP-PrivateSubnet-A  WP-PublicSubnet-C  WP-PrivateSubnet-C  パブリックはEC2、プライベートはRDS用  なぜ、IPを間をあけて割り振ったのかはわからなかった  10.1.11.0/24の次が10.1.15.0/24

Slide 11

Slide 11 text

インターネットゲートウェイ(p.187)  さっき作ったVPCにアタッチするだけ

Slide 12

Slide 12 text

ルートテーブル(p.189)  作成したら、パブリックサブネットと関連付け(WP- PublicSubnet-{A,C})  「送信先」と「ターゲット」の違いが分かってない  おそらく、「送信先」は、サブネットに流入するパケットのうち、 監視したいパターンをCIDR表記で書いている  ターゲットは、「送信先」のパケットをどこに送るか(?)  p.190で0.0.0.0/0とigw-…を追加しているのは、パブリッ クサブネットが(アウトバウンドのために)インターネット に接続できるようにするためだと思われる  ルートテーブルとは何かに関しては下記のサイトがわかり やすい  http://awsinfra.site/2018/05/29/post-236/

Slide 13

Slide 13 text

セキュリティグループ(3-1節版)  Webサーバ用のDMZ(どのIPからのアクセスも受け 付ける)  SSH用; 本とは異なるが、ソースは「マイIP」を選択  HTTP: 本(p.193)と異なり、ポートを8080に設定できな い。80でよい。ソース(許可アクセス元)は「任意の場 所」を選択  8080にすると、後でApacheをいじらないといけなくなる  DBサーバ用  ソースをDMZからに絞る。  また、ポートも3306を設定

Slide 14

Slide 14 text

DBサブネットグループ  VPC上にRDSを起動するときは、DBサブネットグ ループを作成する必要がある  RDSのダッシュボードから作る  すでに作っている、サブネット(WP- PrivateSubnet-{A, C})と紐付ければよい  サブネットとなにか違う?

Slide 15

Slide 15 text

RDSインスタンスの作成(p.197)  本と表記が異なる  RDS > データベース > データベースの作成  その後の画面が、デフォルトでは、本とUIが異な るので、ブラウザ上部の「元のインターフェイス に切り替えます」をクリックすれば、本の通りに 進められる

Slide 16

Slide 16 text

EC2内にミドルウェアをインストール sudo yum install php php-mysql php-gd php-mbstring –y sudo yum install mysql -y # wordpressの取得 wget -O /tmp/wordpress-4.9.4-ja.tar.gz https://ja.wordpress.org/wordpress-4.9.4-ja.tar.gz # 圧縮ファイルの解凍 sudo tar zxf /tmp/wordpress-4.9.4-ja.tar.gz -C /opt # シンボリックリンクをはる sudo ln -s /opt/wordpress/ /var/www/html/ #所持者が nobody nfsnobody になっているので sudo chown -R apache:apache /opt/wordpress/ # EC2インスタンス起動時に起動できるようにする sudo chkconfig httpd on # Apacheの起動 sudo service httpd start # Apacheの設定を更新(これをしないと、次回のインスタンス起動時にApacheが自動的に立ち上がらない) sudo service httpd restart EC2にTeratermなどでssh接続(p.153~参照)後、下記のコマンドを実行

Slide 17

Slide 17 text

MySQLのセットアップ  同じくEC2内でmysqlクライアントを呼び出す mysql -u root -p -h [あなたのRDSエンドポイント] # ここで、RDS作成時のパスワードを入力 CREATE USER 'wordpress-user'@'%' IDENTIFIED BY 'wordpress'; CREATE DATABASE wordpress; GRANT ALL PRIVILEGES ON wordpress.* TO "wordpress-user"@"%"; FLUSH PRIVILEGES;

Slide 18

Slide 18 text

WordPressにアクセス(p.206)  http:///wordpress/wp-admin/install-php  本のような、WordPressの設定画面が出たら成功

Slide 19

Slide 19 text

ロードバランシングする(p.208) AWS Cloud VPC Internet Internet gateway Availability Zone(ap-northeast-1a) Availability Zone(ap-northeast-1c) Public subnet Private subnet Amazon RDS instance Private subnet Amazon RDS instance Amazon EC2 Elastic Load Balancing Public subnet Amazon EC2 複数(2つ)のWordPressサーバを立て、かつ、ELBをつけて、アクセスの分散をする

Slide 20

Slide 20 text

EC2インスタンスの複製 1. EC2インスタンスのスナップショット(AMI)をとる 2. AMIから別のAZにEC2インスタンスを起動  サブネットをWP-PublicSubnet-Cにする以外は一緒

Slide 21

Slide 21 text

ELBの設置  本の手順通りにやればできる

Slide 22

Slide 22 text

WordPressの設定変更  WordPressの管理画面を開く  WordPressアドレスとサイトアドレスを、ELBの DNSに変更する  設定すると、再ログインを求められる

Slide 23

Slide 23 text

スティッキーセッション  今までの設定を行うと、ELBのDNSからAP-A,もし くはAP-CのどちらかのWordPressサーバにランダ ムでアクセスすることになる  しかし、サーバ間でセッションを共有しているわ けではないので、異なるサーバにアクセスするか もしれない  そこで、セッションとリクエスト先のサーバを結 びつけ、今後アクセスするサーバを固定するのが スティッキーセッション

Slide 24

Slide 24 text

スティッキーセッションの本の記載 の注意  p.218の下で、ELBでアクセスが振り分けられてい るのを確認する項目があるが、スティッキーセッ ションを張っているので、アクセス先サーバは基 本固定  維持時間設定はp.217上部で30分としているので、 確認できるのは30分後になる  異なるブラウザでアクセスすると確かめられるは ず(未検証)

Slide 25

Slide 25 text

セキュリティグループの変更  現在は、EC2のDNSからそのままサーバにアクセス できる  ELBを設置したので、その受け口はいらない。  なので、HTTP元を0.0.0.0/0で通している部分を、 ELBのみにする

Slide 26

Slide 26 text

HTTPSでのアクセス  通信のセキュリティを高めるために、HTTPSで接続す るようにする。  証明書さえ用意すればELBには簡単にHTTPS接続でき る  自己証明書  本来は自分の作った鍵を認証局に登録する必要があるが、料 金がかかるので、自分で「この鍵は本物ですよ」と認証する  いわゆるオレオレ証明書  (参考)ELBにおいては、無料でSSL証明書を発行できる  https://www.skyarch.net/blog/?p=7942

Slide 27

Slide 27 text

鍵、証明書の作成  opensslコマンドのあるOSで作成する  私は、windowsで行うのは面倒と判断し、VMのLinuxで 作った

Slide 28

Slide 28 text

ELBへ証明書の設定  UIが若干違う  ELBのリスナーページを開く  プロトコル:ポート HTTPS:443  セキュリティポリシー: ELBSecurityPolicy-2016-08  デフォルトのSSL証明書: インポート  インポート先: ACM  証明書のプライベートキー: .keyファイルの中身をコピペ  証明書本文: .crtの中身をコピペ  証明書チェーン: 未記入

Slide 29

Slide 29 text

ELBのセキュリティグループの更新  HTTPSを受け付けるようにする  このあと、WordPressでhttps接続が可能になる。 ただし、自己証明書なので警告画面が出る。

Slide 30

Slide 30 text

[補足]Marketplace  第三者が構築したAMIを利用できる  RedmineやGitLabを自分でEC2に入って設定することな く、すぐにインスタンスを起動できる  今、構築したwordpressのAMIもある  ただし、利用料金がインスタンス利用コストに加えてか かることに注意

Slide 31

Slide 31 text

おかたづけ  EC2  ELB(ロードバランサ)  S3  RDS  ・・・くらいを落としておけば、 そんな大きな課金額にはならないはず この記載が本にほしい所

Slide 32

Slide 32 text

ご清聴ありがとうございました 謝辞: 本スライドは以下の勉強会参加者の方々と議論したうえで作成 しました。ご協力感謝いたします。