Upload
yoichi-toyota
View
1.825
Download
1
Embed Size (px)
Citation preview
株式会社エクストーン 下っ端 豊田陽一
AWSでサービス作ってみた ◦ 構成 ◦ 各サービスについて EC2 RDS S3 ELB Route 53
Androidアプリケーションと通信するRuby on Railsサービス ◦ アプリケーションサーバ Ruby on Rails (unicornで動作) nginx ◦ データベースサーバ MySQL ◦ タスクワーカー Sidekiq (Resque互換) Redis ◦ メールサーバ Postfix ◦ ログ収集基盤 fluentd
仮想サーバーを作る ◦ AMI (Amazon Machine Image)を選んで即座に起動可能 あらかじめ、WindowsだとかLinuxだとか、色々用意されている
Ubuntuとかのコミュニティが提供しているAMIもある
マーケットプレイスとかで有料のAMIも選べる 自分でカスタマイズしたAMIも選べる
固定のグローバルIP ◦ EC2インスタンスに割り振る EC2に割り振られるIPは再起動時に変わる VPC(後述)の場合、そもそもグローバルIPが割り振られない
1アカウント5個を超えると色々手続きが必要
仮想的なプライベートネットワーク ◦ ローカルネットワークを作成可能 10.20.0.0/16みたいな サブネットを作って、異なるAvailability Zoneを割り当てることが出来る
◦ 外部からの接続方法 Elastic IPを割り振る 同一ネットワーク内にある他のホストから入る VPNで接続する
注意点 ◦ 既存のVPC外にあるインスタンスをVPCの内部に移動することは出来ない AMI化して新しくインスタンスを作ろう
特定の通信の許可/不許可の設定 ◦ インスタンスをSecurity Groupに所属させる 特定のIP/ネットワーク 他のSecurity Group
マシンイメージ ◦ EC2の管理画面から1クリックで作成可能
ロードバランサ ◦ ELBにSSL証明書が設定可能 ELB配下のEC2インスタンスにSSL証明書をいちいち設定する必要がない
◦ ELB配下のインスタンスの生存監視 死んでたらELB配下から外す
リレーショナルデータベース ◦ MySQL, Oracle, SQL Server ◦ Multi-AZ 異なるAvailability Zoneにホットスタンバイ 異常があると勝手に切り替わる ◦ Read-Replica 読み込み専用のスレーブサーバ
クリック一回で作成できる マスターサーバへの昇格もクリック一回
◦ バックアップ 時間・期間を指定したら勝手にやってくれる
細かいMySQLのサーバー設定 ◦ DB Parameter Groupで設定 ◦ 今回はunique indexのサイズ上限を上げるのに使った utf8mb4でvarchar(255)のuniqueインデックスが作成できない 以下を設定する innodb_large_prefix: 1 innodb_file_format: Barracuda
ファイル用ストレージ ◦ 早い ◦ 落ちない ◦ 安い
bucket名は公開したいドメイン名で作成すること ◦ Image.example.comでS3を参照したい場合 bucket名にimage.example.comを指定
DNSサービス ◦ 使いやすいインターフェイス ◦ AレコードにAlias拡張(後述)
前提 ◦ EC2から送られるメールは一部の宛先からSPAM扱いされることがある SpamhausがEC2のIP域をごっそりブラックリストに入れている
やるべきこと ◦ Spamhausのホワイトリストに申請する ◦ メールサーバの逆引きが出来るようにする ◦ SPFの設定をする
やったこと ◦ AWSに申し込めば大丈夫 https://aws-portal.amazon.com/gp/aws/html-forms-controller/contactus/ec2-email-limit-rdns-request
上記フォームで申し込むと、逆引き設定とspamhausなどへのホワイトリスト申請まで全部やってくれる
◦ SPF設定は自分で書こう
hogehoge.comといったドメイン名をELBに割り当てたい場合 ◦ ELBのグローバルIPは分からない ◦ FQDNが割り当てられる ◦ このFQDNをCNAMEで設定するととりあえず出来る CNAMEで設定した名前は、他のType(AとかMXとか)で使えない
簡単に言うと、MXでドメインが指定できなくなる
A Aliasという拡張を利用する ◦ ELBのFQDNがAレコードに適用可能
メンテナンスモード ◦ アプリケーションからリクエストを送ると、常にメンテナンス中を表すJSONファイルを返す ◦ ブラウザからリクエストを送ると、常にメンテナンス中を表すHTMLファイルを返す
静的ファイルを返すEC2インスタンスを作成 ◦ 常にメンテナンス用JSON, HTMLを返す ◦ メンテナンス時はそのインスタンスを起動し、ELBでアプリケーションサーバと差し替えることで実現 ◦ このイメージをAMI化することで、メンテナンス時に常にインスタンスを作成する運用を行う
AWSは昔ほど取っつきにくくない ◦ ほとんどの作業はwebで可能 Webで初期設定を全部済ませて、スクリプトで自動化するという運用がいいと思う
◦ 専用サービスはいろいろ便利 EC2使ったら負け EC2以外の専用サービスで実現できる省力化にこそお金を払う価値があるのでは