Laravel 애플리케이션을 CodePipeline/CodeBuild로 ECS에 자동 배포
5144 단어 라라벨CodeBuildECSCodePipelineAWS
소개
github
에 소스를 푸시하기만 하면 응용 프로그램이 자동으로 ECS 환경에 배포되도록 CodePipeline
를 만듭니다.또한 ECS 환경의 구축에 대해서는 아래 기사를 참조하십시오.
파이프라인 만들기
CodePipeline
의 パイプラインの作成
버튼에서 마법사에 따라 파이프라인을 만듭니다.이름
품목
값
파이프라인 이름
(선택 사항)
출처
품목
값
소스 공급자
github
리포지토리
imunew/laravel-ecs-demo
브랜치
마스터
빌드 제공자
AWS CodeBuild
빌드
품목
값
프로젝트 이름
(선택 사항)
환경 이미지
AWS CodeBuild 관리형 이미지 사용
OS
우분투
런타임
도커
버전
aws/codebuild/docker:17.09.0
빌드 사양
소스 코드의 루트 디렉토리 buildspec.yml 사용
VPC ID
비 VPC
환경 변수
AWS_ACCOUNT_ID PROJECT_NAMESPACE
buildspec.yml
아래 문서를 참고로
buildspec.yml
를 작성했습니다.version: 0.2
phases:
pre_build:
commands:
- echo Logging in to Amazon ECR...
- pip install awscli --upgrade
- aws --version
- $(aws ecr get-login --no-include-email --region ${AWS_DEFAULT_REGION})
- IMAGE_NAME_PHP_FPM=php-fpm
- IMAGE_NAME_NGINX=nginx
- REPOSITORY_URI_PHP_FPM=${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${PROJECT_NAMESPACE}/${IMAGE_NAME_PHP_FPM}
- REPOSITORY_URI_NGINX=${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${PROJECT_NAMESPACE}/${IMAGE_NAME_NGINX}
- COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
- IMAGE_TAG=${COMMIT_HASH:=latest}
build:
commands:
- echo Build started on `date`
- echo Building the Docker image...
- docker build -t ${REPOSITORY_URI_PHP_FPM}:latest -f docker/php-fpm/Dockerfile .
- docker build -t ${REPOSITORY_URI_NGINX}:latest docker/nginx
- docker tag ${REPOSITORY_URI_PHP_FPM}:latest ${REPOSITORY_URI_PHP_FPM}:$IMAGE_TAG
- docker tag ${REPOSITORY_URI_NGINX}:latest ${REPOSITORY_URI_NGINX}:$IMAGE_TAG
post_build:
commands:
- echo Build completed on `date`
- echo Pushing the Docker images...
- docker push ${REPOSITORY_URI_PHP_FPM}:latest
- docker push ${REPOSITORY_URI_PHP_FPM}:$IMAGE_TAG
- docker push ${REPOSITORY_URI_NGINX}:latest
- docker push ${REPOSITORY_URI_NGINX}:$IMAGE_TAG
- echo Writing image definitions file...
- IMAGE_DIFINITION_PHP_FPM="{\"name\":\"${IMAGE_NAME_PHP_FPM}\",\"imageUri\":\"${REPOSITORY_URI_PHP_FPM}:${IMAGE_TAG}\"}"
- IMAGE_DIFINITION_NGINX="{\"name\":\"${IMAGE_NAME_NGINX}\",\"imageUri\":\"${REPOSITORY_URI_NGINX}:${IMAGE_TAG}\"}"
- echo "[${IMAGE_DIFINITION_PHP_FPM},${IMAGE_DIFINITION_NGINX}]" > imagedefinitions.json
artifacts:
files: imagedefinitions.json
배포
품목
값
배포 공급자
Amazon ECS
클러스터 이름
laravel-ecs-demo-cluster 1
서비스 이름
laravel-ecs-demo 1
이미지의 파일 이름
(공란)
서비스 역할
CodePipeline
를 실행하는 데 필요한 서비스 역할을 지정합니다.주의) ECR(EC2 Container Registory)에 대한 액세스 권한
ECR에 로그인, 푸시 등이 필요하므로 아래의 액션을 허용합니다.
품목
값
서비스
EC2 Container Registory
액션(로드)
GetAuthorizationToken BatchCheckLayerAvailability
액션(쓰기)
CompleteLayerUpload UploadLayerPart InitiateLayerUpload PutImag
파이프라인 이미지
결국
master
브랜치에 푸시하면 자동으로 배포됩니다.결론
docker
에서 프로덕션 환경을 만드는 것은 어려운 인상을 가졌지만 AWS의 서비스가 점점 충실해지고 있기 때문인지 비교적 간단하게 할 수 있었습니다.비용적으로는, ALB(Application Load Balancer)가, 가장 컸습니다만, 기동 확실히 하지 않으면 보다 싸게 할 수 있습니다.
참고까지 품목의 일부를 노출해 둡니다.
그럼.
Laravel 애플리케이션을 로컬 또는 AWS에서 Docker로 이동에서 만든 클러스터 및 서비스를 지정합니다. ↩
Reference
이 문제에 관하여(Laravel 애플리케이션을 CodePipeline/CodeBuild로 ECS에 자동 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/imunew/items/687221e02d977564d610텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)