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": [] }
あなたの回答
tips
プレビュー