Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHPなプロダクトをAmazon ECSで開発運用してる話
Search
taiko19xx
November 25, 2017
Technology
0
1.3k
PHPなプロダクトをAmazon ECSで開発運用してる話
PHPカンファレンス北海道出張版(仮)で発表した内容です
taiko19xx
November 25, 2017
Tweet
Share
More Decks by taiko19xx
See All by taiko19xx
Bedrockで遊ぼう! 短期間で色々開発してみた
taiko19xx
1
150
Incident Managerでインシデント発生時のエスカレーションを自動化する
taiko19xx
0
270
LambdaカスタムランタイムでPHPでもサーバーレス!
taiko19xx
0
83
IoTっぽいアプリをk3s+Raspberry Piで実行する
taiko19xx
0
360
ハニーポットから見たWebサーバへの攻撃
taiko19xx
0
3k
RaspberryPi+AWSでIoT(っぽ い)GPSロガーを作ってみた
taiko19xx
0
1.7k
PHPからWin32APIをいじってみた
taiko19xx
0
1.8k
Other Decks in Technology
See All in Technology
2026-03-11 JAWS-UG 茨城 #12 改めてALBを便利に使う
masasuzu
2
370
楽しく学ぼう!コミュニティ入門 AWSと人が つむいできたストーリー
hiroramos4
PRO
1
190
オレ達はAWS管理をやりたいんじゃない!開発の生産性を爆アゲしたいんだ!!
wkm2
4
510
The_Evolution_of_Bits_AI_SRE.pdf
nulabinc
PRO
0
190
マルチアカウント環境でSecurity Hubの運用!導入の苦労とポイント / JAWS DAYS 2026
genda
0
600
Oracle Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
5
1.2k
親子 or ペアで Mashup for the Future! しゃべって楽しむ 初手AI駆動でものづくり体験
hiroramos4
PRO
0
110
楽しく学ぼう!ネットワーク入門
shotashiratori
4
3.2k
決済サービスを支えるElastic Cloud - Elastic Cloudの導入と推進、決済サービスのObservability
suzukij
2
630
JAWS Days 2026 楽しく学ぼう! 認証認可 入門/20260307-jaws-days-novice-lane-auth
opelab
11
2k
PMとしての意思決定とAI活用状況について
lycorptech_jp
PRO
0
120
OCHaCafe S11 #2 コンテナ時代の次の一手:Wasm 最前線
oracle4engineer
PRO
2
120
Featured
See All Featured
Amusing Abliteration
ianozsvald
0
130
The Limits of Empathy - UXLibs8
cassininazir
1
260
Embracing the Ebb and Flow
colly
88
5k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
860
The Pragmatic Product Professional
lauravandoore
37
7.2k
Raft: Consensus for Rubyists
vanstee
141
7.4k
Music & Morning Musume
bryan
47
7.1k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.7k
Writing Fast Ruby
sferik
630
63k
Google's AI Overviews - The New Search
badams
0
930
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
100
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.1k
Transcript
PHPなプロダクトをAmazon ECS で開発運用してる話 PHPカンファレンス北海道出張版(仮) PHPオフ会@2017/11/25 @taiko19xx / 木村 俊彦
Amazon ECS使ってみた PHPカンファレンス北海道出張版(仮) PHPオフ会@2017/11/25 @taiko19xx / 木村 俊彦
こんにちは • PHPを使ったプロダクトをDockerとAmazon ECSで開発運用して いますので得られた知見を共有します • DockerとECSの話がメインです • PHPカンファレンスとは?
もくじ • ECS(EC2 Container Service)とは • 構成図 • 何故ECSか •
Docker/ECSで… • 良かった所 • 苦労した所 • 全体のまとめ
ECS(EC2 Container Service)とは • EC2上のDockerコンテナを管理できる • いわゆるコンテナオーケストレーションのサービス • 無料 •
コンソール/AWS CLI/ECS CLI/AWS SDKから操作可能 • マネージドなコンテナレジストリも利用可能 • ECR(EC2 Container Registry) • ログインがめんどくさい • $0.1/GB/月 + 転送料
構成図
何故ECSか • AWS上に構築するという方針は決まっていた • Dockerで構築するのはどうかという話が出た • 管理をどうするか考えていた所、ECS/ECRを見つけた • 確認や検証の結果、採用する事に
Docker/ECSで良かった所
ローカルとリモートで”ほぼ”同様の環境が使える • ローカルはdocker-composeで • リモートもそれに近いように • イメージはCodeBuildでdocker-composeを使ってビルド • 環境はCloudFormationで同等の環境を構築
ローカルとリモートで”ほぼ”同様の環境が使える • 100% docker-composeを使い回す事はできなかった • ECS CLIを利用すれば可能 • CloudFormationにおけるECSのServiceの記述はdocker- composeに比較的近い
• 0から書き直しにはならない • 両方ともYAML
展開しやすい • Dockerベースなので、誰でも環境を起動できるように • リポジトリをcloneしたら環境構築して起動するだけ • コンテナ起動時にcomposer installするように仕込んでいた • VMやVagrantと違い、重いイメージファイルを配布せずに済む
• ただし、以下の面で幸運だったという可能性も • 利用者が全員mac • フロント側も含めて全員コマンドの操作に慣れていた
開発環境構築にかかる時間が少ない • 基本的にはdocker-compose.ymlと必要なDockerfile書いて終わり • ただし… • 記述に慣れていれば、最低限の立ち上げは早そう • あくまで”開発環境” •
AWS側はCloudFormationの記述やら各種設定が大変だった
Docker/ECSで苦労した所
結局Dockerfileを追加変更する事になる • PHPのコンテナ(php:7-fpm-alpine)はそのまま使う予定だったが Dockerfileでカスタムした • タイムゾーンの変更 • メモリやファイルアップロード周りの設定変更 • Composerの追加
• 拡張の追加 • docker-php-ext-installをRUNする • nginxは最初に1度調整したのみ
変わった事をしようとすると一工夫がいる • cron • 各コンテナにはcrondが入ってるが、デフォルトで起動しない • 各サービスやデーモンと同時に起動する必要がある • コンテナ起動時に実行するスクリプトを用意し、その中に記 述
• cron専用コンテナを使わずにPHPコンテナ内でスクリプトを起 動している
変わった事をしようとすると一工夫がいる • 一時的にコンテナを止める必要がある時 • 今回はDBのバックアップ時に一時停止 • コールドバックアップ • SDK経由でECSを操作 •
手動で停止すると自動で復活するので、回避する設定変更も 必要 • 上記設定を戻せば元のコンテナが立ち上がるので、リカバ リー処理は楽
デプロイフローが複雑になった:開始前の想定
設計完了!
デプロイフローが複雑になった:設計時点
Twitter [CC BY 4.0 (http://creativecommons.org/licenses/by/4.0)], via Wikimedia Commons
デプロイフローが複雑になった:設計時点 • リポジトリがGitLabになった • GitLabからCode(Pipeline|Build|Deploy)の直接連携は不可
(CodePipeLineの場合:2017年11月現在)
デプロイフローが複雑になった:設計時点 • リポジトリがGitLabになった • GitLab→Code(Pipeline|Build|Deploy)の直接連携は不可 • API GatewayとLambdaを追加構築 • GitLabのwebhookで起動
• S3に配置 • CodePipelineはS3をチェック
デプロイフローが複雑になった:設計時点 • アプリのビルドとデプロイを別途設定する必要があった • CodeBuildの追加 • CodeDeployの設定
リリース!
デプロイフローが複雑になった:リリース時点
Twitter [CC BY 4.0 (http://creativecommons.org/licenses/by/4.0)], via Wikimedia Commons
デプロイフローが複雑になった:リリース時点 • デプロイ処理に時間がかかっていた • 特にDockerのビルドとCloudFormationの適用に時間がかかる • アプリケーションのデプロイのみを行うCodePipelineを別途作成 • 大体15~20分ほどかかっていたデプロイが3分ほどに短縮 •
Composerやnpmによるライブラリ取得が短縮できれば更に…?
全体のまとめ • 思っていたより難易度が高かった • いい勉強になりました • 学習コストも高い • また使うかと言われると正直… •
使ってみないと分からない部分もあったので、使わなければよ かったという訳ではない • フローの部分はもう少しすっきり出来たはずというのが反省点
自己紹介 • 木村俊彦 @taiko19xx • 株式会社SRIA
株式会社SRIA • Web開発 • フロントエンド制作 • バックエンド構築 • アプリ開発 •
iOS/Android/UWP • その他、デザインやクラウド(Azure/AWS)構築など… • お仕事&お仲間募集中
自己紹介 • 木村俊彦 @taiko19xx • 株式会社SRIA • Web(フロント・バックエンド)もアプリもクラウドもやってま す •
仕事は開発したり打ち合わせに行ったり • 最近はAzureとかAWSをいじっています • 今日は仙台からおいしいものを食べに来ました
ありがとうございました