質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

0回答

1744閲覧

AWS fargateでPHPアプリをデプロイしたい

tsukinoshita_t

総合スコア0

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/07/27 02:04

編集2021/07/27 02:11

fargateでLaravelで実装したAPIをデプロイしたい

AWSにまだ慣れておりません。。。
LaravelでAPIサーバを実装したのをECS fargateへデプロイしたと考えています。
環境はほぼ出来上がっており、あとはECSへデプロイすれば展開できると考えています。

展開方法としては
・ローカルPCでビルドしたイメージをECRへ(pushコマンドを利用して)pushする
・ECSの管理画面からタスク定義をする
・対象のクラスタを選択、対象のサービスを選択から新しく定義したタスクを選んで更新をする

ざっくり言うとこういうイメージです。
aws cliを利用しているわけではなく、管理画面から操作をしております。

PHPのエラーがでているので、おそらくコンテナ間では通信できるのかなと考えています。

なにが原因で止まっているのかが、いまいち掴めず困っております。
何か知っている方がいましたらアドバイスをいただけると助かります。

使用しているミドルウェアやフレームワークなど
PHP:8系
Laravel:6系

発生している問題・エラーメッセージ

Warning: require(/application/public/../vendor/autoload.php): Failed to open stream: No such file or directory in /application/public/index.php on line 24 Fatal error: Uncaught Error: Failed opening required '/application/public/../vendor/autoload.php' (include_path='.:/usr/local/lib/php') in /application/public/index.php:24 Stack trace: #0 {main} thrown in /application/public/index.php on line 24

Dokerfile

FROM nginx:1.21.1 WORKDIR /application RUN apt-get update COPY ./.docker/infrastructure/local/nginx/default-test.conf /etc/nginx/conf.d/default.conf EXPOSE 80

default-test.conf

upstream php-fpm { server 127.0.0.1:9000; } server { listen 80; server_name localhost; root /application/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; index index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ .php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /.(?!well-known).* { deny all; } }
FROM php:8.0-fpm COPY ./.docker/infrastructure/local/php/php.ini /usr/local/etc/php/ COPY ./ /application WORKDIR /application RUN apt-get update \ && apt-get install -y zlib1g-dev libzip-dev libpq-dev postgresql-client \ && docker-php-ext-install zip pdo_pgsql #Composer install COPY --from=composer:latest /usr/bin/composer /usr/bin/composer ENV COMPOSER_ALLOW_SUPERUSER 1 ENV COMPOSER_HOME /composer ENV PATH $PATH:/composer/vendor/bin #WORKDIR /var/www RUN composer global require "laravel/installer" RUN apt-get update && apt-get install -y \ git \ zip \ unzip \ && composer install -vvv RUN php artisan cache:clear \ && php artisan config:clear \ && php artisan route:clear \ && php artisan view:clear RUN chown -R www-data:www-data storage

※いろいろ試していたため、ごちゃついております。。

試したこと

上記二つのDockerfileをビルドして、ECRの各リポジトリへpushしています。
ビルドしたイメージの中身を確認してみると、vendorディレクトリにはエラーにあるファイルが存在していることは確認しています。
なのでおそらく、composer installはできているのでは無いかと言う考えです。

補足情報(タスク定義した後のJSONファイルになります)

一つのサービスの中で2つのコンテナを起動しているイメージです。

{ "ipcMode": null, "executionRoleArn": "********************", "containerDefinitions": [ { "dnsSearchDomains": null, "environmentFiles": null, "logConfiguration": { "logDriver": "awslogs", "secretOptions": null, "options": { "awslogs-group": "/ecs/api", "awslogs-region": "ap-northeast-1", "awslogs-stream-prefix": "api" } }, "entryPoint": null, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ], "command": null, "linuxParameters": null, "cpu": 256, "environment": [], "resourceRequirements": null, "ulimits": null, "dnsServers": null, "mountPoints": [], "workingDirectory": "/application", "secrets": null, "dockerSecurityOptions": null, "memory": null, "memoryReservation": 512, "volumesFrom": [], "stopTimeout": null, "image": "nginxのECRイメージ", "startTimeout": null, "firelensConfiguration": null, "dependsOn": [ { "containerName": "php", "condition": "START" } ], "disableNetworking": null, "interactive": null, "healthCheck": null, "essential": true, "links": null, "hostname": null, "extraHosts": null, "pseudoTerminal": null, "user": null, "readonlyRootFilesystem": null, "dockerLabels": null, "systemControls": null, "privileged": null, "name": "api" }, { "dnsSearchDomains": null, "environmentFiles": null, "logConfiguration": { "logDriver": "awslogs", "secretOptions": null, "options": { "awslogs-group": "/ecs/api", "awslogs-region": "ap-northeast-1", "awslogs-stream-prefix": "ecs" } }, "entryPoint": null, "portMappings": [], "command": null, "linuxParameters": null, "cpu": 256, "environment": [], "resourceRequirements": null, "ulimits": null, "dnsServers": null, "mountPoints": [], "workingDirectory": "/application", "secrets": [ { "いろいろ環境変数を定義しています" } ], "dockerSecurityOptions": null, "memory": null, "memoryReservation": 512, "volumesFrom": [], "stopTimeout": null, "image": "LaravelのAPIサーバのECRイメージ", "startTimeout": null, "firelensConfiguration": null, "dependsOn": null, "disableNetworking": null, "interactive": null, "healthCheck": null, "essential": true, "links": null, "hostname": null, "extraHosts": null, "pseudoTerminal": null, "user": null, "readonlyRootFilesystem": null, "dockerLabels": null, "systemControls": null, "privileged": null, "name": "php" } ], "placementConstraints": [], "memory": "1024", "taskRoleArn": "********************", "compatibilities": [ "EC2", "FARGATE" ], "taskDefinitionArn": "********************", "family": "taskdef-api", "requiresAttributes": [ { "targetId": null, "targetType": null, "value": null, "name": "com.amazonaws.ecs.capability.logging-driver.awslogs" }, { "targetId": null, "targetType": null, "value": null, "name": "ecs.capability.execution-role-awslogs" }, { "targetId": null, "targetType": null, "value": null, "name": "com.amazonaws.ecs.capability.ecr-auth" }, { "targetId": null, "targetType": null, "value": null, "name": "com.amazonaws.ecs.capability.docker-remote-api.1.19" }, { "targetId": null, "targetType": null, "value": null, "name": "com.amazonaws.ecs.capability.docker-remote-api.1.17" }, { "targetId": null, "targetType": null, "value": null, "name": "com.amazonaws.ecs.capability.docker-remote-api.1.21" }, { "targetId": null, "targetType": null, "value": null, "name": "com.amazonaws.ecs.capability.task-iam-role" }, { "targetId": null, "targetType": null, "value": null, "name": "ecs.capability.container-ordering" }, { "targetId": null, "targetType": null, "value": null, "name": "ecs.capability.execution-role-ecr-pull" }, { "targetId": null, "targetType": null, "value": null, "name": "ecs.capability.secrets.ssm.environment-variables" }, { "targetId": null, "targetType": null, "value": null, "name": "com.amazonaws.ecs.capability.docker-remote-api.1.18" }, { "targetId": null, "targetType": null, "value": null, "name": "ecs.capability.task-eni" } ], "pidMode": null, "requiresCompatibilities": [ "FARGATE" ], "networkMode": "awsvpc", "cpu": "512", "revision": 33, "status": "ACTIVE", "inferenceAccelerators": null, "proxyConfiguration": null, "volumes": [] }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2021/07/27 02:29

まず、ECSではなくローカルで動かしたときにはそのエラーは発生しますか? もしするならそれはECSとは関係ないエラーです。 また、タスク定義ではちゃんと想定しているバージョンのイメージを参照していますか?
tsukinoshita_t

2021/07/28 05:08

ありがとうございます! 返信遅くなりました。。。 ローカルでは動きます。 docker-composeで構築しています。 それをECSへデプロイしようとしていて、ネット記事などを参考に試しているところでした。 > また、タスク定義ではちゃんと想定しているバージョンのイメージを参照していますか? これについては想定しているイメージを参照できていると考えています。 一応最小構成のものをデプロイしたときは正しく表示されたので、もしかしたらタスク定義が正しくできてないのかなとも考えてます。 現在の状況は上記のエラーは出なくなったのですが、依然として正しく動いておらずです。 nginxとphpのコンテナは紐づけるような設定が必要だったりするのでしょうか?
yu_1985

2021/07/28 05:44

> 現在の状況は上記のエラーは出なくなったのですが それならこの質問の問題は解決なので、解消した方法を書いて必要があれば別の質問を作ってください。 既に別の事象なので書かれている情報ではわかりません。「正しく動いていない」の詳細が不明です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問