【nuxt.js】S3・CloudFront 구성 CodeBuild에서의 배포 자동화
12152 단어 nuxt.jsgulpCodeBuildCodePipelineAWS
개요
Nuxt.js에서 만든 프로젝트를 gulp, CodeBuild를 사용하여 자동 배포하는 단계를 요약합니다.
참고 URL
아래 URL을 참고하여 CodeBuild 설정을 변경하고 있습니다.
사전 준비
아래 URL을 참고하여 CodeBuild 설정을 변경하고 있습니다.
사전 준비
절차
1. gulp 설치
yarn add gulp
이번에는 로컬 환경에 yarn을 사용하여 설치
gulpfile에서 사용하는 모듈 추가
yarn add gulp-awspublish
yarn add gulp-cloudfront-invalidate-aws-publish
yarn add concurrent-transform
2. gulpfile.js 만들기
gulpfile.js를 프로젝트의 루트 디렉토리에 만듭니다.
여기에서는 공식 페이지 에서 복사하여 다음을 변경합니다.
'x-amz-acl': 'private'
추가 ( S3의 공개 액세스 블록에 대처 ) const gulp = require('gulp')
const awspublish = require('gulp-awspublish')
const cloudfront = require('gulp-cloudfront-invalidate-aws-publish')
const parallelize = require('concurrent-transform')
// https://docs.aws.amazon.com/cli/latest/userguide/cli-environment.html
const config = {
// Required
params: {
Bucket: process.env.AWS_BUCKET_NAME,
},
// Optional
deleteOldVersions: true, // S3上の古いファイルを削除する
distribution: process.env.AWS_CLOUDFRONT, // CloudFront distribution ID
region: process.env.AWS_DEFAULT_REGION,
headers: {
/* 'Cache-Control': 'max-age=315360000, no-transform, public', */
'x-amz-acl': 'private',
},
// Sensible Defaults - gitignore these Files and Dirs
distDir: 'dist',
indexRootPath: true,
cacheFileName: '.awspublish',
concurrentUploads: 10,
wait: true, // wait for CloudFront invalidation to complete (about 30-60 seconds)
}
gulp.task('deploy', function () {
// create a new publisher using S3 options
// http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#constructor-property
const publisher = awspublish.create(config)
let g = gulp.src('./' + config.distDir + '/**')
// publisher will add Content-Length, Content-Type and headers specified above
// If not specified it will set x-amz-acl to public-read by default
g = g.pipe(
parallelize(publisher.publish(config.headers), config.concurrentUploads)
)
// Invalidate CDN
if (config.distribution) {
console.log('Configured with CloudFront distribution')
g = g.pipe(cloudfront(config))
} else {
console.log(
'No CloudFront distribution configured - skipping CDN invalidation'
)
}
// Delete removed files
if (config.deleteOldVersions) {
g = g.pipe(publisher.sync())
}
// create a cache file to speed up consecutive uploads
g = g.pipe(publisher.cache())
// print upload updates to console
g = g.pipe(awspublish.reporter())
return g
})
3. 소스 설정
사용 중인 리포지토리에 맞게 CodePipeline에서 설정합니다.
여기에서는 설명을 생략합니다.
4. buildspec.yml 만들기
프로젝트 파일의 루트 디렉토리에서 buildspec.yml을 만듭니다.
참고 URL 그대로(Ubuntu의 이미지를 이용)라면, 잘 할 수 없었기 때문에, AmazonLinux를 이용하도록 변경하고 있습니다.
Node.js 버전은 10 이상이 권장되는 것 같습니다 (2021년 5월 현재)
version: 0.2
phases:
install:
runtime-versions:
nodejs: 12
pre_build:
commands:
- echo 'Start pre_build phase'
- yum update -y
- yum -y install wget
- wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo
- curl --silent --location https://rpm.nodesource.com/setup_12.x | bash -
- yum install yarn
- yarn install
build:
commands:
- echo 'Start build phase'
- yarn generate
post_build:
commands:
- echo 'Start post_build phase'
- ./node_modules/.bin/gulp deploy
5. CodePipeline, CodeBuild 설정
환경을 다음과 같이 설정합니다.
CodeBuild 환경 변수는
- DEPLOY_ENV: S3
- AWS_CLOUDFRONT: 배포할 CloudFront 배포의 ID
- AWS_BUCKET_NAME: 배포 대상 S3의 버킷 이름
을 설정합니다.
보충
Reference
이 문제에 관하여(【nuxt.js】S3・CloudFront 구성 CodeBuild에서의 배포 자동화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/masa1246/items/45cdc5d049f045c0c3e1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)