-
[AWS] CloudFormation을 활용하여 퍼블릭, 프라이빗 인스턴스 구성 - 1 (퍼블릭 인스턴스)AWS 2023. 1. 10. 20:22
https://bbiyak-cloud.tistory.com/9
https://bbiyak-cloud.tistory.com/10
이전 글에서는 퍼블릭/프라이빗 서브넷 VPC 구성 작업을 '콘솔'로 진행했다면
이번 글에서는 퍼블릭/프라이빗 서브넷 VPC 구성 작업을 '코드'를 이용하여 'CloudFormation'로 진행해본다.
실습 아키텍처
1. 템플릿 파일 생성 후 스택 생성
Parameters: KeyName: Description: Name do an esisting RC2 KeyPair to enable SSH access to the instances. Linked to AWS Parameters Type: AWS::EC2::KeyPair::KeyName ConstraintDescription: must be the name of an existing EC2 KeyPair. Resources: CloudNetaVPC:# VPC Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16 Tags: - Key: Name Value: CloudNeta-VPC CloudNetaPublicSN:# 퍼블릭 서브넷 Type: AWS::EC2::Subnet Properties: VpcId: !Ref CloudNetaVPC AvailabilityZone: !Select [ 0, !GetAZs '' ] CidrBlock: 10.0.0.0/24 Tags: - Key: Name Value: CloudNeta-Public-SN CloudNetaPrivateSN: # 프라이빗 서브넷 Type: AWS::EC2::Subnet Properties: VpcId: !Ref CloudNetaVPC AvailabilityZone: !Select [ 2, !GetAZs '' ] CidrBlock: 10.0.1.0/24 Tags: - Key: Name Value: CloudNeta-Private-SN CloudNetaIGW: # 인터넷 게이트웨이 Type: AWS::EC2::InternetGateway Properties: Tags: - Key: Name Value: CloudNeta-IGW CloudNetaIGWAttachment:# IGW-VPC 연결 Type: AWS::EC2::VPCGatewayAttachment Properties: InternetGatewayId: !Ref CloudNetaIGW VpcId: !Ref CloudNetaVPC CloudNetaPublicRT: # 퍼블릭 라우팅 테이블 Type: AWS::EC2::RouteTable Properties: VpcId: !Ref CloudNetaVPC Tags: - Key: Name Value: CloudNeta-Public-RT DefaultPublicRoute: # 퍼블릭 라우팅 테이블에 경로추가 Type: AWS::EC2::Route DependsOn: CloudNetaIGWAttachment Properties: RouteTableId: !Ref CloudNetaPublicRT DestinationCidrBlock: 0.0.0.0/0 GatewayId: !Ref CloudNetaIGW CloudNetaPrivateRT: # 프라이빗 라우팅 테이블 Type: AWS::EC2::RouteTable Properties: VpcId: !Ref CloudNetaVPC Tags: - Key: Name Value: CloudNeta-Public-RT CloudNetaPublicSNRouteTableAssociation: # 퍼블릭 라우팅 테이블 - 퍼블릭 서브넷 연결 Type: AWS::EC2::SubnetRouteTableAssociation Properties: RouteTableId: !Ref CloudNetaPublicRT SubnetId: !Ref CloudNetaPublicSN CloudNetaPrivateSNRouteTableAssociation: # 프라이빗 라우팅 테이블 - 프라이빗 서브넷 연결 Type: AWS::EC2::SubnetRouteTableAssociation Properties: RouteTableId: !Ref CloudNetaPrivateRT SubnetId: !Ref CloudNetaPrivateSN CloudNetaSecurityGroup: # 보안그룹 Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Enable HTTP access via port 80 and SSH access via port 22 VpcId: !Ref CloudNetaVPC SecurityGroupIngress: - IpProtocol: tcp FromPort: '80' ToPort: '80' CidrIp: 0.0.0.0/0 - IpProtocol: tcp FromPort: '22' ToPort: '22' CidrIp: 0.0.0.0/0 - IpProtocol: icmp FromPort: -1 ToPort: -1 CidrIp: 0.0.0.0/0 CloudNetaPublicEC2: # 퍼블릭 EC2 인스턴스 Type: AWS::EC2::Instance Properties: ImageId: 본인 ami ID InstanceType: t2.micro KeyName: !Ref KeyName Tags: - Key: Name Value: CloudNeta-Public-EC2 NetworkInterfaces: - DeviceIndex: 0 SubnetId: !Ref CloudNetaPublicSN GroupSet: - !Ref CloudNetaSecurityGroup AssociatePublicIpAddress: true CloudNetaPrivateEC2: # 프라이빗 EC2 인스턴스 Type: AWS::EC2::Instance Properties: ImageId: 본인 ami ID InstanceType: t2.micro KeyName: !Ref KeyName Tags: - Key: Name Value: CloudNeta-Private-EC2 NetworkInterfaces: - DeviceIndex: 0 SubnetId: !Ref CloudNetaPrivateSN GroupSet: - !Ref CloudNetaSecurityGroup UserData: Fn::Base64: !Sub | #!/bin/bash ( echo "qwe123" echo "qwe123" ) | passwd --stdin root sed -i "s/^PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config sed -i "s/^#PermitRootLogin yes/PermitRootLogin yes/g" /etc/ssh/sshd_config service sshd restart
visual studio code를 열어, 해당 코드를 입력 한 템플릿 파일을 만들어준다.
꼭! 파일 확장명은 .yml or .yaml 로 저장
CloudFormation - 스택 생성
템플릿 파일을 올려준다.
인스턴스에서 Public, Private 인스턴스 둘 다 생성 되어있는지 확인
2. 퍼블릭 인스턴스 웹 접속
Xshell에서 퍼블릭 인스턴스 ip 주소를 넣은 후 연결한다.
sudo su - : root로 전환
yum -y install httpd : httpd 설치
vim /var/www/html/index.html : /var/www/html/index.html 편집기 오픈
이후 원하는 내용으로 html 코드 입력
systemctl restart httpd : httpd 재부팅
퍼블릭 ip 주소로 웹 접속이 잘 되면 실습 성공
(뭐가 그리 힘들었니 과거의 나야 ,, ㅎㅎ)
'AWS' 카테고리의 다른 글
[AWS] 콘솔로 EC2 인스턴스를 제작한 경우, 추가 데이터 넣기 (0) 2023.01.11 [AWS] CloudFormation을 활용하여 퍼블릭, 프라이빗 인스턴스 구성 - 2 (프라이빗 인스턴스) (1) 2023.01.10 [AWS] 프라이빗 서브넷 VPC 구성 (0) 2023.01.10 [AWS] 퍼블릭 서브넷 VPC 구성 (VPC, 서브넷, 라우팅 테이블, 인터넷 게이트웨이, 보안그룹 등) (0) 2023.01.10 [AWS] CloudFormation (0) 2023.01.10