전 글과 같이 "Port 3000 is already in use"
에러를 처리하고나서 서버가 정상적으로 작동하자마자 파일을 읽어들이는 부분에서 "Access Denied"
에러가 발생했다.
원인을 확인 해 보니 appspec.yml
에서 별도로 권한 설정(permission)을 해줄 수 있는데 처리를 안한 게 문제였다.
원인은 자동배포를 통해 생성되거나 업데이트 된 파일이 root권한으로 올라간 것이었다.
그래서 아래와 같이 해결 해주었다.
root
가 아닌 기존에 사용하던 계정으로 재부여 해줬다.sudo chown -R "계정명":"그룹명" /home/ubuntu/
위와 같이 파일 소유권한을 변경 해준 뒤 1차적인 문제는 해결되었다. 하지만 앞으로 배포될 파일은 여전히 root
로 올라갈 것이다. 이 부분을 변경해서 원하는 계정으로 올라가도록 해야한다.
appspec.yml
은 자동 배포 수명주기에 따른 각각의 배포를 관리하는 데 사용되는 정보를 관리하는 파일이다.
그 중 permission
을 통해 권한 정보를 줄 수 있다.
permission
구조는 아래와 같다.
permissions:
- object: object-specification
pattern: pattern-specification
except: exception-specification
owner: owner-account-name
group: group-name
mode: mode-specification
acls:
- acls-specification
context:
user: user-specification
type: type-specification
range: range-specification
type:
- object-type
각 명령에 대한 자세한 설명들은 AWS 공식 페이지를 통해 확인할 수 있다.
나는 이 중 필수 항목인 object
와 owner
, group
항목을 추가로 작성 해주었다.
그래서 완성된 appspec.yml은 아래와 같다.
version: 0.0
os: linux
files:
- source: /
destination: /home/ubuntu
### 추가된 부분
permissions:
- object: /home/ubuntu
owner: "계정명"
group: "그룹명"
hooks:
ApplicationStop:
- location: scripts/stop.sh
runas: root
AfterInstall:
- location: scripts/initialize.sh
runas: root
ApplicationStart:
- location: scripts/start.sh
runas: root
이후 자동배포 시 object
에 설정된 디렉토리 내 파일들은 모두 permission
에 적용된 계정과 그룹의 권한으로 지정된다.
이로써 access denied
오류를 해결할 수 있었다.