본문 바로가기

Cloud

PaaS-TA (5) - 앱 배포 및 서비스 바인딩

CF CLI로 앱을 push 할 때, 파라미터로 서비스를 바인딩하는 방법을 찾지 못했다. 하지만 CF CLI로 앱과 서비스를 바인딩하지 못하는 건 아니다. 그중에서 manifest를 사용한 서비스 바인딩을 해보자. 배포하려는 앱은 spring boot web 앱이다.

 

앞전의 포스트에서 앱을 배포하고, 해당 앱의 환경을 manifest로 저장하는 방식을 사용했었다.

이번에는 manifest를 먼저 만들고 앱을 배포하는 방식을 사용할 예정이다.

 

우선 앱(jar파일)이 있는 폴더로 이동하고 manifest.yml파일을 생성한다.

applications: 
    - name: mymask-backend
      instances: 3 
      memory: 1G
      disk_quota: 512M 
      buildpack: https://github.com/cloudfoundry/java-buildpack#v4.28
services:
    - mymask-backend-db

spring boot로 만들어진 앱이므로, 당연히 빌드팩은 java buildpack이 된다.

바인딩하려는 서비스의 이름을 services 항목에 매핑시켜주면 된다.

 

이제 앱을 배포해보자.

cf push 앱이름

 

배포가 깔끔하게 되면 좋겠지만... 에러가 발생하는 케이스가 있다.

[Buildpack] ERROR Finalize failed with exception #<RuntimeError: No container can run this application. Please ensure that you've pushed a valid JVM artifact or artifacts using the -p command line argument or path manifest entry. ....

위와 같은 에러가 난다면, 앱 이름과 jar 파일의 이름이 같지 않은 경우일 가능성이 크다. 메이븐으로 excutable jar를 생성하면 앱이름에 버전이 붙는 케이스가 그러하다. 그렇다면 -p 파라미터로 jar 파일이름을 지정해주자.

cf push 앱이름 -p jar_file_name

 

Manifest 파일을 읽는 중에 오류 발생:

이런 에러가 생길 수 있다. 이는 manifest 파일 문법 오류이다. 눈에 불을 켜고 오탈자를 찾아보자.

 

ERR Cannot calculate JVM memory configuration: There is insufficient memory remaining for heap. Memory limit XXX is less than allocated memory XXX(...

잘 되나 싶더니 이런 에러도 난다. 이건 메모리 할당량을 너무 적게 잡은 케이스이다. allocated memory보다 넉넉하게 잡아주자.

 

이 역시도 콘솔에서 진행 가능하다. 앱 배포화면에서 서비스를 선택할 수 있으므로 (4)번 포스트를 참조하자.

https://nyaaong.tistory.com/23

 

PaaS-TA (4) - 앱 배포

드디어 앱을 배포하는 단계다. 우선 이전에 생성한 DB 서비스와는 바인딩하지 않는, static web 앱을 배포해보자. 기본적인 명령어는 cf push [앱이름] 인데, 앱 이름은 몹시 중요하다. 배포 후 해당 앱을 사용하..

blog.asusual.dev