갑자기 S3 생성은 왜 필요한 것일까?
Elastic Beanstalk 에서 도커 지원형태의 애플리케이션을 배포하려면 다음과 같은 방법을 사용할 수 있다.
쉽게 말하면 다음의 세 도구를 사용할 수 있다.
나는 단일 인스턴스 형태의 ECR 프라이빗 리포지터리에서 배포할 것이므로 세번째를 선택했다.
Dockerrun.aws.json은 v1,v2,v3으로 구분되며 아래 조건에 따라 사용하는 버전을 선택할 수 있다.
나는 최소화 하는 것이 좋아서 1번을 선택했다.
프로젝트에 Dockerrun.aws.json 생성하고 다음과 같은 내용을 추가하였다.
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "*********.dkr.ecr.ap-northeast-2.amazonaws.com/new_name_auction:latest",
"Update": "true"
},
"Ports": [
{
"ContainerPort": 8080,
"HostPort": 8080
}
]
}
stage('Deploy AWS') {
steps {
script {
env.EB_APPLICATION_NAME = YourApplicationName
env.BUCKET_NAME = YourS3BucketName
env.EB_ENV_NAME = "NewNameAuctionBackEnd-env-2"
sh """whoami"""
sh """aws s3 cp "./Dockerrun.aws.json" s3://${BUCKET_NAME}/json/${EB_APPLICATION_NAME}-${getGitCommitPretty()}.aws.json \
--region ap-northeast-2"""
sh """
# Execute Beanstalk
aws elasticbeanstalk create-application-version \\
--region ap-northeast-2 \\
--application-name ${EB_APPLICATION_NAME} \\
--version-label ${getGitCommitPretty()}-${env.BUILD_ID} \\
--source-bundle S3Bucket="${BUCKET_NAME}",S3Key="json/${EB_APPLICATION_NAME}-${getGitCommitPretty()}.aws.json"
"""
sh """
aws elasticbeanstalk update-environment \\
--environment-name ${EB_ENV_NAME} \\
--region ap-northeast-2 \\
--version-label ${getGitCommitPretty()}-${env.BUILD_ID}
"""
}
}
}
다음과 같이 스크립트가 ECR 이미지를 elasticbeanstalk 에 배포하기 위해 꼭 필요하다.
이렇게 하면 elasticbeanstalk 에 배포가 정상적으로 동작한다.
나는 작업하면서 도대체 왜 S3에 올려야 하는지 ECR을 직접 지정하는 방법이 없는지 궁금해서 옵션을 살펴보니...
로그 탭에 로그요청에 가서 마지막 100줄을 출력하고 분석해 보자.
나의 경우, ECR 프라이빗 리포지터리를 읽는 역할을 추가해주지 않았으므로 이것이 발생하였다.
IAM 역할에 AmazonEC2ContainerRegistryReadOnly 를 추가해주면 된다.