라이브러리 번들 파일 준비
spring boot 를 jar 로 패키징 하게되면,
jar/.ebextensions
처럼 번들 파일에 root 경로에 .ebextension 폴더가 존재해야 한다.
일반적인 방법으로는 좀 까다로운 것 같고,
maven 에서 plugin 형태로 쉽게 되는 것 같다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>prepare</id>
<phase>package</phase>
<configuration>
<tasks>
<unzip src="${project.build.directory}/${project.build.finalName}.jar" dest="${project.build.directory}/${project.build.finalName}" />
<copy todir="${project.build.directory}/${project.build.finalName}/" overwrite="false">
<fileset dir="./" includes=".ebextensions/**"/>
</copy>
<zip compress="false" destfile="${project.build.directory}/${project.build.finalName}.jar" basedir="${project.build.directory}/${project.build.finalName}"/>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
$ mvn clean package
2. EFS mount 해보기
aws efs 콘솔로 들어가서 기본값 입력 후 파일시스템을 생성하게 되면,
파일 시스템 액세스 항목에 친절하게 커맨드가 나와있는 것을 볼 수 있다.
[Amazon EC2 탑재 지침(로컬 VPC에서)] 항목 클릭 후
파일 시스템 탑재 항목에 NFS 클라이언트 사용 커맨드를 붙혀넣고 실행하면 문제는 없는 듯 하다.
3. 자동화 설정을 위한 ELB 환경의 .ebextensions
.ebextensions
/efs-bootstrap.config
형태로 파일을 만들고,
efs-bootstrap.config
packages:
yum:
nfs-utils: []
commands:
01_mount:
command: "/tmp/mount-efs.sh"
files:
"/tmp/mount-efs.sh":
mode: "000755"
content : |
#!/bin/bash
if [[ -z `grep "/efs" /proc/mounts` ]]
then
echo "EFS Mount Process."
sudo mkdir /efs
sudo chown webapp:webapp /efs
sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport {efs_id}.efs.{region}.amazonaws.com:/ /efs
if [ $? -ne 0 ] ;
then
echo "Mount Error"
else
echo "Success Mount EFS"
fi
else
echo "aleady mounted EFS"
fi
형태로 집어넣는다.
그리 어렵지 않는 커맨드이니 생략하고, 마지막 sudo mount -t ~~
부분이 위에 aws 가이드 에서 나와있는 커맨드이다.
이 다음에
패키징 하고 ELB 에 배포 하면 끝난다.
4. Error
3번 항목을 진행하기전에 반드시 실제 서버에서 커맨드가 제대로 동작하는지 확인하자.
mount 하기전에 EFS 의 보안그룹이 마운트 할 인스턴스를 허용해야 한다. 주의하자