Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
EC-CUBEはサーバレスで動かせるのか?
Search
yshimada
March 13, 2025
Technology
280
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
EC-CUBEはサーバレスで動かせるのか?
yshimada
March 13, 2025
More Decks by yshimada
See All by yshimada
ECCUBEAWSの構築をChatGPTに相談してみました
yukishimada
0
830
Other Decks in Technology
See All in Technology
SREへの勘違いに気づいた後の話
tomodakengo
0
110
銀行勘定系システムにおける開発プロセス刷新×AIによる環境モダナイゼーション / Development Process Transformation and AI-Driven Environment Modernization
muit
1
2.3k
LLMに渡さなかった仕事
nanaism
0
850
CLIライブラリ開発を支える技術
htnabe
0
130
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
12k
人間はどの意思決定を手放せるのか
kawasima
15
7.3k
幾何アルゴリズムで なめらかなピン操作を / iOSDC Japan 2026 / smoothpin
kazumanagano
0
360
積み重なった技術負債への挑戦 〜初手としての全社ゴト化〜
techtekt
PRO
0
1.3k
10Xに技術的負債をもたらした「2つの境界の歪み」その構造と解消への営み
10xinc
0
2.1k
ソフトウェアDNAとクラウドエージェントのススメ
cloudace
0
110
データ界隈LT祭 第1回LT登壇
taromatsui_cccmkhd
2
1.4k
アプリをもっと"iOSアプリっぽく"する小さな工夫 / Small Touches That Make Your App Feel More Like an iOS App
matsuji
2
950
Featured
See All Featured
The Curse of the Amulet
leimatthew05
3
15k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
870
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
940
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
700
Abbi's Birthday
coloredviolet
4
10k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
550
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
240
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
610
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
510
Transcript
confidential EC-CUBEはサーバレスで動かせるのか 2025年3⽉13⽇ 株式会社テンダ 島⽥裕基
confidential TENDA CO., LTD. 1. スピーカー紹介 2. EC-CUBEとは 3. AWSとは
4. EC-CUBEってサーバレス化できるの︖ 5. やってみた 6. まとめ ⽬次
confidential TENDA CO., LTD. 島⽥裕基 • ⼤阪府で⽣まれ⻘春時代を宮城県で過ごす • 東北職業能⼒開発⼤学校 ⽣産電⼦システム技術科卒業
• 東京で就職 SI/EC/決済/MSP の⾃社サービスを持つ会社でECを中⼼に開発 • 2015年テンダに⼊社 (マニュアル⾃動作成Dojoを知っていたのがきっかけ) なんでもできる(する)テンダ︕ • 現在はPM業務を中⼼に稼働 • 最近Raspberry Pi Pico 2 W を衝動買いして何をしようか悩んでいる 電⼦ペーパーキット買って遊んでます→ 3 スピーカーについて
confidential TENDA CO., LTD. なんでもできる = なんにも⾊がない 4 スピーカーについて
confidential TENDA CO., LTD. …未だ、、ッッノーマルッ︕ 5 スピーカーについて
confidential TENDA CO., LTD. 株式会社イーシーキューブが提供するECサイト構築システム オープンソースと呼ばれるシステムで、ソースコードが無償で公開されている 以下システム要件(EC-CUBE 4.3より) 6 EC-CUBEとは
参考 : https://doc4.ec-cube.net/quickstart/requirement
confidential TENDA CO., LTD. Amazon Web Services(アマゾン ウェブ サービス、略称︓AWS)とは、 Amazon
Web Services, Inc. により提供されるクラウドコンピューティングサービスである。 2006年にサービス提供が開始され、IaaS における世界的シェアが39%で1位。 世界で数百万以上、⽇本国内においても数⼗万を超える顧客が AWS を利⽤している。 7 AWSとは 参考 : https://ja.wikipedia.org/wiki/Amazon_Web_Services
confidential TENDA CO., LTD. • EC-CUBEはPHPのオープンソースシステム • ステートフルでありセッションやファイル管理を⾏う必要がある ↓ 完全なステートレス(AWS
Lambda等での構成)は難しい ↓ コンテナのサーバレス化(Fargate/ECS) をしてみよう 8 EC-CUBEってサーバレス化できるの︖
confidential TENDA CO., LTD. ECSって︖ • Amazon Elastic Container Service
(Amazon ECS) は フルマネージドコンテナオーケストレーションサービス。 • コンテナ化されたアプリケーションを効率的に デプロイ/管理/スケールできる。 9 EC-CUBEってサーバレス化できるの︖ 参考 : https://aws.amazon.com/jp/ecs/
confidential TENDA CO., LTD. EC-CUBEはdockerで動作する仕組みが提供されている 10 EC-CUBEってサーバレス化できるの︖ 参考 : https://doc4.ec-cube.net/quickstart/docker_compose_install
開発ドキュメントにて以下記事が存在 Docker Composeを使⽤してインストールする https://doc4.ec-cube.net/quickstart/docker_compose_install gitでダウンロードしたリポジトリには左記のように docker利⽤のための資材あり。 dockerで動かせる ということは Fargate/ECSで動かせる、はず︕
confidential TENDA CO., LTD. いきなりFargate/ECSでサービス実⾏するとログ追跡が難しい ので EC2インスタンスを使って環境作成し、 その後Fargate/ECSでサービス起動する。 という流れで進める。 11
EC-CUBEってサーバレス化できるの︖
confidential TENDA CO., LTD. 12 やってみた 先程までの流れを踏まえ、以下の⼿順で構築。 • セキュリティ系の準備(セキュリティグループ/IAMロール) •
検証⽤EC2インスタンスの作成 • ECRにEC-CUBEイメージを設置 • RDSでデータベース作成 • EFSで共⽤ファイルストレージ作成 • EC2で環境作成 • ECSでタスク定義〜サービスの実⾏ • 起動後の微修正
confidential TENDA CO., LTD. 13 やってみた ゴールイメージはこんな感じ
confidential TENDA CO., LTD. セキュリティグループの作成 各サービス向けのセキュリティグループを作成する。 • for_ec2 : 検証⽤EC2⽤。WEBサーバポートを許可する。
• for_efs : 共有ファイルストレージ⽤。 • for_rds : RDS⽤。EC2やECSからのアクセスを許容する。 • for_ecs : ECS⽤。ALBからのアクセスを許可する。 • for_alb : ALB⽤。WEBサーバポートを許可する。 14 やってみた セキュリティ系の準備
confidential TENDA CO., LTD. IAMロールの作成 EC2とECSそれぞれに付与するロールを作成する。 • ttech2025UseECRRole : 検証⽤EC2⽤に付与。
許可ポリシー AmazonEC2ContainerRegistryFullAccess を設定 • ecsTaskExecutionRole : ECSに付与。 許可ポリシー AmazonECSTaskExecutionRolePolicy を設定 15 やってみた セキュリティ系の準備
confidential TENDA CO., LTD. 検証⽤EC2を作成する。 16 やってみた 検証⽤EC2インスタンスの作成 // EC2インスタンスを作成する
vpcは ttech2025-vpc にする ttech2025UseECRRoleロールを付与 // dockerのインストールとサービス起動 # dnf install -y docker # systemctl start docker // gitのインストール # dnf install -y git // EC-CUBEのダウンロード # cd /opt/ # git clone https://github.com/EC-CUBE/ec-cube.git # cd /opt/ec-cube/ # git branch * 4.3 // 2025-03 時点では4.3ブランチが最新 // とりあえずなにも変えずビルド # docker build -t ec-cube .
confidential TENDA CO., LTD. 17 やってみた ECRにEC-CUBEイメージを設置 ECRの作成 リポジトリを作成しておく。 検証⽤EC2から、作成したリポジトリに対してイメージのpushを⾏う。
// ECRログイン(ロール付与してれば成功する) # aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded // ECRへのpushとタグ付け docker tag ec-cube:latest XXXXXXXXXXXX.dkr.ecr.ap-northeast- 1.amazonaws.com/ec-cube:latest docker push XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/ec- cube:latest
confidential TENDA CO., LTD. 18 やってみた RDSでデータベース作成 RDSの作成 データベースを作成しておく。 右記詳細は割愛するが、ポイントは以下
• エンジンタイプを設定する ここでは Aurora MySQL コンパチにする • DBクラスター識別⼦を設定する ここでは ec-cube-cluster とする • インスタンスタイプの設定 ここでは db.t3.medium とする • 接続は極⼒少なくする • セキュリティグループは for_rds とする
confidential TENDA CO., LTD. 19 やってみた RDSでデータベース作成 検証⽤EC2を使って接続確認の実施と、 EC-CUBE利⽤ユーザとそのパスワードを設定する。 //
mysqlのクライアントをインストール # dnf -y install https://dev.mysql.com/get/mysql84-community-release-el9-1.noarch.rpm # dnf -y install mysql // RDSに接続 # mysql -h ec-cube-cluster.cluster-c9rb6qfpwavf.ap-northeast-1.rds.amazonaws.com -u admin -p // docker-compose.mysql.yml と同じ設定で登録しておく mysql> CREATE USER 'dbuser'@'%' IDENTIFIED BY 'secret'; mysql> GRANT ALL PRIVILEGES ON eccubedb.* TO 'dbuser'@'%'; mysql> FLUSH PRIVILEGES; ユーザー名/パスワードは docker-compose.mysql.yml と同⼀
confidential TENDA CO., LTD. 20 やってみた EFSで共⽤ファイルストレージ作成 EFSの作成 共⽤ファイルストレージを作成する。 ポイントは以下
• 名前を ec-cube-html に設定 • スループットモード 伸縮⾃在 に設定
confidential TENDA CO., LTD. 21 やってみた EFSで共⽤ファイルストレージ作成 検証⽤EC2を使ってマウントの設定と検証をする。 // EFSを使えるように
# dnf install -y amazon-efs-utils # mkdir /mnt/efs # chmod 777 /mnt/efs # mount -t efs -o tls fs-00f0e4ce20d7117fa:/ /mnt/efs
confidential TENDA CO., LTD. 22 やってみた EC2で環境作成 検証⽤EC2を使ってdocker起動でEC-CUBEを動かす。 // docker-compose.yml
変更 # cd /opt/ec-cube/ # vi docker-compose.yml # git diff docker-compose.yml diff --git a/docker-compose.yml b/docker-compose.yml index 3b81328da4..1d44066b2f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,9 +5,6 @@ networks: driver: bridge volumes: - mailcatcher-data: - driver: local - ### ignore folder volume ##### var: driver: local @@ -22,23 +19,22 @@ services: ### ローカルでビルドする場合は以下のコマンドを使⽤します ## docker build -t ec-cube --no-cache --pull --build-arg TAG=8.1-apache . ## docker tag ec-cube ghcr.io/ec-cube/ec-cube-php:8.1-apache - image: ${REGISTRY:-ghcr.io}/${IMAGE_NAME:-ec-cube/ec-cube-php}:${TAG:-8.1-apache} + image: XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/ec-cube:latest ports: - - 8080:80 - - 4430:443 + - 80:80 volumes: ### 同期対象からコストの重いフォルダを除外 ##################### - "var:/var/www/html/var" - "vendor:/var/www/html/vendor" - "node_modules:/var/www/html/node_modules" + - "/mnt/efs/html:/var/www/html/html” environment: # EC-CUBE environments - APP_ENV: "dev" - APP_DEBUG: 1 - DATABASE_URL: "sqlite:///var/eccube.db" + APP_ENV: "prod" + APP_DEBUG: 0 + DATABASE_URL: "mysql://dbuser:
[email protected]
1.rds.amazonaws.com:3306/eccubedb?charset=utf8mb4" DATABASE_SERVER_VERSION: 3 DATABASE_CHARSET: 'utf8' - MAILER_DSN: "smtp://mailcatcher:1025" ECCUBE_AUTH_MAGIC: "<change.me>" # TRUSTED_HOSTS: '^127.0.0.1$$,^localhost$$' # ECCUBE_LOCALE: "ja" @@ -59,11 +55,3 @@ services: networks: - backend - ### Mailcatcher ################################## - mailcatcher: - image: schickling/mailcatcher - ports: - - "1080:1080" - - "1025:1025" - networks: - - backend
confidential TENDA CO., LTD. 23 やってみた EC2で環境作成 検証⽤EC2を使ってdocker起動でEC-CUBEを動かす。 // docker-composeインストール
# curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # chmod +x /usr/local/bin/docker-compose # docker-compose --version Docker Compose version v2.33.1 // git保有のhtml内容をEFSにコピーする # cp -pr html/ /mnt/efs/ # chmod -R 777 /mnt/efs/html/ // 起動 # docker-compose up -d EC2インスタンスのパブリックIPにアクセス → 表⽰ // 停⽌ # docker-compose down --remove-orphans
confidential TENDA CO., LTD. 24 やってみた EC2で環境作成 httpでIPにアクセスすると画⾯が表⽰される これをECSで対応する︕
confidential TENDA CO., LTD. 25 やってみた ECSでタスク定義〜サービスの実⾏ タスク定義の作成 EC2内でdocker-compose.ymlをどう設定するかを宣⾔したように、 ECSのタスク定義をどう設定するかでAWSコンテナを操作するかが決まる。
… services: ### ECCube4 ################################## ec-cube: ### ローカルでビルドする場合は以下のコマンドを使⽤します ## docker build -t ec-cube --no-cache --pull --build-arg TAG=8.1-apache . ## docker tag ec-cube ghcr.io/ec-cube/ec-cube-php:8.1-apache image: XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/ec-cube:latest ports: - 80:80 volumes: ### 同期対象からコストの重いフォルダを除外 ##################### - "var:/var/www/html/var" - "vendor:/var/www/html/vendor" - "node_modules:/var/www/html/node_modules" - "/mnt/efs/html:/var/www/html/html” … … … … … … 似てる〜
confidential TENDA CO., LTD. 26 やってみた ECSでタスク定義〜サービスの実⾏ タスク定義の作成 docker-compose.ymlを参考にタスク定義に設定したもの(pickup) •
コンテナ : イメージURIをdocker-compose.ymlに設定したものと同じにする。 • 環境変数 : APP_ENV / APP_DEBUG / DATABASE_URL / ECCUBE_AUTH_MAGIC を docker-compose.ymlに設定したものと同じにする。 • ボリューム / コンテナマウントポイント : docker-compose.ymlと同様に、EFSを設定。 設定したら作成実施。 タスク定義ができたら、 続いてクラスターの作成へ。
confidential TENDA CO., LTD. 27 やってみた ECSでタスク定義〜サービスの実⾏ クラスターの作成 クラスターはECSを動作させるための箱です。 インフラストラクチャ
で AWS Fargate(サーバーレス)にチェックを⼊れ作成します。 続いてサービスの作成。
confidential TENDA CO., LTD. 28 やってみた ECSでタスク定義〜サービスの実⾏ サービスの作成 先ほど作成したタスク定義を⽤いて、サービスを作成する。 ポイントを以下に列挙
• コンピューティングオプション : 「起動タイプ」に設定 • 起動タイプ : 「FARGATE」を選択 • アプリケーションタイプ : 「サービス」を選択 • タスク定義(ファミリー指定) : 先ほど作成した ec-cube を選択 • ネットワーキングVPC : 本勉強会⽤のVPCを選択 • サブネット : 利便性を考えてPublic系選択 • セキュリティグループ : 最初に作成した 「for_ecs」 を選択 • ロードバランシングを使⽤ : チェックをつける • 新しいリスナー / 新しいターゲットグループを作成する 設定したら「作成」実⾏。
confidential TENDA CO., LTD. 29 やってみた ECSでタスク定義〜サービスの実⾏ サービスの作成 暫く待つと実⾏中に切り替わる。 が、、ALB設定周りを変更する必要がある。
confidential TENDA CO., LTD. 30 やってみた ECSでタスク定義〜サービスの実⾏ ALBの設定 作成直後だとエラー 到達不可能を回避
confidential TENDA CO., LTD. 31 やってみた ECSでタスク定義〜サービスの実⾏ ALBの設定 ECSサービス作成経由だと細かい設定がされていないので修正する。 到達不可能の理由は、ALBのセキュリティグループが「for_ecs」になっているから。
→最初に作成した「for_alb」に変更する。 もう1点、作成したターゲットグループの属性編集を⾏い、 「維持設定をオンにする」にチェックを⼊れること。これで複数インスタンスでも 対象を維持できる。
confidential TENDA CO., LTD. 32 やってみた ECSでタスク定義〜サービスの実⾏ ALBにアクセスすると画⾯が表⽰される
confidential TENDA CO., LTD. 33 やってみた 起動後の微修正 動作確認を進めていると、会員登録画⾯に進めないことを確認。。 index.phpを修正することで回避できそう。 EC2で右記対応。
ECRのリポジトリを最新化したら、 ECSのサービスを強制更新。 再度アクセスすると会員登録画⾯OKに。 # cd /opt/ec-cube/ # vi index.php # git diff index.php diff --git a/index.php b/index.php index 001279a600..d33974a002 100644 --- a/index.php +++ b/index.php @@ -55,6 +55,10 @@ if ($trustedHosts) { Request::setTrustedHosts(explode(',', $trustedHosts)); } +if (@$_SERVER["HTTP_X_FORWARDED_PROTO"] === 'https') { + $_SERVER['HTTPS'] = 'on'; +} + $request = Request::createFromGlobals(); // 再度ビルド # docker build -t ec-cube . // ECRログイン(ロール付与してれば成功する) # aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password- stdin XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com // ECRへのpushとタグ付け docker tag ec-cube:latest XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/ec-cube:latest docker push XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/ec-cube:latest 参考 : https://umebius.com/eccube/elb-alb-https-restrict-err_too_many_redirects/
confidential TENDA CO., LTD. 34 やってみた すべて完了
confidential TENDA CO., LTD. 35 まとめ EC-CUBEをサーバレスで動かすことができた。 EC-CUBEを完全なサーバレス(AWS Lambda etc)で動かすのは難しいが、
コンテナのサーバレス(Fargate/ECS)なら⽐較的現実的だった。 EC-CUBEにはDocker関連の資材が標準で⽤意されているため、 タスク定義の設定を理解できれば対応する敷居は⾼くない。 (今回紹介しませんでしたが、Docker Compose を使ってECSに直接デプロイもできるそうな。)
confidential TENDA CO., LTD. 36 ありがとうございました
confidential TENDA CO., LTD. 37 参考⽂献 • EC-CUBE システム要件 https://doc4.ec-cube.net/quickstart/requirement
• Amazon Web Services Wikipedia https://ja.wikipedia.org/wiki/Amazon_Web_Services • Amazon Elastic Container Service https://aws.amazon.com/jp/ecs/ • EC-CUBE Docker Composeを使⽤してインストールする https://doc4.ec-cube.net/quickstart/docker_compose_install • ELB、ALBの冗⻑化でHTTPSアクセスがHTTPになる現象を回避する⽅法 https://umebius.com/eccube/elb-alb-https-restrict-err_too_many_redirects/
confidential 【注意事項】 l 本資料を無断で第三者に配布することを禁⽌します。 l Amazon Web Services、『Powered by Amazon
Web Service』ロゴ、[その他AWS商標名]は、⽶国および/またはその他の諸国における、 Amazon.com, Inc. またはその関連会社の商標です。