티스토리 뷰
AWS Academy Cloud Architecting Module 10 (Automating Your Architecture) Challenge Lab 잘 안 됐던 부분 메모
1. Challenge #3 - Task 4
Network 배포 자동화 하기 전에 update-network-stack 삭제
CafeNetworkPipeline에 연결된 CloudFormation에 이미 update-network-stack이라는 stack이 존재한다.
여기에 VPC, Subnet이 배포되어 있기 때문에, cafe-network.yaml의 템플릿을 업로드해서 CodePipeline에서 배포하면, 새로운 VPC와 Subnet을 배포하지 않는다.
네트워크 배포에는 당장 문제가 생기지 않는다. 그러나 그 다음 어플리케이션 서버 배포에서 문제가 생긴다. 조건에 맞는 Cafe VPC, Cafe Public Subnet이라는 네임 태그를 가진 자원들이 없기 때문에 cafe-app.yaml 배포에서 에러가 발생한다.
따라서 미리 삭제하고 cafe-network.yaml을 CodeCommit에 코드를 업로드 하는 작업을 해야 뒤에 에러가 발생하지 않는다.
2. Challenge #3 - Task 6
어플리케이션 서버 자원 EC2 작성하는 부분에서 많이 헤맸다.
정답은 아래와 같음 (EC2 부분만!)
CafeInstance:
Type: AWS::EC2::Instance
Properties:
ImageId: !Ref LatestAmiId
InstanceType: !Ref InstanceTypeParameter
KeyName: !FindInMap [RegionMap, !Ref "AWS::Region", keypair]
IamInstanceProfile: CafeRole
NetworkInterfaces:
- DeviceIndex: '0'
AssociatePublicIpAddress: 'true'
SubnetId: !ImportValue
'Fn::Sub': '${CafeNetworkParameter}-SubnetID'
GroupSet:
- !Ref CafeSG
Tags:
- Key: Name
Value: Cafe Web Server
UserData:
Fn::Base64:
!Sub |
#!/bin/bash
yum -y update
yum install -y httpd mariadb-server wget
amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2
systemctl enable httpd
systemctl start httpd
systemctl enable mariadb
systemctl start mariadb
wget https://aws-tc-largeobjects.s3-us-west-2.amazonaws.com/ILT-TF-200-ACACAD-20-EN/mod10-challenge/cafe-app.sh
chmod +x cafe-app.sh
./cafe-app.sh
특히 IamInstanceProfile 부분에서 많이 헤맸는데 저 부분 value 값 형태는 무조건 string이어야 한다.
만약에 새로운 IAM을 생성하고 싶으면 Resource 아래에 InstanceProfile을 만들고 참고(!Ref) 해준다.
그러나 이 챌린지랩에서는 이미 CafeRole이라는 IAM이 있었고 이걸 이용하라고 했으므로 그냥 CafeRole이라고 이름만 적어주면 되었다.. 🙃
너무 어렵게 생각해서 오히려 헤맸다
참고로 IAM 프로필을 만드는 방법은
Resource:
IamProfileExample:
Type: AWS::IAM::InstanceProfile
Properties:
InstanceProfileName: ExampleIamInstance
Path: /
Roles:
- MyRoleExample
아래 사이트를 참고하면 더 정확하고 자세하다
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html
자동화 템플릿에서 EC2 자원 내용을 수정하지 않고도, secret pair key를 설정하는 법
KeyName: !FindInMap [RegionMap, !Ref "AWS::Region", keypair]
그 리전 내에 있는 페어 키를 자동으로 찾아서 매핑함