반응형
이전 글에서 s3 - Cloudfront에 리액트 프로젝트를 배포하는 법을 알아보았는데
이번에 Codepipeline을 이용해서 깃으로 푸쉬 할 때 마다 자동으로 배포와 Cloudfront의 배포 무효화 까지 한 번에 하는 방법을 알아보자
기존 CodePipeline 생성 시 기본적인 세팅들을 그대로 따라가주면 혹 buildspec.yml 파일을 작성하는데 어려움이 있다면 아래를 참고하면 되겠다.
* buildspec.yml 파일 생성
base-directory 폴더명은 본인이 빌드 파일 떨구는 폴더 명을 적어주면 된다.
기존 Codepipeline을 이용한 배포에서 추가적으로 해줘야 할 것이 있는데 바로 Deploy 다음에 스테이지 하나를 추가하여
Cloudfront에 배포 무효화 해주는 것이다.
무효화는 AWS Lambda를 이용해서 해줄 건데
런타임을 파이썬으로 선택해주고 생성해주고 (파이썬 몰라도 된다)
import json
import boto3
code_pipeline = boto3.client("codepipeline")
cloud_front = boto3.client("cloudfront")
def lambda_handler(event, context):
job_id = event["CodePipeline.job"]["id"]
try:
user_params = json.loads(
event["CodePipeline.job"]
["data"]
["actionConfiguration"]
["configuration"]
["UserParameters"]
)
cloud_front.create_invalidation(
DistributionId=user_params["distributionId"],
InvalidationBatch={
"Paths": {
"Quantity": len(user_params["objectPaths"]),
"Items": user_params["objectPaths"],
},
"CallerReference": event["CodePipeline.job"]["id"],
},
)
except Exception as e:
code_pipeline.put_job_failure_result(
jobId=job_id,
failureDetails={
"type": "JobFailed",
"message": str(e),
},
)
else:
code_pipeline.put_job_success_result(
jobId=job_id,
)
위 코드를 입력해주고
구성 탭 에서 역할 권한에
{
"Effect": "Allow",
"Action": [
"codepipeline:PutJobFailureResult",
"codepipeline:PutJobSuccessResult",
"cloudfront:CreateInvalidation"
],
"Resource": "*"
}
위 권한을 추가해준뒤
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"codepipeline:PutJobFailureResult",
"codepipeline:PutJobSuccessResult",
"cloudfront:CreateInvalidation"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "logs:CreateLogGroup",
"Resource": "arn:aws:logs:ap-northeast-2:***********:*"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": [
"arn:aws:logs:ap-northeast-2:***************/aws/lambda/******************:*"
]
}
]
}
위와 같은 JSON이 될것이다.
다시 Codepipeline Deploy 다음 스테이지를 하나 추가해준 뒤
공급자로 람다를 선택 해주고 만들었던 함수 명 검색해서 선택 해주고
{"distributionId": "cloudfront-distributionId", "objectPaths": ["/*"]}
사용자 파라미터에 위 객체를 넣어주면 된다.
저장하고 실행시켜 보고 만약 성공이 떳다면 Cloudfront에 무효화가 일어났는지, s3에 파일은 제대로 업데이트 되고 있는지 확인해보고 마무리 하면 될 것이다.
반응형