aws 서버는 이번 프로젝트가 처음이다.
문서를 보며 이것저것 적용을 해보는데 문서 내용이 너무 많아서
다음 프로젝트 작업시에도 같은 삽질을 반복하게 될 것 같다..
너무 비효율적인 것 같아 나만의 cloud Formation 파일을 만들어 반복작업을 회피하려 한다.
문제는 cloud formation 에 기능을 입힐때마다 문서를 뒤져서 해야 하기에 평생 aws 셋팅에 쓸 시간을 formation 파일 만드는데 다쓴게 아닌가 싶기도 하다.
다시한번 말해두지만 aws 로 서버 셋팅 하는 건 처음이다.
linux 도 기본적인 것 외에는 거의 손댄적이 없다. 해서 참고 할 사람은 반드시 스스로 검증하고 이해한 후에 참고 하기 바란다.
전체 소스는 여기서 확인이 가능하다. 아직 부족한 부분이 많다.
Cloud Formation 은 json, yaml 두가지 포멧을 지원한다.
yaml 은 익숙하지 않아 json 으로 작성을 했으나 파일이 커질수록 관리가 힘들어서 주석의 필요함을 느꼇고,
compile 명령어를 사용하면 주석을 삭제하는 소스를 만들었다.
근데 이게 수정할때마다 compile 하는게 너무 귀찮기도 하고 compile 을 하는 걸 까먹는 경우가 생겼다.
파일 저장시에 자동으로 compile 하는 소스까지 만들다보니... yml 로 작성하면 다해결된다는 걸 깨달았다.......
yaml 문법으로 변환하는데 또 몇시간을 허비하고는 그냥 formation 파일을 생략할까도 고민했지만..
formation 파일을 만들면서 서버 이해도가 좀더 올라가는 것 같아 끝까지 가보기로 한다.
cloud formation 에서 쓸수 있는 함수
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html
Intrinsic function reference - AWS CloudFormation
You can use intrinsic functions only in specific parts of a template. Currently, you can use intrinsic functions in resource properties, outputs, metadata attributes, and update policy attributes. You can also use intrinsic functions to conditionally creat
docs.aws.amazon.com
cloud formation 에서 쓸수 있는 함수들이다.
입맛에 맞는걸 찾다보면 시간 소모가 심해서 꼭 필요하거나 본인이 도저희 타협이 되지 않는 소스 구현이라면 문서를 찾아본다.
샘플 템플릿
주로 처음부터 작성하기 보다는 필요한 기능을 aws 에서 제공하는 sample 파일에서 찾았다.
json 파일이라 yaml 사용시 변환이 필요하다.
https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/cfn-sample-templates.html
샘플 템플릿 - AWS CloudFormation
이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.
docs.aws.amazon.com
문제는 대부분이 아마존 자체 문법을 사용하기에 아무리 줄이려고 해도 문서 검색시간이 많이 든다는 거다.
되도록이면 yaml 파일에 많은 주석을 달아 다시 작업을 하더라도 헤매는 시간을 최소화 하기 위해 노력했다.
yaml include 삽질
파일은 계속 커지고 관리가 힘들 것 같아 yaml include 를 적용해 보려고 했다.
npm 에 yaml include 관련 플러그인이 나와있다.
이방법의 문제는 aws 자체적으로 제공하는 문법을 제대로 인식하지 못해 오류가 난다.(함수 부분.)
2번째 방법은 aws-s3 에 파일을 업로드해서 include 처럼 사용하는 방법이 있는데 개인적으로는 또다른 반복작업을 강요하는 것 같아 사용하지 않았다.
미완성인 이유
또다른 문제점으로.
autoscaling 을 yaml 로 작성하는 한계점이다.
수많은 aws 관련 블로그 글이나 강좌를 보면 aws가 알아서 다 해줄 것 처럼 설명하지만.
실무에서 쓸만한 수준으로 구현한건 단 하나도 보질 못했다. 대부분 단순 파일을 작성해서 자동으로 scaling 이 이뤄 지는 샘플만 보여준다.
물론 자동화를 포기하고 소스 업데이트시 마다 ami 파일을 만든다면 가능은하다.
딱히 마음에 드는 방법이 아니다.
스스로 내린 대안.
프로젝트 오픈전 ami 파일을 만들고. 그파일을 기반으로 autoscale 설정을 해주는 방법을 택했다.
같은 ami 파일로 ec2 를 기동할 경우 서버의 public-key 값이 같다.
autoscale 설정에 사용하는 버젼관리 프로그램에서 최신 소스를 내려 받는 명령을 추가 할 수 있다.
기타.
파일 내에 주석을 달았기 때문에 구현 구문에 대해 구체적인 설명은 생략 한다. 아직 완성이 아니기도하고...
bastion 서버를 접속후 private 에 있는 web 서버로 접속하는 2중 접속 구조다.
혹시 좀더 나은 방법을 아시는 분은 욕을 해도 좋으니 태클 부탁드린다.
혼자 하다 보니 제대로 하는 건지 검증이 되질 않는다.
#사용할 키를 미리 버퍼에 등록한다.
ssh-add -K myPrivateKey.pem
# bastion 서버로 접속할때 가지고 있는 private 키를 함께 전송한다.
ssh –A user@<jumphost or DNS-entry>
# 명령어에 키 관련 옵션없이 접속한다.
ssh user@<instance-IP-address or DNS-entry>
yaml 파일에는 다음 내용이 포함 되어 있다.
1. vpc, subnet, nacl, iternet gateway, nat gateway, ec2, rds
2. ec2 초기 설정 (nginx, php 등등 설치 및 설정)
추가될 내용.
auto scaling 설정을 담은 추가 yaml 파일.
s3, rds 관련.
'개발자일상 > aws & linux' 카테고리의 다른 글
nginx php8.0 laravel amazon linux (0) | 2021.06.30 |
---|---|
aws ubuntu nginx laravel (0) | 2021.06.23 |
댓글