[Hand-on-labs] Creating an Amazon Virtual Private Cloud (VPC) with AWS CloudFormation


[AWS CloudFormation]

- AWS CloudFormation의 샘플 템플릿을 사용

- 애플리케이션을 실행하는 데 필요한 AWS 리소스 및 관련 종속성 또는 런타임 매개 변수를 설명하는 템플릿을 직접 만들 수 있다.

- AWS Management Console, AWS Command Line interface 또는 API를 사용하여 템플릿 및 관련 자원 콜렉션 (스택)을 배치하고 업데이트할 수 있다.


[Amazon Virtual Private Cloud(VPC)]

- Amazon VPC(Virtual Private Cloud)를 사용하면 가상 네트워크 내에서 리소스를 시작할 수 있는 AWS 클라우드의 논리적으로 격리 된 섹션을 프로비저닝 할 수 있다.

- 자체 IP 주소 범위 선택, 서브넷 작성 및 라우트 테이블 및 네트워크 게이트웨이 구성을 포함하여 가상 네트워킹 환경을 제어할 수 있다.


- 가상 사설망의 네트워크 구성을 사용자 정의 방법으로 설정할 수 있다.

- 웹 서버에 대해 public-facing subnet을 만들어 데이터베이스 또는 어플리케이션같은 백엔드 시스템을 인터넷 엑세스없이 private-facing subnet에 배치할 수 있다.

- Security Group 및 Network Access Control lists을 비롯한 여러 계층의 보안을 활용하여 각 서브넷의 Amazon EC2 인스턴스에 대한 액세스를 제어할 수 있다.


[Task 1: Deploy a Stack using AWS CloudFormation]

- CloudFormation 템플릿(vpc-1.yaml)을 이용하여 Stack을 생성한다.


[Task 2: Examine the VPC]


작성된 템플릿으로 생성된 VPC resource를 검사

 - Amazon VPC

 - Internet Gateway

 - Two Subnets

 - Two Route Tables


*이러한 리소스는 모두 하나의 Availability Zone 내에 있다.

*Availability Zone은 Region 내에 독립된 위치에 있으며 하나 이상의 Data center로 구성된다.



VPC를 만든 CloudFormation 템플릿 코드

 - CidrBlock: VPC와 관련된 IP 주소 범위

 - EnableDnsHostnames: DNS 이름을 Amazon EC2 인스턴스와 연결하도록 VPC를 구성

 - Tags: Resources와 관련된 이름을 추가

AWSTemplateFormatVersion: 2010-09-09 

Description: Deploy a VPC 

Resources: 
    VPC: 
        Type: AWS::EC2::VPC 
        Properties: CidrBlock: 10.0.0.0/16 
        EnableDnsHostnames: true 
        Tags: 
        - Key: Name 
          Value: Lab VPC


[Select Internet Gateway]

 - Internet Gateway는 사용자의 VPC와 인터넷의 인스턴스 간의 통신을 가능하게 하는 수평 확장, 중복, 고가용성 VPC 구성 요소이다.

 - 따라서 네트워크 트래픽에 가용성 위험이나 대역폭 제약을 부과하지 않는다.

 - Internet Gateway는 인터넷 라우팅 트래픽에 대한 VPC 경로 테이블에 대상을 제공

 - 공용 IPv4 주소가 할당된 인스턴스에 대해 NAT(Network Tanslate)를 수행하는 두 가지 용도로 사용된다.


Internet Gateway를 만든 CloudFormation 템플릿 코드

    InternetGateway: 

        Type: AWS::EC2::InternetGateway 

        Properties: 

            Tags: 

            - Key: Name 

              Value: Lab Internet Gateway


관리 콘솔에서 Internet Gateway가 VPC에 연결되어 있음을 보여주는 CloudFormation Template Code

    AttachGateway: 

    Type: AWS::EC2::VPCGatewayAttachment 

    Properties: 

        VpcId: !Ref VPC 

        InternetGatewayId: !Ref InternetGateway


[Select Subnet]

 - Public Subnet

     - 인터넷 게이트웨이를 통해 인터넷에 연결되며 공개적으로 액세스 할 수 있어야 하는 리소스에서 사용할 수 있다.


 - Private Subnet

     - 인터넷에 연결되어 있지 않다.

 - 이 서브넷의  모든 리소스는 인터넷을 통해 접근할 수 없으므로 이러한 리소스 주위에 추가적인 보안을 제공한다.


 - 서브넷을 생성한 CloudFormation 템플릿 코드

 - Vpcid:  서브넷을 포함하는 VPC를 나타낸다.

 - CidrBlock: 서브넷에 할당 된 IP 주소의 범위

 - Availability Zone: Region 내에 물리적인 위치가 서브넷을 포함해야하는지 정의

    PublicSubnet1: 
        Type: AWS::EC2::Subnet 
        Properties: 
            VpcId: !Ref VPC 
            CidrBlock: 10.0.0.0/24 
            AvailabilityZone: !Select 
                - '0' 
                - !GetAZs '' 
            Tags: 
                - Key: Name 
                  Value: Public Subnet 1 
    PrivateSubnet1: 
        Type: AWS::EC2::Subnet 
        Properties: 
            VpcId: !Ref VPC 
            CidrBlock: 10.0.1.0/24 
            AvailabilityZone: !Select 
                - '0' 
                - !GetAZs '' 
            Tags: 
                - Key: Name 

                  Value: Private Subnet 1

* Availability Zone은 ! Select라는 함수와 !GetAZs 라는 함수를 사용한다.

* 이 코드는 영역 내의 AZ 목록을 검색하고 목록에서 첫 번째 요소를 참조한다.


* 이 방법으로 템플릿은 가용성 영역을 템플릿에 하드 코딩하지 않고 런타임에 가용성 영역 목록을 검색하기 때문에 모든 영역에서 사용할 수 있다.


[Route Table]
 - 라우팅 테이블은 트래픽을 서브넷 안밖으로 유도하는 데 사용된다.
 - VPC(10.0.0,0/16) 내의 트래픽의 경우 트래픽을 로컬로 라우팅한다.
 - 인터넷으로 가는 트래픽 (0.0.0.0/0)의 경우 트래픽을 인터넷 게이트웨이(IGW)로 라우팅한다.

 - Public Route Table을 생성한 CloudFormation 템플릿 코드
    PublicRouteTable: 
        Type: AWS::EC2::RouteTable 
        Properties: 
            VpcId: !Ref VPC 
            Tags: 
                - Key: Name 
                  Value: Public Route Table
* Private Route Table에도 비슷한 코드가 있다.


 - Private Route Table 내에서 인터넷에 대한 경로를 정의한 코드 

 - RouteTableId: 경로를 소유한 RouteTable을 나타낸다.

 - DestivationCidrBlock: 라우팅 규칙의 IP 주소 범위를 정의, 0.0.0.0/0은 인터넷에 연결된 트래픽을 나타낸다.

 - GatewayId는 트래픽을 라우팅 할 위치를 정의, 이 경우 이전에 정의된 Internet Gateway이다.

    PublicRoute: 
        Type: AWS::EC2::Route 
        Properties: 
            RouteTableId: !Ref PublicRouteTable 
            DestinationCidrBlock: 0.0.0.0/0 

            GatewayId: !Ref InternetGateway

* 현재 Route는 Public Route Table을 위해서 설정되어있다.


[Select Subnet Connect]

 - Public Route Table이 Public Subnet 1과 연결되어 있음을 보여준다.

 - Route Table은 여러 개의 서브넷과 연관 될 수 있으며 각 연결에는 명시적 연결이 필요하다.

    PublicSubnetRouteTableAssociation1: 
        Type: AWS::EC2::SubnetRouteTableAssociation 
        Properties: 
            SubnetId: !Ref PublicSubnet1 

            RouteTableId: !Ref PublicRouteTable

* Public Subnet1은 Public Route Table과 연결되어 있음을 선언한다.


[CloudFormation]

 - 새로운 CloudFormation 템플릿으로 스택을 업데이트

 * 두개의 Route Table Associations가 추가되어 해당 서브넷을 해당 Route Tabl과 연결함을 확인

 - 출력 탭을 클릭

* 원래 가용성 영역과 다른 값을 가진 추가 가용성 영역이 표시 됨을 확인


[VPC]

 - 서브넷 클릭하여 네 개의 서브넷이 표시됨을 확인

 - 각각 클릭하여 Route Table 탭에서 설정을 검토

* VPC 는 고 가용성 응용 프로그램을 지원하도록 업데이트


[Task 4: Viewing a Stack in CloudFormation Designer]

 - CloudFormation -> Lab Stack 클릭 -> template 탭 클릭


 - Designer에서 보기 클릭

{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "Deploy a VPC",
    "Resources": {
        "VPC": {
            "Type": "AWS::EC2::VPC",
            "Properties": {
                "CidrBlock": "10.0.0.0/16",
                "EnableDnsHostnames": true,
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "Lab VPC"
                    }
                ]
            }
        },
        "InternetGateway": {
            "Type": "AWS::EC2::InternetGateway",
            "Properties": {
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "Lab Internet Gateway"
                    }
                ]
            }
        },
        "AttachGateway": {
            "Type": "AWS::EC2::VPCGatewayAttachment",
            "Properties": {
                "VpcId": {
                    "Ref": "VPC"
                },
                "InternetGatewayId": {
                    "Ref": "InternetGateway"
                }
            }
        },
        "PublicSubnet1": {
            "Type": "AWS::EC2::Subnet",
            "Properties": {
                "VpcId": {
                    "Ref": "VPC"
                },
                "CidrBlock": "10.0.0.0/24",
                "AvailabilityZone": {
                    "Fn::Select": [
                        "0",
                        {
                            "Fn::GetAZs": ""
                        }
                    ]
                },
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "Public Subnet 1"
                    }
                ]
            }
        },
        "PrivateSubnet1": {
            "Type": "AWS::EC2::Subnet",
            "Properties": {
                "VpcId": {
                    "Ref": "VPC"
                },
                "CidrBlock": "10.0.1.0/24",
                "AvailabilityZone": {
                    "Fn::Select": [
                        "0",
                        {
                            "Fn::GetAZs": ""
                        }
                    ]
                },
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "Private Subnet 1"
                    }
                ]
            }
        },
        "PublicSubnet2": {
            "Type": "AWS::EC2::Subnet",
            "Properties": {
                "VpcId": {
                    "Ref": "VPC"
                },
                "CidrBlock": "10.0.2.0/24",
                "AvailabilityZone": {
                    "Fn::Select": [
                        "1",
                        {
                            "Fn::GetAZs": ""
                        }
                    ]
                },
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "Public Subnet 2"
                    }
                ]
            }
        },
        "PrivateSubnet2": {
            "Type": "AWS::EC2::Subnet",
            "Properties": {
                "VpcId": {
                    "Ref": "VPC"
                },
                "CidrBlock": "10.0.3.0/24",
                "AvailabilityZone": {
                    "Fn::Select": [
                        "1",
                        {
                            "Fn::GetAZs": ""
                        }
                    ]
                },
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "Private Subnet 2"
                    }
                ]
            }
        },
        "PublicRouteTable": {
            "Type": "AWS::EC2::RouteTable",
            "Properties": {
                "VpcId": {
                    "Ref": "VPC"
                },
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "Public Route Table"
                    }
                ]
            }
        },
        "PublicRoute": {
            "Type": "AWS::EC2::Route",
            "Properties": {
                "RouteTableId": {
                    "Ref": "PublicRouteTable"
                },
                "DestinationCidrBlock": "0.0.0.0/0",
                "GatewayId": {
                    "Ref": "InternetGateway"
                }
            }
        },
        "PublicSubnetRouteTableAssociation1": {
            "Type": "AWS::EC2::SubnetRouteTableAssociation",
            "Properties": {
                "SubnetId": {
                    "Ref": "PublicSubnet1"
                },
                "RouteTableId": {
                    "Ref": "PublicRouteTable"
                }
            }
        },
        "PublicSubnetRouteTableAssociation2": {
            "Type": "AWS::EC2::SubnetRouteTableAssociation",
            "Properties": {
                "SubnetId": {
                    "Ref": "PublicSubnet2"
                },
                "RouteTableId": {
                    "Ref": "PublicRouteTable"
                }
            }
        },
        "PrivateRouteTable": {
            "Type": "AWS::EC2::RouteTable",
            "Properties": {
                "VpcId": {
                    "Ref": "VPC"
                },
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "Private Route Table"
                    }
                ]
            }
        },
        "PrivateSubnetRouteTableAssociation1": {
            "Type": "AWS::EC2::SubnetRouteTableAssociation",
            "Properties": {
                "SubnetId": {
                    "Ref": "PrivateSubnet1"
                },
                "RouteTableId": {
                    "Ref": "PrivateRouteTable"
                }
            }
        },
        "PrivateSubnetRouteTableAssociation2": {
            "Type": "AWS::EC2::SubnetRouteTableAssociation",
            "Properties": {
                "SubnetId": {
                    "Ref": "PrivateSubnet2"
                },
                "RouteTableId": {
                    "Ref": "PrivateRouteTable"
                }
            }
        }
    },
    "Outputs": {
        "VPC": {
            "Description": "VPC",
            "Value": {
                "Ref": "VPC"
            }
        },
        "AZ1": {
            "Description": "Availability Zone 1",
            "Value": {
                "Fn::GetAtt": [
                    "PublicSubnet1",
                    "AvailabilityZone"
                ]
            }
        },
        "AZ2": {
            "Description": "Availability Zone 2",
            "Value": {
                "Fn::GetAtt": [
                    "PublicSubnet2",
                    "AvailabilityZone"
                ]
            }
        }
    }

}




[Task 5: Delete the Stack]

 - CloudFormation 삭제로 VPC 삭제 됨을 확인


[결론]

  1. Amazon VPC를 생성하는 AWS CloudFormation 템플릿 배포
  2. 템플릿의 구성 요소를 검사
  3. CloudFormation 스택 업데이트
  4. AWS CloudFormation Designer를 사용하여 템플릿 검토
  5. CloudFormation 스택 삭제


[Hands-on-labs] Maintaining High Availability with Auto Scaling (for Linux)


[Contents]

- Command-line을 이용하여 launch configuration 만들기

- Command-line을 이용하여 Auto Scaling Group 만들기

- 인스턴스 리소스가 높거나 낮을 때 Auto Scaling notifications 설정하기

- 자원 활용량의 변화에 따라 현재 실행중인 인스턴스의 수를 확장하거나 축소하는 정책만들기



 - lab-details.txt

# 해당 Lab을 수행하기 위한 정보

ElasticLoadBalancer, qls-55734-ElasticL-M2AV8N20P0MR

AMIId, ami-f0091d91

KeyName, qwikLABS-L251-5573440

AvailabilityZone, us-west-2b

SecurityGroup, qls-5573440-09357917d5bf6429-Ec2SecurityGroup-A27EJ3FAV8GL


[Task 1: Configure AWS CLI]

 - configure command

$ aws configure


[Task 2: Create a Launch Configuration]

 - Auto Scaling으로 새 Server를 추가할 때 시작될 AMI(Amazon Machine Image)를 지정

- Image-id: 64비트 Amazon Linux AMI

- 인스턴스 유형: EC2 인스턴스 유형

- key-name: EC2 key-pair 이름

- security-groups: EC2 security group

- launch-configuration-name: Auto Scaling Launch Configuration 이름

aws autoscaling create-launch-configuration --image-id <PasteYourAMIIdHere> --instance-type t2.micro --key-name <PasteYourKeyNameHere> --security-groups <PasteYourSecurityGroupHere> --user-data file:///home/ec2-user/as-bootstrap.sh --launch-configuration-name lab-lc


[Task 3: Create an Auto Scaling Group]

 - Auto Scaling Group 만들기 (그룹 크기 1 ~ 4로 지정)

- Availability Zone: us-west-2

- launch-configuration-name: lab-lc

- ElasticLoadBalancer: qls-55734-ElasticL-M2AV8N20P0MR

- max-size: 4

- min-size: 1

aws autoscaling create-auto-scaling-group --auto-scaling-group-name lab-as-group --availability-zones <PasteYourAvailabilityZoneHere> --launch-configuration-name lab-lc --load-balancer-names <PasteYourElasticLoadBalancerHere> --max-size 4 --min-size 1


[Task 4: Verifying Auto Scaling]

 - Auto Scaling 서버가 제대로 돌아가는지 테스트

 - Service -> EC2 -> Instance

 - 새로이 만들어진 인스턴스의 public DNS(IPv4)로 접근하여 인스턴스가 실행 중인지 확인

 - 테스트 1: 새로운 인스턴스를 종료

- Auto Scaling 크기가 최소 크기보다 작은 것을 감지 할 경우 몇 분안에 새로운 인스턴스가 나타난다.

 - 테스트 2: 또 다른 새로운 인스턴스가 나타났을경우 다시 중지를 시도

- Auto Scaling은 몇분 후에 인스턴스가 응답하지 않는 것을 감지하고 인스턴스를 자동으로 종료하고 대체 인스턴스를 시작


 * Auto Scaling의 설정으로 최소 인스턴스를 유지하게 됨을 확인


 - Auto Scaling 인스턴스 생성시 GroupName 태그를 자동으로 만들고 채워 Instnace를 확인할 수 있다.

- key: Name

- Value: AS-Web-Server

aws autoscaling create-or-update-tags --tags "ResourceId=lab-as-group, ResourceType=auto-scaling-group, Key=Name, Value=AS-Web-Server, PropagateAtLaunch=true"


 - 테스트 3: 새로운 인스턴스를 다시 중지

- Auto Scaling의 설정으로 최소 인스턴스보다 현재 존재하는 인스턴스 수가 낮을 때 GroupName의 값을 채운 또 다른 인스턴스가 생성

- 새 인스턴스의 이름이 AS-Web-Server인지 확인


[Task 5: Create Auto Scaling Notifications]


 - Services -> Simple Notification Service

- Create topic -> SNS topic

- Topic details 페이지 -> Create subscription

- Select Protocol Email, Endpoint: 알림 받을 이메일 주소

- Subscription 생성 후 Simple Notification Service의 주제 탭 선택 -> 해당하는 Amazon Resource Number(ARN)를 밑에 명령어에 기입


 - 서버의 Linux Command-line에서 지원되는 Auto Scaling Alert 유형 조회

[ec2-user@ip-172-31-42-40 ~]$ aws autoscaling  describe-auto-scaling-notification-types


{

    "AutoScalingNotificationTypes": [

        "autoscaling:EC2_INSTANCE_LAUNCH",

        "autoscaling:EC2_INSTANCE_LAUNCH_ERROR",

        "autoscaling:EC2_INSTANCE_TERMINATE",

        "autoscaling:EC2_INSTANCE_TERMINATE_ERROR",

        "autoscaling:TEST_NOTIFICATION"

    ]

}


 - Configuration을 확인하는 테스트 알림 메일 확인

aws autoscaling put-notification-configuration --auto-scaling-group-name lab-as-group --topic-arn <PasteTheTopicARNHere> --notification-types autoscaling:EC2_INSTANCE_LAUNCH autoscaling:EC2_INSTANCE_TERMINATE


[Task 6: Create Auto Scaling Policies]


 - Create Scaling up Policy

aws autoscaling put-scaling-policy --policy-name lab-scale-up-policy --auto-scaling-group-name lab-as-group --scaling-adjustment 1 --adjustment-type ChangeInCapacity --cooldown 300 --query 'PolicyARN' --output text


 - Create Scaling down Policy

aws autoscaling put-scaling-policy --policy-name lab-scale-down-policy --auto-scaling-group-name lab-as-group --scaling-adjustment -1 --adjustment-type ChangeInCapacity --cooldown 300 --query 'PolicyARN' --output text


[Task 7: Wrapping Up]


 - Viewing Auto Scaling activities (log 확인)

aws autoscaling describe-scaling-activities --auto-scaling-group-name lab-as-group


[부스트코스] 웹 프로그래밍 프로젝트 시 느낀 필요한 개념


[JS]

 - JS 버전별 차이

 - JS 변수 타입

 - JS 매커니즘

 - polyfill

 - 함수형 자바스크립트

 - Bubbling & Capturing

 - Templating

 - 비동기 통신으로 요청한 데이터를 재사용할 방법

 - 그 외 등등..

 - JS Debug (https://developers.google.com/web/tools/chrome-devtools/javascript/?hl=ko)

 - 배열의 함수형 메소드 (map, filter, reduce)

 - 객체형 자바스크립트

 - jQuery

 - handlebar

 - Clean Code

 - Carousel Slide ** (이해는 되는데.. 구현이 어설픔)


 * 이제 부터 알아가야 함...


[Spring Framework]

 - Spring Config (XML, Java)

 - Spring Layered Architecture

 - AOP

 - Design Pattern (Singleton)

 - Front Controller (DispatcherServlet)

 - XML Config -> Java Config (https://www.luckyryan.com/2013/02/07/migrate-spring-mvc-servlet-xml-to-java-config/)

 - 설정의 분리

 - MessageConvertor



[BoostCourse] 프로젝트 4. 예약관리 시스템: 상세페이지 (FE)


 - 이전 글


PJT4. 예약관리 시스템: 상세페이지


[프로젝트 4-2 (FE)에 대한 피드백 정리]

 - 필요한 요구사항은 모두 충족하였다.

 - 디버깅 시 작성했던 코드는 테스트 후 삭제하는 습관을 갖는다.

 - 코딩컨벤션을 되새겨보아야 한다. "setXX()이라는 메서드 명이 하는 일"



[코딩 컨벤션] 

 - setXXX() 함수의 역할이 무엇인지 생각해 보아야 한다.



[불필요한 코딩]

 - 테스트를 위한 코딩은 삭제해야 한다.

 - 실제 개발 시에도 배포할 때는 테스트 코드는 삭제



[일관성 있는 코딩 및 불필요한 코딩]

 - 위쪽에서와 달리 여기서 변수 선언 및 초기화를 했다.

 - 굳이 할 필요 없는 코드 였기 때문에 삭제 해야 했다.





[AWS Certification + 서버관리 마스터] 3주차 VPC(Virtual Private Cloud)


[Course Outline]

 1. IAM & EC2

 2. EC2 : Elastic Load Balancing(ELB) & Auto Scaling

 3. VPC

 4. Database

 5. Storage

 6. Application Services

 7. AWS Well-Architected Framework & DevOps

 8. Presentation & Review


 - Amazon Virtual Private Cloud(Amazon VPC)는 사용자의 AWS 계정 전용 가상 네트워크이다.

 - VPC는 AWS 클라우드에서 다른 가상 네트워크와 논리적으로 분리되어 있다.


[VPC]

 - One default VPC per AWS region

 - Block sizes must be between a /16 netmask and /28 netmask

 - Main CIDR range cannot be modified

 - Tenancy: Default (Shared) vs Dedicated (Single)

 - By default, a VPC security group, a NACL, a routing table, a route for local

 - Carefully choose VPC CIDR range to avoid network address conflict if connecting to other networks through VPN or VPC peering

 - Default VPC can be deleted


[Subnet]

 - A logical subdivision of an IP network(VPC)

 - Reside in an Availability Zone

 - Subnet CIDR block can be the same as VPC CIDR block

 - Subnet CIDR block cannot be smaller than /28 netmask

 - The first four IP addresses and the last IP address in each subnet CIDR block are not available

 - https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/what-is-amazon-vpc.html

 - Public Subnet mask vs Private Subnet mask? What's the difference?


[Route Table]

 - VPC has an implicit router

 - VPC automatically comes with the main route table

 - Can modify the main table and create a new custom route table

 - Each subnet must be associated with a routing table

 - If you don't explicitly associate a subnet with a particular route table, the subnet is implicitly associated with the main route table.

 - Each route in a table specifies a destination CIDR and a target

 - Internet Gateway, an egress-only Internet gateway, a virtual private gateway, a NAT device, a peering connection, or a VPC endpoint

 - Use the most specific route that matches the traffic to determine how to route the traffic


[Internet Gateway]

 - Allows communication between instances in VPC and the Internet

 - Horizontally scaled, redundant, and highly available

 - Only One Internet Gateway per VPC


[Egress-Only Internet Gateway]

 - Allows outbound communication over IPv6 from instances in VPC to the Internet

 - Prevents the Internet from initiating an IPv6 connection with instances

 - To allow outbound-only Internet communication over IPv4, use a NAT gateway

 - Horizontally scaled, redundant, and highly available

 - Only One Egress-Only Internet Gateway per VPC


[NAT Gateway]

 - Allows outbound communication over IPv6 from instances in VPC to the Internet

 - Prevents the Internet from initiating an IPv6 connection with instances

 - Horizontally scaled but not redundant and highly available

 - Can Create More Than One NAT Gateway Per Subnet

 - Require an Elastic IP and an Internet Gateway


[NAT Instance]

 - Allows outbound communication over IPv4 from instances in VPC to the internet

 - Prevents the internet from initiating an IPv4 connection with instances

 - Not horizontally scaled, redundant and highly available

 - Can Create More Than One NAT Instance Per Subnet

 - Require a Public IP and internet Gateway

 - ** Must disable source/destination checks on NAT instances **

 - AWS provides custom AMI configured NAT functionality


[Bastion Host]

 - Adding the extra layer of security to instances in private and public subnets


[VPC EndPoint]

 - Enables instances to privately connect your VPC to supported AWS services and VPC endpoint services powered by Private Link without requiring an internet gateway, NAT device, VPN connection, or AWS Direct Connect connection

 - Instances in VPC do not require public IP addresses to communicate with resources in service

 - Traffic between VPC and the other service does not leave the Amazon network

 - Horizontally scaled, redundant and highly available


[VPC Peering]

 - A networking connection between two VPCs that enables routing traffic between them using private addresses

 - Instances in ether VPC can communicate with each other as fi they are within the same network.

 - Can create a VPC peering connection between your own VPCs, or with a VPC in another AWS account.
   The VPCs can be in different regions

 - Not support Transitive routing


[Network ACLs]

 - Subnet level firewall for controlling traffic in and out of subnets

 - Default nACL allows all inbound and outbound traffic by default

 - Custom nACL denies  all inbound and outbound traffic by default

 - Each subnet must be associated with an nACL

 - If you don't explicitly associate a subnet with a particular nACL, the subnet is  implicitly associated with the default nACL.

 - Contains a numbered list of rules that we evaulate in order, starting with the lowest numbered rule

 - Separate inbound and outbound rules

 - Stateless; responses to allowed inbound traffic are subject to the rules for outbound traffic (and vice versa)



[Network ACLs vs Security Group]


[VPC Flow Logs]

 - Capture information about the IP traffic going to and from network interfaces in VPC

 - Can be published to Amazon CloudWatch Logs and Amazon S3

 - https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/flow-logs.html



[Homework]

Qwiklabs

 - Introduction to Amazon Relational Database Service (RDS)

 - Introduction to Amazon DynamoDB

 - Hosting WordPress Using Amazon S3

 - Using Open Data with Amazon S3


Reading

주제 

사이트 

 VPC QnA

 https://aws.amazon.com/ko/vpc/faqs/

 AWS Single VPC Design

 https://aws.amazon.com/ko/answers/networking/aws-single-vpc-design/

 Recommended Network ACL Rules for Your VPC

 https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-recommended-nacl-rules.html

Architecting for the Cloud

 http://d1.awsstatic.com/whitepapers/AWS_Cloud_Best_Practices.pdf


 - 기본적으로 인터넷 게이트웨이가 연결되어 있는 VPC


 - 퍼블릭 IPv4가 없는 구조



 - 인터넷 게이트웨이와 Elastic IP를 설정하여 인터넷 엑세스가 가능하게 만든 구조


- Private Gateway를 VPC와 Custom Gateway를 추가하여 AWS Cloud 확장


 - VPC endpoint를 사용하여 internet gateway를 거치지 않고 직접적으로 연결



[AWS Certification] Working with Elastic Load Balancing


 - Elastic Load Balancing을 사용하여 단일 Avilability Zone의 여러 Amazon EC2(Elastic Compute Cloud) 인스턴스에 트래픽을 로드 밸런싱하기

[Task 1: Lanch Web Servers]

 - EC2 서비스

 - AMI 생성

 - 인스턴스 갯수 설정

 - User Data를 통해 인스턴스 생성

 - 보안 그룹 설정

 - HTTP 접근 설정


[Task 2: Connect to Each Web Server]

 - Public DNS로 접근 확인

 - 각 인스턴스에 접근이 가능한지 확인


[Task 3: Create a Load Balancer]

 - 로드밸런스 생성

 - VPC 설정

 - Target 설정 (로드밸런스가 바라보는 Target 설정)

 - 로드밸런스의 DNS 접근으로 두 인스턴스에 접근이 가능한지 확인


[Task 4: View Elastic Load Balancing Cloud Metrics]



[BoostCourse] 프로젝트 4. 예약관리 시스템: 상세페이지 (FE)


 - 이전 글


 - 다음 글 



PJT4. 예약관리 시스템: 상세페이지


[프로젝트 4-2 (FE)에 대한 피드백 정리]

 - 무한슬라이드로 구현을 안해서 Fail !!




[개발 스펙관련..]

 - ES 버전차이에 대한 공부가 안되어있어서 최대한 낮은 버전의 함수와 방식으로 프로젝트를 작성하고 있다.

 - ES6는 찬찬히 하기로 한다...

 - var, const, let의 차이


[JS 경로 이동 함수관련..]

 - a 태그로 어떠한 기능이 구현이 되어 있을 때 href로 이동하기보다 javascript로 기능을 구현하고 싶어서 이런식으로 작성 해봤다.

 - 이런 방법과는 달리 controller에 경로와 파라미터를 보내기 위한 방법이 다른 내용이 있을지도 모른다. (replace("경로")) 라거나..

 - JavaScript로 구현하는 경로 이동


[불필요한 주석관련..]

 - 프로젝트 시작하기 전에 코드가 수정이 되어야 하는 곳에 주석을 작성해놨었다.

 - 구현 후에는 TODO를 지우고 내가 수정했다고 다른 방식으로 표시하도록 하자


[개발 스펙 관련..]

 - 순수 자바스크립트로 프로젝트를 진행하고나서 리펙토링으로 제이쿼리를 사용해보도록한다.







[AWS Certification + 서버관리 마스터] EC2 : Elastic Load Balancing(ELB) & Auto Scaling


[Course Outline]

 1. IAM & EC2

 2. EC2: Elastic Load Balancing(ELB) & Auto Scaling

 3. VPC

 4. Database

 5. Storage

 6. Application Services

 7. AWS Well-Architected Framework & DevOps

 8. Presentation & Review


[Elastic Load Balancer]

 - Elastic: Auto scaling

 - Secure: SSL/TLS decryption, Firewall, VPC, Authentication

 - Flexible: Hybrid load balancing

 - Integrated: WAF, CloudFront, Route53, CloudWatch, ECS, ACM

 - Cost-effective: AWS managed service


[Elastic Load Balancer - Type]
 - Class Load Balancer
- HTTP, HTTPS and TCP
- Layer 4 & 7
- Previous (Depreciated) generation
 - Application Load Balancer
- HTTP and HTTPS
- Layer 7
 - Network Load Balancer
- TCP
- Layer 4

[Application Load Balancer]

 - Listener

 - Availability Zones

 - SSL Certificate

 - Target Group

 - Health Check

 - Target

 - Rules


[Auto Scaling Group]

- Launch Configuration

- Launch Template

- Manual Scaling

- Scheduled Scaling

- Dynamic Scaling

- Cooldown

- Health Check Grace Period

- Health Check Type

- CloudWatch Alarm


[Qwiklabs]

 - Creating an Amazon Virtual Private Cloud (VPC) with AWS CloudFormation

 - Building Your First Amazon Virtual Private Cloud (VPC)

 - Introduction to Amazon Relational Database Service (RDS) (Linux) – optional

 - Introduction to Amazon DynamoDB – optional

 - Programming Amazon SQS and Amazon SNS with .NET – Advanced only


[References]

 - https://aws.amazon.com/elasticloadbalancing/faqs/

 - https://aws.amazon.com/blogs/compute/fleet-management-made-easy-with-auto-scaling/

+ Recent posts