SlideShare a Scribd company logo
1 of 32
Download to read offline
ゲームのインフラをAWSで!
実戦Tips全て見せます!
株式会社インフィニットループ 
技術研究グループ テクニカルディレクター
波多野信広 (twitter:@nobuhatano)
自己紹介
● 商用DBサーバーのサポートエンジニア
● 2012年~ Uターンで(株)インフィニットループ 
○ インフラ (MySQL) 担当
○ AWS はじめて使う
● 2016年~ 技術研究グループ
● 2018年~ (株)バーチャルキャスト インフラ兼務
● 趣味:SciFi、ゲーム、数理科学、犬の散歩
● 数学勉強会@札幌
HTTPなAPIのためのLAMPスタック編
よく使うアーキテクチャと設計
RDS ElastiCache EFS
Auto Scaling group
EC2
Application Load Balancer
s3
Apache
PHP
CloudWatch
Lambda
運用系
CloudFront
インフラ
運用系ツール
● bash
● awscli
● jq
● ansible
● rsync
● python
● Node-RED
● …
● Slack
● GitHub
● New Relic
Apache
PHP
ローカルファイル問題
単体サーバー由来のアプリ (例:WordPress)
をクラウド化したい
アプリケーション・コード サーバー群へデプロイ
セッション ElastiCache (Redis)
MySQL RDS
状態持つローカルファイル どうする?
解① s3 を使うよう改修する
🌞 アクセス情報入手後、クラ
イアントが s3 と直接通信
☔ クライアントとサーバーア
プリ双方の改修必要
クライアント
サーバー
アプリ
S3
データ
アクセス情報
クライアント
データ
🌞 アプリが s3 と通信する
☔ ファイルアクセスをs3に改修
する小コスト
サーバー
アプリ
S3
解② s3ファイルシステム
🌞 s3 を直接マウントし無改修
☔ 共有している容量が大きい、ファイル数が多い、更新が多い、接続
サーバーが多い、などの場合に大きく遅延する
クライアント
サーバー
アプリ
S3
データ マウント
s3fs
minfs
goofys
...いいのあれば是非教えてください!
解③ NFS
🌞 中央のサーバーを複数サーバーでマウントして利用する王道
🌞 2010年代前半まで Kernel のメモリがリークして定期的な再起動が必
要だったが近年は安定
☔ 冗長化や復旧用にバックアップの自営必要
クライアント
アプリ
データ NFSマウント
自営NFS
EFSのバックアップ
🌞 EFSにバックアップ機能が無い (7/8訂正:6/27に AWS Backup がリリースされてましたw)
🌞 バージョニング的に差分を記録したかったのでローテクに自作
EBS
1TB
日次
rsync
日次差分tar
find /mnt/backupdisc -type f -mtime -${before}
-print0 | tar -czf ${tarfile} -T - --null
S3
EFS
定期
snapshot
スキャン可能
PHP
テスト環境
流し込みな
ど活用
EC2/オートスケール/ロードバランサー
● 1個のタグでグループや日時バージョンなど属性を入手したい
● AWS 外のリソースで、タグが使えないものにも属性システムを
● ネーミングルールによる自前の属性システム
app-group-YYYYMMDD-hhmm
アプリ種別
api, web
グループ
production, staging
年月日 時分
EC2 インスタンス名
オートスケーリング グループ名
ロードバランサー ターゲットグループ名
Ansible のターゲット名
アプリのコンフィグ名/デプロイ単位
AMI イメージ名
オートスケーリンググループ 起動コンフィグ名
アプリのデプロイした識別名
EC2/オートスケール/ロードバランサー
🌞 自分作成の全ての AMI 名と ID を作成時刻の降順で取得する例
aws ec2 describe-images --owner self | jq -r '.[][] | .Name,
.ImageId' |awk -F '-' '{print $1, $2, $3, $4, $5}' | awk
'{if(NR%2){ORS=" "}else{ORS="n"};print;}' | sort -n -k 3r,4
api production 20190411 1459 ami 048c37dc4axxxxxx
api staging 20190403 1602 ami 088d809ef52xxxxxx
web staging 20190228 1149 ami 0483b6860xxxxxx
api production 20190226 1350 ami 0b7058826e8xxxxxx
api staging 20190226 1246 ami 0dadb7d8674xxxxxx
:
:
grep と head で
あるグループの
最新イメージを簡
単に特定可能
EC2/オートスケール/ロードバランサー
🌞 EC2インスタンスとオートスケールグループ、IP を1回でリストする
echo "NAME AUTOSCALE PUBLIC PRIVATE"
echo "-----------------------------------------------------------------"
aws ec2 describe-instances | jq -r '.Reservations[].Instances[] | .Tags[0].Value,
.Tags[1].Value, .PublicIpAddress, .PrivateIpAddress ' | awk '{if (NR % 4) ORS ="
"; else ORS="n"; print}' | sort -k 1 | awk '{printf "%-16s %-16s %-16s %-16sn",
$1, $2, $3, $4}'
NAME AUTOSCALE PUBLIC PRIVATE
-----------------------------------------------------------------
app-dev null 18.182.xxx.xxx 172.31.xx.xxx
app-production app-production 13.112.xxx.xxx 172.31.xx.xxx
app-production app-production 13.231.xxx.xxx 172.31.xx.xxx
:
:
:
EC2/オートスケール/ロードバランサー
ec2.py を使った ansible の /etc/ansible/hosts/hosts 設定例
[tag_Name_api_production]
[tag_Name_api_staging]
[api-production:children]
tag_Name_api_production
[api-staging:children]
tag_Name_api_staging
[api:children]
api-production
api-staging
ec2 で Name タグが “api-production”になっているもの
( - が _ になるところに注意)
ansible 上でもホスト “api-production” で↑のインスタ
ンス群にアクセス出来るようになる
ansible のホスト “api” で production と staging 両方
アクセス可能に
🌞 ansible でネーミングルールに沿った運用が可能に
EC2/オートスケール/ロードバランサー
🌞 全ての EC2 インスタンスをどこかのオートスケー
リングループに所属させる
1台だけの単目的のサーバーも 1台だけのオートスケーリンググループを
作成し、その中に入れて、監視や再起動、自動再追加の保護下に入れます
Auto Scaling group
Apache
PHP
Classic Load
Balancer
プロセス監視のみ目的
通信は LB 通らなくても
Classic LB で1台だけ持つ最小数=1
希望数=1
最大数=1
EC2/オートスケール/ロードバランサー
🌞 Application Load Balancer で複数のオートスケーリンググループ
や異なるサービスを一つに束ねる
Application
Load Balancer
Apache
PHP
WordPress/
wiki/
Amazon
CloudFront
Apache
PHP
http → https
リダイレクト
api.example.com
の API の主力サーバー群
example.com のトップも
example.com/blog/
example.com/wiki/ など 静的 CMS の単体サーバー
example.com/download/ を
dl.example.com の CDN にリダイレクト
EC2/オートスケール/ロードバランサー
Application Load Balancer でリダイレクトのルールを作成する際
301 リダイレクトか 302 リダイレクト にするか選択できます
ブラウザの 301 リダイレクトキャッシュはデベロッパーツールなど
を使わないと消せないのもあります
🌞 リダイレクトは全て 302 で!
NAT Gateway
Out: NAT Gateway を経由してのアクセ
スになり IP が固定出来る
In: サーバー直接不可、LB 経由のみ
☔ 時間課金。セキュリティ理由だけで
使う場合は本当に Security Group で性
能が足りてないか確認しましょう
🌞 他サービス API の仕様で動的な app
サーバー群も IP アドレス固定化が必要
なとき NAT Gateway 有用
Application
Load Balancer
VPC NAT
gateway
✖
RDS / RDS Aurora
🌞 DB 性能・運用に優れた AWS の看板サービス
☔ Aurora は max connections が 16000 という制約
があり、軽量なクエリを多数の APP(PHP) サーバーか
ら受ける構成で1万コネクションを超えるケースは普通
にあるので注意
RDS / RDS Aurora
🌞 query_cache_size
MySQL 8.0 からはクエリキャッシュは無効
高速 OLTP を支えるゲーム API には
query_cache_type =0, query_cache_size =0 にして完全に停止 or
query_cache_size 10MB など極小の構成
🌞 innodb_flush_log_at_trx_commit = 2
=1 がコミット毎にログとバッファの両方をフラッシュ
=2 のコミット毎ログのフラッシュ & 毎秒バッファフラッシュ
高速 OLTP のゲーム API には =2 で
その他ベストプラクティスは AWS Database Blog の 2019/01/23 の記事参照
https://aws.amazon.com/jp/blogs/database/best-practices-for-configuring-parameters-for-amazon-rds-for-mysql-part-1-par
ameters-related-to-performance/
ElastiCache (Redis)
● コマンドとデータ型が豊富な揮発性キャッシュとして使います
● 更新がなくて永続性が必要な場合はクエリキャッシュを効かせた単独
MySQL(RDS) が適している
● Redis を使いたいケースはレイテンシが命なので、Web/APPサーバー
と Redis の Availability Zone は揃えて使います
● ネットワーク性能やCPU能力を求めてメモリは余っていてもスケール
アップを選択することもある
● シャーディングの Redis クラスタはオーバーヘッドで性能が低下す
る場合もあるので使う場合は慎重に(例:単純にクラスタで pubsub
を使うと1台より性能が低下します)
https://redislabs.com/wp-content/uploads/2018/04/Redis-Day-TLV-2018-Scaling-Redis-PubSub.pdf
ElastiCache (Redis)
● 「クラスタ」 = シャーディングのクラスタ
● 「MultiAZ」= フェールオーバーを可能にするマスタースレーブ
● 「クラスタのみ」「MultiAZのみ」「クラスタかつ MultiAZ 」3通り
● ☔ 開発で使うT2ノードタイプは、MultiAZ のみの構成は取れない
● ☔ 本番の m や r タイプも MultiAZ のみ不可と勘違い
● 実は MultiAZ のみ可能!
● 🌞 非クラスタの ElastiCache で MultiAZ にしてプライマリエンド
ポイントだけをシンプルに使う
PHP (Apache) / nscd
● 🌞 apache は prefork で良い
● 特定 API だけメモリを喰う処理がある
○ 暗号化等で大きなデータでたまに数百MB使うが、他は数MB
○ 1 httpd 数百MBの見積りだとプロセス数少なすぎ
○ 🌞 MaxRequestPerChild 1000 あえてリスタート頻度を上げる
● PHPサーバーの TCP TIME_WAIT でソケット枯渇
○ さくらのナレッジ「高負荷環境でDBが直面する問題とは?PHPとMySQLの TCP
TIME-WAIT チューニング(前編) / (後編)」
https://knowledge.sakura.ad.jp/author/nobuhiro_hatano/
○ tcp_fin_timeout は FIN-WAIT-2 用 TIME-WAIT は変わらない
○ TIME-WAIT を再利用する tcp_tw_reuse はあくまで LB 配下 LAMP 前提、万能ではない
nscd
● EC2 上で DNS ルックアップするレートリミットがある
● ルックアップ多すぎ良くないので、自分側でキャッシュする
● DNSの変化に鈍くなるので設定は慎重に
restart-interval 60
enable-cache passwd no
persistent passwd no
enable-cache group no
persistent group no
enable-cache hosts yes
positive-time-to-live hosts 15
negative-time-to-live hosts 5
enable-cache services no
persistent services no
enable-cache netgroup no
persistent netgroup no
nscd.conf 内の変更箇所例
rsync デプロイ
🌞 PHPのrsyncの差分同期は稼働中可能で高速
☔ PHP opcacheがrealpathでの変化を検知出来ないため、symlink を使
うツール類を使わず自作
対象 デプロイ方法 デプロイタイミング
アプリのソース ビルド済みディレクトリを
rsync で対象サーバーへ同期
コマンド
管理画面からの実行時
アプリのソース 管理サーバー上でビルド
tar で固めて s3 に格納
サーバー起動時に必ず s3
から取得して展開する
OS, Apache, PHP 設定 デタッチした稼働サーバーを元
にイメージ生成
オートスケールによる自動
追加時
レイヤー
● デプロイ毎:管理サーバーでビルド→ s3 にアップ → rsync 同期
● サーバー起動毎:s3 から DL & 展開 → NG なら httpd 停止
CloudFront
🌞 CloudFront で実際に配信しているロケーションを調べる方法
● dig などで今使われている IP アドレスを得る(例 13.33.0.250)
● dig -x 13.33.0.250 などで DNS 逆引きする
250.0.33.13.in-addr.arpa. 21112 IN PTR
server-13-33-0-250.nrt12.r.cloudfront.net.
今配信に使われているリージョンに近い空港の3文字コード
(例 NRT 成田)
TCP/UDPソケット通信なリアルタイムのインフラ編
https://www.vpnmentor.com/blog/tcp-vs-udp/ より
アーキテクチャ
リアルタイムなサーバーは直接クライアントと1対1で通信する
Auto Scaling group
Apache
PHP
TCP
リアルタイム
どのサーバーのどの
ルームにアクセスす
べきか指示
サービス・ディスカバリ
マッチングサーバー
API 的に接続割り振り
ルックアサイド・ロードバ
ランサー
ラウンドロビンやハッシュ
など機械的な割り振り
Amazon Linux 以外の OS
LAMP では Amazon Linux が最適ですが、リアルタイムでは C/C++ で作成
されたミドルウェアの要件で Amazon Linux では導入が難しいケースもあ
ります。そんなときおススメするのが
CentOS 7 (x86_64) - with Updates HVM
https://aws.amazon.com/marketplace/pp/Centosorg-CentOS-7-x8664-with-Updates-HVM/B00O7WM7QW
拡張ネットワークを使うためのカーネルモジュールも準備されています。
cloud-init も使えるので使用感は Amazon Linux と似ています。
Amazon Linux と CentOS 7 with update HVM と両方揃えて
おくと盤石です
EC2 拡張ネットワーク
パケットのレイテンシも問われるリアルタイムの通信では EC2 の仮想イ
ンターフェース (vif) ではなく拡張ネットワークを必ず使いましょう
Intel 82599 VF
C3,C4,D4,I2,M4(16xlarge以外),R3 インスタンス
Elastic Network Adapter
C5,M5,R4 以降のインスタンスタイプ
ixdbevf または ena カーネルモジュールを使い、ec2 でも設定
(ena例)
aws ec2 modify-instance-attribute --instance-id $id --ena-support
LB とオートスケールを可用性で使う
ユーザーとの通信は LB を通りませんが、リッスンしているプロセスの
ポートを Classic LB で監視させることで障害サーバーの自動削除と再追
加を行います
Auto Scaling group
TCP
リアルタイム
TCP ポートの
リッスンを監視
Classic Load
Balancer
周期的に自己検
査して合格しない
場合はプロセス停
止
LB と AS によって
サーバー自動削
除と再追加
デッドマンスイッチによるスケーリング
自己検査して正常なら
key: 自分の IP
val: 1秒間測定した負荷情報
を TTL つけて SETEX
軽微な異常なら自分でプロセス再起動
それでも駄目ならプロセス停止
AS グループ内の EC2 インスタンス
Amazon
ElastiCache
SETEX
(DB番号は
専用で)
Apache
PHP
KEYS *
サーバー
IP と負荷
のリスト
アクセスすべきサーバーを
問い合わせ
負荷情報を利用し割り当て
マッチング
サーバー
まとめ
● AWS は豊富なサービスやツールがありますが好きなサービスやツール
を好きな方法で使っています、そうした特徴的なところを今回紹介し
ました
● CodeDeploy, CloudFormation, CloudWatch, ElasticSearch 等々幅広
く利用していますがマニュアルどおりの正しい使い方で今回割愛
● サーバーやインフラのチューニングなどお困りでしたら、お気兼ねな
く弊社サイトのお問い合わせページ https://www.infiniteloop.co.jp/mail/ でご連絡
ください _(._.)_

More Related Content

What's hot

Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テストTakahiro Moteki
 
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –虎の穴 開発室
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
RLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for DjangoRLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for DjangoTakayuki Shimizukawa
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Akihiro Suda
 
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割Recruit Lifestyle Co., Ltd.
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門Kohei Tokunaga
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについてmoai kids
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツpospome
 
3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal3分でわかるAzureでのService Principal
3分でわかるAzureでのService PrincipalToru Makabe
 
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いマイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いota42y
 
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイントPostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイントNTT DATA OSS Professional Services
 
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることGraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることShingo Fukui
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやyoku0825
 
こわくない Git
こわくない Gitこわくない Git
こわくない GitKota Saito
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 

What's hot (20)

Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト
 
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
RLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for DjangoRLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for Django
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについて
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツ
 
3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal
 
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いマイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
 
KeycloakでAPI認可に入門する
KeycloakでAPI認可に入門するKeycloakでAPI認可に入門する
KeycloakでAPI認可に入門する
 
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイントPostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
 
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることGraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれや
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 

Similar to ゲームのインフラをAwsで実戦tips全て見せます

Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osakaNaotaka Jay HOTTA
 
Reco choku tech night #09 -reinvent2018報告会-
Reco choku tech night #09 -reinvent2018報告会-Reco choku tech night #09 -reinvent2018報告会-
Reco choku tech night #09 -reinvent2018報告会-recotech
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Taro Hirose
 
20161027 hadoop summit Generating Recommendations at Amazon Scale with Apach...
20161027 hadoop summit  Generating Recommendations at Amazon Scale with Apach...20161027 hadoop summit  Generating Recommendations at Amazon Scale with Apach...
20161027 hadoop summit Generating Recommendations at Amazon Scale with Apach...Amazon Web Services Japan
 
AWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターンAWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターンseiichi arai
 
20130714 July Tech Festa 日本CloudStackユーザー会
20130714 July Tech Festa 日本CloudStackユーザー会20130714 July Tech Festa 日本CloudStackユーザー会
20130714 July Tech Festa 日本CloudStackユーザー会samemoon
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-靖 小田島
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略Hiroshi SHIBATA
 
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)Daisuke Ikeda
 
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC EnterpriseYusukeKuramata
 
LINEのMySQL運用について
LINEのMySQL運用についてLINEのMySQL運用について
LINEのMySQL運用についてLINE Corporation
 
2010 04クラウド技術講座
2010 04クラウド技術講座2010 04クラウド技術講座
2010 04クラウド技術講座sisawa
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力ThinReports
 

Similar to ゲームのインフラをAwsで実戦tips全て見せます (20)

Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osaka
 
Reco choku tech night #09 -reinvent2018報告会-
Reco choku tech night #09 -reinvent2018報告会-Reco choku tech night #09 -reinvent2018報告会-
Reco choku tech night #09 -reinvent2018報告会-
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
PHP on Cloud
PHP on CloudPHP on Cloud
PHP on Cloud
 
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)
 
20161027 hadoop summit Generating Recommendations at Amazon Scale with Apach...
20161027 hadoop summit  Generating Recommendations at Amazon Scale with Apach...20161027 hadoop summit  Generating Recommendations at Amazon Scale with Apach...
20161027 hadoop summit Generating Recommendations at Amazon Scale with Apach...
 
Zynga
ZyngaZynga
Zynga
 
Aws privte20110406 arai
Aws privte20110406 araiAws privte20110406 arai
Aws privte20110406 arai
 
AWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターンAWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターン
 
[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005
 
AWS re:Invent2017で見た AWSの強さとは
AWS re:Invent2017で見た AWSの強さとは AWS re:Invent2017で見た AWSの強さとは
AWS re:Invent2017で見た AWSの強さとは
 
20130714 July Tech Festa 日本CloudStackユーザー会
20130714 July Tech Festa 日本CloudStackユーザー会20130714 July Tech Festa 日本CloudStackユーザー会
20130714 July Tech Festa 日本CloudStackユーザー会
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
 
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
 
LINEのMySQL運用について
LINEのMySQL運用についてLINEのMySQL運用について
LINEのMySQL運用について
 
2010 04クラウド技術講座
2010 04クラウド技術講座2010 04クラウド技術講座
2010 04クラウド技術講座
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 

More from infinite_loop

ChatGPT触ってみた
ChatGPT触ってみたChatGPT触ってみた
ChatGPT触ってみたinfinite_loop
 
社内ソフトスキルを考える
社内ソフトスキルを考える社内ソフトスキルを考える
社内ソフトスキルを考えるinfinite_loop
 
3Dプリンタって いいね
3Dプリンタって いいね3Dプリンタって いいね
3Dプリンタって いいねinfinite_loop
 
VRChatでお酒が注げる飲み物アセットの紹介
VRChatでお酒が注げる飲み物アセットの紹介VRChatでお酒が注げる飲み物アセットの紹介
VRChatでお酒が注げる飲み物アセットの紹介infinite_loop
 
アニメーションとスキニングをBurstで独自実装する.pdf
アニメーションとスキニングをBurstで独自実装する.pdfアニメーションとスキニングをBurstで独自実装する.pdf
アニメーションとスキニングをBurstで独自実装する.pdfinfinite_loop
 
I ❤ Virtual Machines 仮想環境をより便利に使うツールたち
I ❤ Virtual Machines 仮想環境をより便利に使うツールたちI ❤ Virtual Machines 仮想環境をより便利に使うツールたち
I ❤ Virtual Machines 仮想環境をより便利に使うツールたちinfinite_loop
 
500万行のPHPプロジェクトにおけるログ出力の歩み
500万行のPHPプロジェクトにおけるログ出力の歩み500万行のPHPプロジェクトにおけるログ出力の歩み
500万行のPHPプロジェクトにおけるログ出力の歩みinfinite_loop
 
ADRという考えを取り入れてみて
ADRという考えを取り入れてみてADRという考えを取り入れてみて
ADRという考えを取り入れてみてinfinite_loop
 
リファクタリングで実装が○○分短縮した話
リファクタリングで実装が○○分短縮した話リファクタリングで実装が○○分短縮した話
リファクタリングで実装が○○分短縮した話infinite_loop
 
楽しいVR空間を作る技術と支える技術 #osc19do
楽しいVR空間を作る技術と支える技術 #osc19do楽しいVR空間を作る技術と支える技術 #osc19do
楽しいVR空間を作る技術と支える技術 #osc19doinfinite_loop
 
Start rl with_unity_machine_learning_agents
Start rl with_unity_machine_learning_agentsStart rl with_unity_machine_learning_agents
Start rl with_unity_machine_learning_agentsinfinite_loop
 
がんばれ PHP Fiber
がんばれ PHP Fiberがんばれ PHP Fiber
がんばれ PHP Fiberinfinite_loop
 
心に残った名前ランキング
心に残った名前ランキング心に残った名前ランキング
心に残った名前ランキングinfinite_loop
 
プログラムと名前にまつわる座談会
プログラムと名前にまつわる座談会プログラムと名前にまつわる座談会
プログラムと名前にまつわる座談会infinite_loop
 
名は体を表していますか
名は体を表していますか名は体を表していますか
名は体を表していますかinfinite_loop
 
大切な名前[Intro]公開版
大切な名前[Intro]公開版大切な名前[Intro]公開版
大切な名前[Intro]公開版infinite_loop
 
JupyterNotebookとMySQLでゼロからはじめるデータサイエンス
JupyterNotebookとMySQLでゼロからはじめるデータサイエンスJupyterNotebookとMySQLでゼロからはじめるデータサイエンス
JupyterNotebookとMySQLでゼロからはじめるデータサイエンスinfinite_loop
 
複数拠点における開発効率の維持・向上
複数拠点における開発効率の維持・向上複数拠点における開発効率の維持・向上
複数拠点における開発効率の維持・向上infinite_loop
 

More from infinite_loop (20)

ChatGPT触ってみた
ChatGPT触ってみたChatGPT触ってみた
ChatGPT触ってみた
 
社内ソフトスキルを考える
社内ソフトスキルを考える社内ソフトスキルを考える
社内ソフトスキルを考える
 
3Dプリンタって いいね
3Dプリンタって いいね3Dプリンタって いいね
3Dプリンタって いいね
 
VRChatでお酒が注げる飲み物アセットの紹介
VRChatでお酒が注げる飲み物アセットの紹介VRChatでお酒が注げる飲み物アセットの紹介
VRChatでお酒が注げる飲み物アセットの紹介
 
アニメーションとスキニングをBurstで独自実装する.pdf
アニメーションとスキニングをBurstで独自実装する.pdfアニメーションとスキニングをBurstで独自実装する.pdf
アニメーションとスキニングをBurstで独自実装する.pdf
 
I ❤ Virtual Machines 仮想環境をより便利に使うツールたち
I ❤ Virtual Machines 仮想環境をより便利に使うツールたちI ❤ Virtual Machines 仮想環境をより便利に使うツールたち
I ❤ Virtual Machines 仮想環境をより便利に使うツールたち
 
500万行のPHPプロジェクトにおけるログ出力の歩み
500万行のPHPプロジェクトにおけるログ出力の歩み500万行のPHPプロジェクトにおけるログ出力の歩み
500万行のPHPプロジェクトにおけるログ出力の歩み
 
ADRという考えを取り入れてみて
ADRという考えを取り入れてみてADRという考えを取り入れてみて
ADRという考えを取り入れてみて
 
リファクタリングで実装が○○分短縮した話
リファクタリングで実装が○○分短縮した話リファクタリングで実装が○○分短縮した話
リファクタリングで実装が○○分短縮した話
 
楽しいVR空間を作る技術と支える技術 #osc19do
楽しいVR空間を作る技術と支える技術 #osc19do楽しいVR空間を作る技術と支える技術 #osc19do
楽しいVR空間を作る技術と支える技術 #osc19do
 
Start rl with_unity_machine_learning_agents
Start rl with_unity_machine_learning_agentsStart rl with_unity_machine_learning_agents
Start rl with_unity_machine_learning_agents
 
UniRx の1歩目
UniRx の1歩目UniRx の1歩目
UniRx の1歩目
 
がんばれ PHP Fiber
がんばれ PHP Fiberがんばれ PHP Fiber
がんばれ PHP Fiber
 
心に残った名前ランキング
心に残った名前ランキング心に残った名前ランキング
心に残った名前ランキング
 
プログラムと名前にまつわる座談会
プログラムと名前にまつわる座談会プログラムと名前にまつわる座談会
プログラムと名前にまつわる座談会
 
名は体を表していますか
名は体を表していますか名は体を表していますか
名は体を表していますか
 
名前の力
名前の力名前の力
名前の力
 
大切な名前[Intro]公開版
大切な名前[Intro]公開版大切な名前[Intro]公開版
大切な名前[Intro]公開版
 
JupyterNotebookとMySQLでゼロからはじめるデータサイエンス
JupyterNotebookとMySQLでゼロからはじめるデータサイエンスJupyterNotebookとMySQLでゼロからはじめるデータサイエンス
JupyterNotebookとMySQLでゼロからはじめるデータサイエンス
 
複数拠点における開発効率の維持・向上
複数拠点における開発効率の維持・向上複数拠点における開発効率の維持・向上
複数拠点における開発効率の維持・向上
 

Recently uploaded

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 

Recently uploaded (8)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 

ゲームのインフラをAwsで実戦tips全て見せます

  • 2. 自己紹介 ● 商用DBサーバーのサポートエンジニア ● 2012年~ Uターンで(株)インフィニットループ  ○ インフラ (MySQL) 担当 ○ AWS はじめて使う ● 2016年~ 技術研究グループ ● 2018年~ (株)バーチャルキャスト インフラ兼務 ● 趣味:SciFi、ゲーム、数理科学、犬の散歩 ● 数学勉強会@札幌
  • 4. よく使うアーキテクチャと設計 RDS ElastiCache EFS Auto Scaling group EC2 Application Load Balancer s3 Apache PHP CloudWatch Lambda 運用系 CloudFront インフラ 運用系ツール ● bash ● awscli ● jq ● ansible ● rsync ● python ● Node-RED ● … ● Slack ● GitHub ● New Relic Apache PHP
  • 6. 解① s3 を使うよう改修する 🌞 アクセス情報入手後、クラ イアントが s3 と直接通信 ☔ クライアントとサーバーア プリ双方の改修必要 クライアント サーバー アプリ S3 データ アクセス情報 クライアント データ 🌞 アプリが s3 と通信する ☔ ファイルアクセスをs3に改修 する小コスト サーバー アプリ S3
  • 7. 解② s3ファイルシステム 🌞 s3 を直接マウントし無改修 ☔ 共有している容量が大きい、ファイル数が多い、更新が多い、接続 サーバーが多い、などの場合に大きく遅延する クライアント サーバー アプリ S3 データ マウント s3fs minfs goofys ...いいのあれば是非教えてください!
  • 8. 解③ NFS 🌞 中央のサーバーを複数サーバーでマウントして利用する王道 🌞 2010年代前半まで Kernel のメモリがリークして定期的な再起動が必 要だったが近年は安定 ☔ 冗長化や復旧用にバックアップの自営必要 クライアント アプリ データ NFSマウント 自営NFS
  • 9. EFSのバックアップ 🌞 EFSにバックアップ機能が無い (7/8訂正:6/27に AWS Backup がリリースされてましたw) 🌞 バージョニング的に差分を記録したかったのでローテクに自作 EBS 1TB 日次 rsync 日次差分tar find /mnt/backupdisc -type f -mtime -${before} -print0 | tar -czf ${tarfile} -T - --null S3 EFS 定期 snapshot スキャン可能 PHP テスト環境 流し込みな ど活用
  • 10. EC2/オートスケール/ロードバランサー ● 1個のタグでグループや日時バージョンなど属性を入手したい ● AWS 外のリソースで、タグが使えないものにも属性システムを ● ネーミングルールによる自前の属性システム app-group-YYYYMMDD-hhmm アプリ種別 api, web グループ production, staging 年月日 時分 EC2 インスタンス名 オートスケーリング グループ名 ロードバランサー ターゲットグループ名 Ansible のターゲット名 アプリのコンフィグ名/デプロイ単位 AMI イメージ名 オートスケーリンググループ 起動コンフィグ名 アプリのデプロイした識別名
  • 11. EC2/オートスケール/ロードバランサー 🌞 自分作成の全ての AMI 名と ID を作成時刻の降順で取得する例 aws ec2 describe-images --owner self | jq -r '.[][] | .Name, .ImageId' |awk -F '-' '{print $1, $2, $3, $4, $5}' | awk '{if(NR%2){ORS=" "}else{ORS="n"};print;}' | sort -n -k 3r,4 api production 20190411 1459 ami 048c37dc4axxxxxx api staging 20190403 1602 ami 088d809ef52xxxxxx web staging 20190228 1149 ami 0483b6860xxxxxx api production 20190226 1350 ami 0b7058826e8xxxxxx api staging 20190226 1246 ami 0dadb7d8674xxxxxx : : grep と head で あるグループの 最新イメージを簡 単に特定可能
  • 12. EC2/オートスケール/ロードバランサー 🌞 EC2インスタンスとオートスケールグループ、IP を1回でリストする echo "NAME AUTOSCALE PUBLIC PRIVATE" echo "-----------------------------------------------------------------" aws ec2 describe-instances | jq -r '.Reservations[].Instances[] | .Tags[0].Value, .Tags[1].Value, .PublicIpAddress, .PrivateIpAddress ' | awk '{if (NR % 4) ORS =" "; else ORS="n"; print}' | sort -k 1 | awk '{printf "%-16s %-16s %-16s %-16sn", $1, $2, $3, $4}' NAME AUTOSCALE PUBLIC PRIVATE ----------------------------------------------------------------- app-dev null 18.182.xxx.xxx 172.31.xx.xxx app-production app-production 13.112.xxx.xxx 172.31.xx.xxx app-production app-production 13.231.xxx.xxx 172.31.xx.xxx : : :
  • 13. EC2/オートスケール/ロードバランサー ec2.py を使った ansible の /etc/ansible/hosts/hosts 設定例 [tag_Name_api_production] [tag_Name_api_staging] [api-production:children] tag_Name_api_production [api-staging:children] tag_Name_api_staging [api:children] api-production api-staging ec2 で Name タグが “api-production”になっているもの ( - が _ になるところに注意) ansible 上でもホスト “api-production” で↑のインスタ ンス群にアクセス出来るようになる ansible のホスト “api” で production と staging 両方 アクセス可能に 🌞 ansible でネーミングルールに沿った運用が可能に
  • 14. EC2/オートスケール/ロードバランサー 🌞 全ての EC2 インスタンスをどこかのオートスケー リングループに所属させる 1台だけの単目的のサーバーも 1台だけのオートスケーリンググループを 作成し、その中に入れて、監視や再起動、自動再追加の保護下に入れます Auto Scaling group Apache PHP Classic Load Balancer プロセス監視のみ目的 通信は LB 通らなくても Classic LB で1台だけ持つ最小数=1 希望数=1 最大数=1
  • 15. EC2/オートスケール/ロードバランサー 🌞 Application Load Balancer で複数のオートスケーリンググループ や異なるサービスを一つに束ねる Application Load Balancer Apache PHP WordPress/ wiki/ Amazon CloudFront Apache PHP http → https リダイレクト api.example.com の API の主力サーバー群 example.com のトップも example.com/blog/ example.com/wiki/ など 静的 CMS の単体サーバー example.com/download/ を dl.example.com の CDN にリダイレクト
  • 16. EC2/オートスケール/ロードバランサー Application Load Balancer でリダイレクトのルールを作成する際 301 リダイレクトか 302 リダイレクト にするか選択できます ブラウザの 301 リダイレクトキャッシュはデベロッパーツールなど を使わないと消せないのもあります 🌞 リダイレクトは全て 302 で!
  • 17. NAT Gateway Out: NAT Gateway を経由してのアクセ スになり IP が固定出来る In: サーバー直接不可、LB 経由のみ ☔ 時間課金。セキュリティ理由だけで 使う場合は本当に Security Group で性 能が足りてないか確認しましょう 🌞 他サービス API の仕様で動的な app サーバー群も IP アドレス固定化が必要 なとき NAT Gateway 有用 Application Load Balancer VPC NAT gateway ✖
  • 18. RDS / RDS Aurora 🌞 DB 性能・運用に優れた AWS の看板サービス ☔ Aurora は max connections が 16000 という制約 があり、軽量なクエリを多数の APP(PHP) サーバーか ら受ける構成で1万コネクションを超えるケースは普通 にあるので注意
  • 19. RDS / RDS Aurora 🌞 query_cache_size MySQL 8.0 からはクエリキャッシュは無効 高速 OLTP を支えるゲーム API には query_cache_type =0, query_cache_size =0 にして完全に停止 or query_cache_size 10MB など極小の構成 🌞 innodb_flush_log_at_trx_commit = 2 =1 がコミット毎にログとバッファの両方をフラッシュ =2 のコミット毎ログのフラッシュ & 毎秒バッファフラッシュ 高速 OLTP のゲーム API には =2 で その他ベストプラクティスは AWS Database Blog の 2019/01/23 の記事参照 https://aws.amazon.com/jp/blogs/database/best-practices-for-configuring-parameters-for-amazon-rds-for-mysql-part-1-par ameters-related-to-performance/
  • 20. ElastiCache (Redis) ● コマンドとデータ型が豊富な揮発性キャッシュとして使います ● 更新がなくて永続性が必要な場合はクエリキャッシュを効かせた単独 MySQL(RDS) が適している ● Redis を使いたいケースはレイテンシが命なので、Web/APPサーバー と Redis の Availability Zone は揃えて使います ● ネットワーク性能やCPU能力を求めてメモリは余っていてもスケール アップを選択することもある ● シャーディングの Redis クラスタはオーバーヘッドで性能が低下す る場合もあるので使う場合は慎重に(例:単純にクラスタで pubsub を使うと1台より性能が低下します) https://redislabs.com/wp-content/uploads/2018/04/Redis-Day-TLV-2018-Scaling-Redis-PubSub.pdf
  • 21. ElastiCache (Redis) ● 「クラスタ」 = シャーディングのクラスタ ● 「MultiAZ」= フェールオーバーを可能にするマスタースレーブ ● 「クラスタのみ」「MultiAZのみ」「クラスタかつ MultiAZ 」3通り ● ☔ 開発で使うT2ノードタイプは、MultiAZ のみの構成は取れない ● ☔ 本番の m や r タイプも MultiAZ のみ不可と勘違い ● 実は MultiAZ のみ可能! ● 🌞 非クラスタの ElastiCache で MultiAZ にしてプライマリエンド ポイントだけをシンプルに使う
  • 22. PHP (Apache) / nscd ● 🌞 apache は prefork で良い ● 特定 API だけメモリを喰う処理がある ○ 暗号化等で大きなデータでたまに数百MB使うが、他は数MB ○ 1 httpd 数百MBの見積りだとプロセス数少なすぎ ○ 🌞 MaxRequestPerChild 1000 あえてリスタート頻度を上げる ● PHPサーバーの TCP TIME_WAIT でソケット枯渇 ○ さくらのナレッジ「高負荷環境でDBが直面する問題とは?PHPとMySQLの TCP TIME-WAIT チューニング(前編) / (後編)」 https://knowledge.sakura.ad.jp/author/nobuhiro_hatano/ ○ tcp_fin_timeout は FIN-WAIT-2 用 TIME-WAIT は変わらない ○ TIME-WAIT を再利用する tcp_tw_reuse はあくまで LB 配下 LAMP 前提、万能ではない
  • 23. nscd ● EC2 上で DNS ルックアップするレートリミットがある ● ルックアップ多すぎ良くないので、自分側でキャッシュする ● DNSの変化に鈍くなるので設定は慎重に restart-interval 60 enable-cache passwd no persistent passwd no enable-cache group no persistent group no enable-cache hosts yes positive-time-to-live hosts 15 negative-time-to-live hosts 5 enable-cache services no persistent services no enable-cache netgroup no persistent netgroup no nscd.conf 内の変更箇所例
  • 24. rsync デプロイ 🌞 PHPのrsyncの差分同期は稼働中可能で高速 ☔ PHP opcacheがrealpathでの変化を検知出来ないため、symlink を使 うツール類を使わず自作 対象 デプロイ方法 デプロイタイミング アプリのソース ビルド済みディレクトリを rsync で対象サーバーへ同期 コマンド 管理画面からの実行時 アプリのソース 管理サーバー上でビルド tar で固めて s3 に格納 サーバー起動時に必ず s3 から取得して展開する OS, Apache, PHP 設定 デタッチした稼働サーバーを元 にイメージ生成 オートスケールによる自動 追加時 レイヤー ● デプロイ毎:管理サーバーでビルド→ s3 にアップ → rsync 同期 ● サーバー起動毎:s3 から DL & 展開 → NG なら httpd 停止
  • 25. CloudFront 🌞 CloudFront で実際に配信しているロケーションを調べる方法 ● dig などで今使われている IP アドレスを得る(例 13.33.0.250) ● dig -x 13.33.0.250 などで DNS 逆引きする 250.0.33.13.in-addr.arpa. 21112 IN PTR server-13-33-0-250.nrt12.r.cloudfront.net. 今配信に使われているリージョンに近い空港の3文字コード (例 NRT 成田)
  • 28. Amazon Linux 以外の OS LAMP では Amazon Linux が最適ですが、リアルタイムでは C/C++ で作成 されたミドルウェアの要件で Amazon Linux では導入が難しいケースもあ ります。そんなときおススメするのが CentOS 7 (x86_64) - with Updates HVM https://aws.amazon.com/marketplace/pp/Centosorg-CentOS-7-x8664-with-Updates-HVM/B00O7WM7QW 拡張ネットワークを使うためのカーネルモジュールも準備されています。 cloud-init も使えるので使用感は Amazon Linux と似ています。 Amazon Linux と CentOS 7 with update HVM と両方揃えて おくと盤石です
  • 29. EC2 拡張ネットワーク パケットのレイテンシも問われるリアルタイムの通信では EC2 の仮想イ ンターフェース (vif) ではなく拡張ネットワークを必ず使いましょう Intel 82599 VF C3,C4,D4,I2,M4(16xlarge以外),R3 インスタンス Elastic Network Adapter C5,M5,R4 以降のインスタンスタイプ ixdbevf または ena カーネルモジュールを使い、ec2 でも設定 (ena例) aws ec2 modify-instance-attribute --instance-id $id --ena-support
  • 30. LB とオートスケールを可用性で使う ユーザーとの通信は LB を通りませんが、リッスンしているプロセスの ポートを Classic LB で監視させることで障害サーバーの自動削除と再追 加を行います Auto Scaling group TCP リアルタイム TCP ポートの リッスンを監視 Classic Load Balancer 周期的に自己検 査して合格しない 場合はプロセス停 止 LB と AS によって サーバー自動削 除と再追加
  • 31. デッドマンスイッチによるスケーリング 自己検査して正常なら key: 自分の IP val: 1秒間測定した負荷情報 を TTL つけて SETEX 軽微な異常なら自分でプロセス再起動 それでも駄目ならプロセス停止 AS グループ内の EC2 インスタンス Amazon ElastiCache SETEX (DB番号は 専用で) Apache PHP KEYS * サーバー IP と負荷 のリスト アクセスすべきサーバーを 問い合わせ 負荷情報を利用し割り当て マッチング サーバー
  • 32. まとめ ● AWS は豊富なサービスやツールがありますが好きなサービスやツール を好きな方法で使っています、そうした特徴的なところを今回紹介し ました ● CodeDeploy, CloudFormation, CloudWatch, ElasticSearch 等々幅広 く利用していますがマニュアルどおりの正しい使い方で今回割愛 ● サーバーやインフラのチューニングなどお困りでしたら、お気兼ねな く弊社サイトのお問い合わせページ https://www.infiniteloop.co.jp/mail/ でご連絡 ください _(._.)_