WiseN

CloudFormation으로 웹 어플리케이션실행및 관리

Aug 28,2015   |   AWS

작성자_GS Neotek

페이스북 공유하기 트위터 공유하기
Blog thumbnail

다루는 내용


· AWS CloudFormation으로 Simple Storage Service (S3) 생성하기
· 아마존 Linux AMI로 간단한 PHP 웹 어플리케이션 준비하기
· AWS CloudFormation에 어플리케이션 설정 적용하기
· AWS CloudFormation으로 어플리케이션 수정하기
· AWS CloudFormation으로 어플리케이션에 IAM 자격증명, ELB, Auto Scaling 추가하기


 

 

실습






AWS CloudFormation으로 아마존 S3 버킷 생성






 


  • CloudFormation으로 버킷 생성




∙ 소스 탬플릿 다운로드 : https://us-east-1-aws-training.s3.amazonaws.com/self-paced-lab-10/CloudFormation-S3-v1.template
∙ Resources는 AWS::ProductIdentifier::ResourceType의 형식을 가진다.


 



 

1. 콘솔에서 CloudFormation 클릭
2. Create New Stack (or Create Stack) 클릭
3. Select Template 페이지

∙ Name : S3-CF-LAB1
∙ Source : Specify an Amazon S3 template URL
https://us-east-1-aws-training.s3.amazonaws.com/self-paced-lab-10/CloudFormation-S3-v1.template
∙ Next 클릭


4. Options 페이지

∙ Key : Name
∙ Value : S3 LAB1
∙ Next 클릭


5. Review 페이지


∙ Create 클릭


6. 콘솔에서 S3 클릭하여 버킷 생성 확인

 




 


  • CloudFormation으로 버킷 삭제




1. 콘솔에서 CloudFormation 클릭
2. S3-CF-LAB1 스택 선택
3. Delete Stack 클릭
4. Yes, Delete 클릭
5. 콘솔에서 S3 클릭하여 버킷 삭제 확인

 




 


  • Retention 정책 수정




∙ S3는 데이터를 저장하므로 중요하다. CloudFormation 스택으로 S3 버킷을 생성 후 스택을 삭제하게 되면 S3 버킷도 삭제되게 되는데, 이럴 방지하기 위한 설정을 추가한다.


 



 




 


  • 수정된 CloudFormation으로 버킷 생성




∙ 소스 탬플릿 다운로드 : “DeletionPolicy” : “Retain”, 항목만 추가하면 된다.
https://us-east-1-aws-training.s3.amazonaws.com/self-paced-lab-10/CloudFormation-S3-v2.template


 

1. 콘솔에서 CloudFormation 클릭
2. Select Template 페이지

∙ Name : S3-CF-LAB2
∙ Source : Specify an Amazon S3 template URL
https://us-east-1-aws-training.s3.amazonaws.com/self-paced-lab-10/CloudFormation-S3-v2.template
∙ Next 클릭


3. Options 페이지

∙ Key : Name
∙ Value : S3 LAB2
∙ Next 클릭


4. Review 페이지
∙ Create 클릭
5. S3-CF-LAB2 스택 선택
6. Delete Stack 클릭
7. Yes, Delete 클릭
8. 콘솔에서 S3 클릭

∙ 생성된 버킷이 삭제되지 않고 유지된다.


 

 




웹 어플리케이션 준비






 


  • 심플 어플리케이션




∙ 소스 탬플릿 다운로드 : https://us-east-1-aws-training.s3.amazonaws.com/self-paced-lab-10/CloudFormation-WebApp-v1.template
∙ EC2 인스턴스 하나와 보안 그룹, EIP를 생성하고 아파치 웹 서버에 PHP 어플리케이션이 실행된다.


 




 


  • initial 스택 생성




1. 콘솔에서 CloudFormation 클릭
2. Create Stack 클릭
3. Select Template 페이지

∙ Name : WebApp-CF-LAB
∙ Source : Specify an Amazon S3 template URL
https://us-east-1-aws-training.s3.amazonaws.com/self-paced-lab-10/CloudFormation-WebApp-v1.template
∙ Next 클릭


4. Specify Parameters 페이지

∙ WebServerInstanceType : m1.small (기본값)
∙ Next 클릭


5. Options 페이지

∙ Key : Name
∙ Value : WebApp LAB
∙ Next 클릭


6. Review 페이지

∙ I acknowledge that this template might cause AWS CloudFormation to create IAM resources. : 체크
∙ Create 클릭


7. 확인

∙ Outputs 탭의 WebsiteURL Value로 브라우져 접속


 



 




 


  • Resource 속성 변경




실행 중인 인스턴스의 성능 문제로 타입을 변경하고자 할 경우 CloudFormation 스택을 Update하여 변경 가능하다. 이 경우 새로운 타입의 인스턴스 생성가 생성되고, 기존의 EIP를 새로운 인스턴스에 붙여준다. 기존 인스턴스는 종료된다. 이론상 EIP가 변경되므로 서비스 중단이 없어야하지만 새로운 인스턴스에 어플리케이션을 실행하는 프로세스가 올라오기 전에 EIP가 변경되어 서비스 단절이 발생할 수 있으므로 주의 바란다.


 

1. WebApp-CF-LAB 스택 선택
2. Update Stack 클릭
3. Select Template 페이지

∙ Source : Specify an Amazon S3 template URL
https://us-east-1-aws-training.s3.amazonaws.com/self-paced-lab-10/CloudFormation-WebApp-v1.template
∙ Next 클릭


4. Specify Parameters 페이지

∙ WebServerInstanceType : m1.medium 선택
∙ Next 클릭


5. Options 페이지

∙ Next 클릭


6. Review 페이지

∙ I acknowledge that this template might cause AWS CloudFormation to create IAM resources. : 체크
∙ Update 클릭


 




 


  • Resource 속성 추가




템플릿 리소스에 새로운 항목을 추가할 수도 있다. 아마존 EC2 keypair를 추가하고, EC2 보안그룹의 SSH 포트를 허용해 보도록 한다.


 

1. 파라미터 추가

 



 

2. KeyName Property 추가

 



 

위 소스가 KeyName을 추가하기 위한 전체 소스이지만, 템플릿에 다른 Property들이 많이 있으므로 아래 부분만 적절한 위치에 추가하면 된다.


 



 

3. EC2 보안그룹에 SSH 포트 허용 추가

 



 

4. 수정된 소스

https://us-east-1-aws-training.s3.amazonaws.com/self-paced-lab-10/CloudFormation-WebApp-v2.template


5. 콘솔에서 EC2 클릭
6. 왼쪽 메뉴에서 Key Pairs 클릭
7. 사용할 Key pair 명 복사
8. 콘솔에서 CloudFormation 클릭
9. WebApp-CF-LAB 스택 선택
10. Update Stack 클릭
11. Select Template 페이지

∙ Source : Specify an Amazon S3 template URL
https://us-east-1-aws-training.s3.amazonaws.com/self-paced-lab-10/CloudFormation-WebApp-v2.template
∙ Next 클릭


12. Specify Parameters 페이지

∙ WebServerInstanceType : m1.medium 선택
∙ WebServerKeyName : ec2_keypair 입력 (파라미터 항목이 추가되었다.)
∙ Next 클릭


13. Options 페이지

∙ Next 클릭


14. Review 페이지

∙ I acknowledge that this template might cause AWS CloudFormation to create IAM resources. : 체크
∙ Update 클릭


15. 콘솔에서 EC2 클릭

새로 생성된 EC2의 Security groups과 Key pair name을 확인해본다.


16. 웹 어플리케이션 실행 확인

∙ Outputs 탭의 WebsiteURL Value로 브라우져 접속


 



 




 


  • IAM 정책 수정




인스턴스에서 EC2 API를 사용할 경우 IAM 정책이 필요하다. IAM 정책 수정도 CloudFormation에서 가능하다.


 




 


  • 스택 리소스 변경




지금까지는 인스턴스 한대로 웹 서비스를 하였다. Auto scaling, ELB를 설정하여 좀 더 안정적인 웹 서비스를 구성하기 위해 템플릿을 수정한다.


 

1. Elastic IP 리소스 삭제

 



 

2. Elastic Load Balancer 리소스 추가

 



 

3. 웹 어플리케이션 대상 변경 (EC2 인스턴스  Auto Scaling Launch Configuration)

WebServerHost 리소스를 WebServerConfig 리소스로 수정한다.


 





 

리소스 명이 변경되었으므로 참조 정보를 가지고 있는 cfn-init과 cfn-hup의 내용도 수정해야한다.


4. Auto Scaling Group 리소스 추가

 



 

5. ELB가 EC2의 트래픽을 컨트롤 할 수 있도록 보안그룹을 수정한다.

 



 

6. Output 섹션 수정

 



 




 


  • 최종 템플릿으로 스택 업데이트




1. 콘솔에서 CloudFormation 클릭
2. WebApp-CF-LAB 스택 선택
3. Update Stack 클릭
4. Select Template 페이지

∙ Source : Specify an Amazon S3 template URL
https://us-east-1-aws-training.s3.amazonaws.com/self-paced-lab-10/CloudFormation-WebApp-v3.template
∙ Next 클릭


5. Specify Parameters 페이지

∙ WebServerInstanceType : m1.small 선택
∙ WebServerKeyName : ec2_keypair 입력
∙ Next 클릭


6. Options 페이지

∙ Next 클릭


7. Review 페이지

∙ I acknowledge that this template might cause AWS CloudFormation to create IAM resources. : 체크
∙ Update 클릭


8. 웹 어플리케이션 실행 확인

∙ Outputs 탭의 WebsiteURL Value로 브라우져 접속
http://WebApp-CF-ElasticL-1WDMNP536DLXN-1986427801.us-west-2.elb.amazonaws.com


 



 

∙ Output 주소는 ELB의 DNS Name과 동일하다.


 



 

9. CloudFormation 실행 확인

CloudFormation의 Resources 탭을 보면 스택이 어떠한 작업들을 하였는지 볼 수 있다.
∙ IAM User + AccessKey
∙ EC2 SecurityGroup
∙ ELB LoadBalancer
∙ Auto Scaling Group + Auto Scaling Launch Configuration
∙ CloudFormation WaitCondition : 스택이 작업을 진행하다가 특정 신호를 기다려야할 필요가 있을 때 스택 작업을 일시정지 할 수 있다.


 



 

 




참고