AWS CloudFormation으로 VPC 및 서브넷 제작
10279 단어 AWSCloudFormationtech
AWS에서 제작할 때 CloudFormation을 사용하는 경우가 있습니다.
매번 쓰는 법을 잊어버릴 때마다 반복해서 조사하기 때문에 기본적인 구성을 정리해 봅시다.
이번에 준비한 구성.
템플릿 파일 준비
임의의 폴더에 임의의 이름으로 yml 파일을 만듭니다.
항목마다 하나씩 게재되지만, 마지막에는 전문도 게재되니 안심하세요.
이번에는 cf-vpc-subnet 테스트.나는 그것을yml라고 명명했다.
형식 버전 지정
그럼 제가 템플릿 파일을 만들게요.
템플릿의 형식 버전을 시작 부분에 지정합니다.
"2010-09-09"만 지정할 수 있기 때문에 이렇게 적어 둡니다.
AWSTemplateFormatVersion: 2010-09-09
VPC 설정
다음부터 템플릿 파일에 추가하십시오.
템플릿 파일에는 Resources 산하가 만들고자 하는 자원, 템플릿 내 유일한 이름(Logical ID), CIDR 블록 등이 설정된다.
...
Resources:
CfVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.1.0.0/16
Tags:
-
Key: Name
Value: CfVPC
또한 CloudFormation 템플릿 파일에 태그를 지정할 수 있습니다.서브넷 설정
그런 다음 방금 지정한 VPC에서 서브넷을 두 개 만듭니다.
하나는 공공 서브넷이고, 다른 하나는 개인 서브넷으로 흔히 볼 수 있는 설정이다.
...
CfPublicSubnet:
Type: AWS::EC2::Subnet
Properties:
CidrBlock: 10.1.1.0/24
MapPublicIpOnLaunch: true
VpcId: !Ref CfVPC
AvailabilityZone: ap-northeast-1a
Tags:
- Key: Name
Value: CfPrivateSubnet
CfPrivateSubnet:
Type: AWS::EC2::Subnet
Properties:
CidrBlock: 10.1.2.0/24
MapPublicIpOnLaunch: false
VpcId: !Ref CfVPC
AvailabilityZone: ap-northeast-1c
Tags:
- Key: Name
Value: CfPrivateSubnet
새로 나온 물건이 여러 개 있어요, VpcId란!Ref는 매우 중요한 내장 함수입니다.VPC ID로 어느 VPC 내에 서브넷을 만들지 지정하지만, 클라우드 포메이션에서 VPC를 만들지 않으면 ID를 알 수 없다.
템플릿에 설정된 Logical ID(리소스의 논리 ID)를 필터링합니다.Ref를 참조하면 VPC ID가 자동으로 일치합니다.
게다가 실패!Ref를 사용하면 참조자(VPC)가 서브넷과 같은 종속성 생성을 자동으로 처리합니다.
또한, MapublicIpOnLaunch는 AWS 관리 콘솔이'공용 IPv4 주소 자동 할당 사용'에서 선택되었는지에 해당한다.
공공 서브넷에서는 진짜이고, 개인 서브넷에서는 가짜다.
인터넷 게이트웨이 설정
인터넷 게이트웨이 정의
자원 유형으로만 지정하기 때문에 간단합니다.
...
CfInternetGateway:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value: CfInternetGateway
VPC에 인터넷 게이트웨이 연결
위에서 설명한 인터넷 게이트웨이를 CfVPC에 연결합니다.
병합 함수!Ref를 사용하여 VPC ID와 인터넷 Gateway ID를 지정합니다.
...
AttachCfInternetGateway:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
InternetGatewayId : !Ref CfInternetGateway
VpcId: !Ref CfVPC
그리고 여기서 시도해 보세요!Ref로 Cf인터넷Gateway를 지정하고 인터넷 게이트웨이를 잘 만들어서 부착하는 동작이기 때문이다.인터넷으로의 라우팅 설정(공통 서브넷)
다음 코스 준비해.우선 공공 서브넷 쪽에서 시작합니다.
루트 테이블 만들기(공용 서브넷)
자원 유형만 지정하기 때문에 간단합니다.
...
CfRouteTableForPublicSubnet:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref CfVPC
Tags:
- Key: Name
Value: CfRouteTableForPublicSubnet
라우팅 정의(공통 서브넷)
위에서 설명한 루트 테이블을 시도해 보십시오!Ref에서 지정한 경우 인터넷 게이트웨이를 기본 게이트웨이 0.0.0/0의 수신자로 지정합니다.
...
CfRouteForPublicSubnet:
Type: AWS::EC2::Route
Properties:
RouteTableId: !Ref CfRouteTableForPublicSubnet
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref CfInternetGateway
루트 테이블 및 서브넷 링크(공통 서브넷)
위에서 생성한 루트 디렉토리는 서브넷과 연관되지 않으므로 루트 테이블을 공용 서브넷과 연관시킵니다.
...
CfAssocciateRouteTableForPublicSubnet:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
RouteTableId: !Ref CfRouteTableForPublicSubnet
SubnetId: !Ref CfPublicSubnet
인터넷으로 설정된 루트(개인 서브넷)
개인 서브넷의 서버가 업데이트 등을 위해 인터넷으로 가야 한다고 가정해 보자.
그러나 개인 서브넷은 직접 인터넷에 게시하지 않고 NAT 게이트웨이를 통해 게시한다.
NAT 게이트웨이용 Elasic IP 설정
NAT 게이트웨이에 Elasic IP가 할당되어 있는지 확인합니다.
...
NatGatewayEIP:
Type: AWS::EC2::EIP
Properties:
Domain: vpc
NAT 게이트웨이 생성
방금 지정한 Elastic IP를 설정하면서 공용 서브넷에 NAT 게이트웨이를 만듭니다.
...
CfNatGateway:
Type: AWS::EC2::NatGateway
Properties:
AllocationId:
Fn::GetAtt:
- NatGatewayEIP
- AllocationId
SubnetId: !Ref CfPublicSubnet
Tags:
- Key: Name
Value: CfNatGateway
루트 테이블 만들기(공용 서브넷)
공통 서브넷과 마찬가지로 자원 유형만 지정하면 됩니다.
...
CfRouteTableForPrivateSubnet:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref CfVPC
Tags:
- Key: Name
Value: CfRouteTableForPrivateSubnet
루트 정의(개인 서브넷)
위에서 설정한 NAT 게이트웨이를 개인 서브넷의 기본 게이트웨이로 지정합니다.
Ref! 의 참조 방법 등은 NAT 게이트웨이의 Logical ID를 참조하는 공통 서브넷과 같습니다.
...
CfRouteForPrivateSubnet:
Type: AWS::EC2::Route
Properties:
RouteTableId: !Ref CfRouteTableForPrivateSubnet
DestinationCidrBlock: 0.0.0.0/0
NatGatewayId: !Ref CfNatGateway
루트 테이블과 서브넷 링크 (개인 서브넷)
또한 공통 서브넷과 마찬가지로 루트 테이블과 루트 디렉토리를 연관시킵니다.
...
CfAssocciateRouteTableForPrivateSubnet:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
RouteTableId: !Ref CfRouteTableForPrivateSubnet
SubnetId: !Ref CfPrivateSubnet
템플릿 파일의 전체 텍스트
템플릿 파일은 여기까지이며 전체 텍스트로 다시 업로드됩니다.
AWSTemplateFormatVersion: 2010-09-09
Resources:
CfVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.1.0.0/16
Tags:
-
Key: Name
Value: CfVPC
CfPublicSubnet:
Type: AWS::EC2::Subnet
Properties:
CidrBlock: 10.1.1.0/24
MapPublicIpOnLaunch: true
VpcId: !Ref CfVPC
AvailabilityZone: ap-northeast-1a
Tags:
- Key: Name
Value: CfPrivateSubnet
CfPrivateSubnet:
Type: AWS::EC2::Subnet
Properties:
CidrBlock: 10.1.2.0/24
MapPublicIpOnLaunch: false
VpcId: !Ref CfVPC
AvailabilityZone: ap-northeast-1c
Tags:
- Key: Name
Value: CfPrivateSubnet
CfInternetGateway:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value: CfInternetGateway
AttachCfInternetGateway:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
InternetGatewayId : !Ref CfInternetGateway
VpcId: !Ref CfVPC
CfRouteTableForPublicSubnet:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref CfVPC
Tags:
- Key: Name
Value: CfRouteTableForPublicSubnet
CfRouteForPublicSubnet:
Type: AWS::EC2::Route
Properties:
RouteTableId: !Ref CfRouteTableForPublicSubnet
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref CfInternetGateway
CfAssocciateRouteTableForPublicSubnet:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
RouteTableId: !Ref CfRouteTableForPublicSubnet
SubnetId: !Ref CfPublicSubnet
NatGatewayEIP:
Type: AWS::EC2::EIP
Properties:
Domain: vpc
CfNatGateway:
Type: AWS::EC2::NatGateway
Properties:
AllocationId:
Fn::GetAtt:
- NatGatewayEIP
- AllocationId
SubnetId: !Ref CfPublicSubnet
Tags:
- Key: Name
Value: CfNatGateway
CfRouteTableForPrivateSubnet:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref CfVPC
Tags:
- Key: Name
Value: CfRouteTableForPrivateSubnet
CfRouteForPrivateSubnet:
Type: AWS::EC2::Route
Properties:
RouteTableId: !Ref CfRouteTableForPrivateSubnet
DestinationCidrBlock: 0.0.0.0/0
NatGatewayId: !Ref CfNatGateway
CfAssocciateRouteTableForPrivateSubnet:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
RouteTableId: !Ref CfRouteTableForPrivateSubnet
SubnetId: !Ref CfPrivateSubnet
CloudFormation 테스트
스택 만들기
이제 콘솔에서 템플릿 파일을 업로드하고 클라우드 포메이션으로 리소스를 만듭니다.
CloudFormation 콘솔로 이동하여 스택 만들기를 선택합니다.
선택한 후 새 리소스 사용(기본값)을 선택합니다.
화면 지시에 따라 템플릿 파일을 업로드합니다.
다음 화면에서 임의의 창고 이름을 지정합니다.
이 템플릿 파일에서 만든 자원 집합의 이름입니다.
다음 화면에서 자세히 설정할 수 있습니다.
레이블, IAM 스크롤 막대 등을 개별적으로 설정할 수 있지만, 이번에는 테스트인 만큼 공백에서 계속해 달라.
마지막으로 확인 화면이 표시되며 [스택 만들기]를 선택합니다.
스택 생성 시작 후
제작이 시작되면 상태가 업데이트되고 자원이 자동으로 끊임없이 제작됩니다.
(기술 오류 등의 이유로 리소스를 만들 수 없는 경우 모든 리소스가 자동으로 삭제되고 롤백되므로 안심하십시오.)
화면 오른쪽에 있는 루프 화살표(태그 내의 업데이트 버튼)를 누르면 리소스가 업데이트됩니다.
최종적으로 지정된 창고 이름, 즉 창고가 CREATE-COMPLETE라면 제작 완료
망했어.
[에셋] 탭에도 생성된 에셋이 나열되어 있으며 각 서비스의 콘솔을 통해서도 확인할 수 있습니다.
예를 들어 VPC는 지정된 태그Name으로 제작되었음을 확인할 수 있습니다.
스택 삭제
시험이 끝난 후 여분의 비용이 들지 않도록 자원을 삭제하세요.
클라우드 포메이션이 만든 리소스는 스택이라는 컬렉션으로 한 번에 삭제할 수 있어 편리하다.
CloudFormation의 콘솔 화면에서 [삭제]를 선택하면 이번 테스트에서 작성된 리소스를 모두 삭제할 수 있습니다.
총결산
하나하나의 자원을 코드로 관리하면 공사를 가볍게 할 수 있을 뿐만 아니라 자원의 설정과 구성은 누가 봐도 이해할 수 있는 것이 매우 중요하기 때문에 잘 이용하고 싶습니다.
이 IP 주소는 고정 값이지만 스택을 만들 때 콘솔에서 입력할 수 있습니다.
또한 라벨도 버전 이름을 입력하는 등 고정값으로 매번 조금씩 변경할 수 있다는 점은 다른 기회에 소개할 수 있다.
Reference
이 문제에 관하여(AWS CloudFormation으로 VPC 및 서브넷 제작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/tmasuyama1114/articles/aws-cloudformation-basics텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)