[Hands-On-Labs] Building Your First Amazon Virtual Private Cloud (VPC)


[Topic]

* Create an Amazon Virtual Private Cloud (VPC)

(VPC 생성)

* Create a public and private subnets

(Public 및 Pricate Subnet 만들기)

* Create an Internet gateway

(Internet Gateway 만들기)

* Create a Route Table and added route to the Internet

(Route Table만들고 인터넷 경로 추가)

* Create a security group for your web server to only allow HTTP traffic to your web server

(웹 서버가 웹서버에 대한 HTTP traffic만 허용하도록 Security Group을 만들기)

* Create a security group for your MySQL RDS instance to only allow MySQL traffic from your public subnets

(MySQL RDS 인스턴스에 대한 Security Group을 만들어 Public Subnet에서 MySQL 트래픽만 허용)

* Deploy a web server and a MySQL RDS instance

(웹 서버 및 MySQL RDS 인스턴스 배포)

* Configure your application to connect to your MySQL RDS instance

(MySQL RDS 인스턴스에 연결하도록 애플리케이션을 구성)


[Task 1: Create a VPC]


[Task 2: Create Your Public Subnets]


[Task 3: Create an Internet Gateway]


[Task 4: Create a Route Table, Add Routes, And Associate Public Subnets]


[Task 5: Create a Security Group for your Web Server]


[Task 6: Launch a Web Server in your Public Subnet]


[Task 7: Create Private Subnets for your MySQL Server]


[Task 8: Create a Security Group for your Database Server]


[Task 9: Create a Database Subnet Group]


[Task 10: Create an Amazon RDS Database]


[Task 11: Connect Your Address Book Application to your Database]


Conclusion

[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


[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]



[AWS Certification] Automating AWS Services with Scripting and the AWS CLI


 - AWS 서비스를 액세스하고 관리할 수 있는 세 가지 방법으로 다루어 자동화하는 방법 익히기

 

AWS Management Console: 이 콘솔은 Amazon S3 버킷 작업, Amazon EC2 인스턴스 실행 및 Amazon CloudWatch 알람 설정과 같은 AWS 작업을 수행하기 위한 직관적인 사용자 인터페이스를 제공


AWS CLI(Command Line Interface): AWS 서비스를 관리하기 위한 통합 도구로 Commend Line에서 여러 AWS 서비스를 제어하고 스크립트를 통해 자동화 할 수 있다.


AWS SDK(Software Development Kit): AWS는 다양한 프로그래밍 언어에 대한 SDK를 제공한다. SDK를 사용하면 S3 및 EC2 위에 응용프로그램을 구축할 수 있다.


Topics covered

 - Using the AWS CLI to access and manage AWS services from the command line

 - Using the AWS SDK to programmatically access and manage AWS services

 - Configuring security for the AWS CLI


[Task 1: Connect to your Linux EC2 instance]


 - Session에 Host name: PublicIP 입력

 - Connection에 SSH 메뉴 펼치기

 - Auth 클릭 후 Borwse에서 PPK파일 open

 - username: ec2-user


[Task 2: Three Ways to Access AWS]
 - Key Pair 생성
 - 

[Task 3: Access Amazon S3 with the AWS CLI]


 * Automating Amazon S3
    (CLI 작업을 통해 할 수 있는 유용한 작업)

 - Sending backups to Cloud
(클라우드로 백업 보내기)

 - Providing shared access to documents from multiple computers
(여러 컴퓨터의 문서에 대한 공유 액세스 제공)

 - Retrieving scripts and application code from a central repository
(중앙 레포지토리에서 스크립트 및 응용 프로그램 코드 검색)

 - Duplicating data between different regions
(다른 리전간에 데이터 복제)

[Task 4: Automate EBS Snapshot]

[Task 5: Automate Bastion Security]

[Task 6: Control Amazon EC2 Instances with The Stopinator]

* Other Stopinator Ideas

 - Schedule the Stopinator to stop machines each evening, to save money
 - Mark instances that you want to keep running, then have the Stopinator stop only unknown instances (but don't terminate them - they might be important.
 - Have another script that turns on the instances in morning.
 - Set different actions for weekdays and weekends.
 - Use another tag to identify how many hours you what an instance to run, which is ideal for instances you just want to use for an experiments.
Schedule the Stopinator to run hourly and configure it to terminate instances that run longer than the indicated number of hours.

[Task 7: Custom CloudWatch Metrics]

[Task 8: Security Credentials for your Scripts]


[Task 9: Accessing Help and Documentation]




[AWS Certification] Working with Amazon Elastic Block Store


 - EBS(Elastic Block Store)에 대한 기본적인 내용입니다.


Topics covered

- Create an Amazon EBS volume

- Attach and mount your volume to an EC2 instance

- Create a snapshot of your volume

- Create a new volume from your snapshot

- Attach and mount the new volume to your EC2 instance


What is Amazon Elastic Block Store ?

- Amazon Elastic Block Store(Amazon EBS)는 Amazon EC2 인스턴스를 위한 영구 저장소를 제공한다.

- Amazon EBS Volume은 네트워크에 연결되어 인스턴스의 수명과 독립적으로 유지된다.

- Amazon EBS Volume은 가용성과 안전성이 높은 Volume으로, Amazon EC2 인스턴스 부팅 파티션으로 활용하거나 실행중인 Amazon EC2 인스턴스에 표준 블록 장치로 첨부할 수 있다.

- Amazon EBS가 Amazon Simple Store Service(Amazon S3)에 저장되고 볼륨의 특정 시점에 일관된 스냅샷을 생성하는 기능을 제공한다.


Amazon EBS Volume Features

- Persistent storage: Volume 생명주기는 특정 EC2 인스턴스에 독립적이다.

- General purpose: Amazon EBS volumes 은 모든 운영체제에서 사용할 수 있는 포맷되지 않은 원시 블록장치이다.

- High performance: Amazon EBS volumes은 Amazon EC2 devices와 같거나 더 좋다.

- High reliability: Amazon EBS volumes은 Availability Zone내에 중복을 내장하고 있다.

- Designed for resiliency: The AFR (Annual Failure Rate) of Amazon EBS의 연간 오류율은 0.1%에서 1%이다.

- Variable size: Volume sizes는 1GB에서 16TB까지이다.

- Easy to use: Amazon EBS volumes은 쉽게 생성, 첨부, 백업, 복원, 삭제 될 수 있다.


[Task 1: Create a New EBS Volume]

- Volume Type: General Purpose SSD(gp2)

- Size(GiB): 1

- Availability Zone: 현재 EC2의 Availability Zone과 동일하게 설정


- Tag

 - Key: Name

 - Value: My Volume


[Task 2: Attach and mount your volume to an EC2 instance]

[Task 3: Create a snapshot of your volume]

[SSH 연결]

 - Keepalive: 30초

 - session -> hostname (or IP Address) : publicIP

 - ssh -> auth : ppk 파일로 접속


[Putty 접속 상태]


[마운트된 하드디스크 확인하기]

df -h


[/dev/sdf 폴더에 ext3 파일시스템을 생성]

sudo mkfs -t ext3 /dev/sdf


[새로운 볼륨을 마운트 할 경로 생성]

sudo mkdir /mnt/data-store


[새 볼륨을 마운트]

sudo mount /dev/sdf /mnt/data-store


[인스턴스 부팅 시 자동 마운트]

echo "/dev/sdf /mnt/data-store ext3 defaults,noatime 1 2" | sudo tee -a /etc/fstab



[명령어 입력확인]

cat /etc/fstab


[마운트된 볼륨에서 파일 작성]

 - 기존에 사용하던 서비스가 주기적으로 스냅샷을 생성했을 경우 이전 파일 내용을 확인할 수 있다는 것을 확인하기 위한 파일 생성

sudo sh -c "echo some text has been written > /mnt/data-store/file.txt"


[파일 내용확인]

cat /mnt/data-store/file.txt


[Task 4: Create a new volume from your snapshot]

- 이전 작업에서 새로운 볼륨을 만들어 인스턴스에 마운트작업을 하여 하나의 EC2에 두 EBS를 사용하도록 작업하였다.

- 여기서는 두 번째 EBS에서 작업을 한 뒤 스냅샷으로 백업한 뒤,
  작업중인 파일을 삭제, 스냅샷을 이용해 볼륨을 복원,
  EC2 인스턴스에 복원된 볼륨을 추가하여 파일을 다시 복원하는 작업을 하도록 한다.


[스냅샷 생성한 뒤 파일 삭제]

 - 현재 EC2에 붙은 두 번째 볼륨

 - 작업 후에 파일을 삭제한 상황




[Task 5: Attach and mount the new volume to your EC2 instance]

이전 작업에서 파일이 삭제 된 상태에서 다시 그 파일을 찾기 위해서 파일이 지워지기 전, 스냅샷을 생성한 것을 가지고 복원하는 작업을 한다.


 1. 생성했던 스냅샷으로 볼륨을 생성

 2. 복원된 볼륨을 EC2 인스턴스와 연결

 3. 복원된 볼륨이 마운트 될 경로를 생성

sudo mkdir /mnt/data-store2


 4. 복원된 볼륨을 인스턴스에 마운트

sudo mount /dev/sdg /mnt/data-store2


 5. 복원된 볼륨에서 이전 볼륨에서 삭제한 파일을 읽기

ls /mnt/data-store2/




[결론]

 - Create an Amazon EBS Volume
    (Amazon EBS 볼륨을 생성)

 - Attach the volume to an EC2 instance
    (EC2 인스턴스에 볼륨을 연결)

 - Created a file system on the volume

    (볼륨에 파일 시스템을 생성)

 - Added a file to volume
    (파일을 볼륨에 추가)

 - Created a snapshot of your volume
    (볼륨의 스냅샷 생성)

 - Created a new volume from the snapshot
    (스냅샷에서 새 볼륨  생성)

 - Attached and mounted the new volume to your EC2 instance

    (EC2 인스턴스에 새 볼륨을 연결하고 마운트)

 - Verified that the file you created earlier was on the newly created volume

    (이전에 생성한 파일이 새로 생성된 볼륨에 있음을 확인)


+ Recent posts