GREAT & PEACE

GREAT = Get Really Excited About Today

PEACE = Purse Excellence and Cherish Everyday

Advertisements

EC2 당 붙일 수 있는 EIP 개수는?

EC2에는 여러 개의 EIP를 부착할 수 있다. 그러기 위해서는 ENI(기본제한 350개)를 사용해야하며, EIP의 기본 제한은 5개로, Limit Increase가 필요할 수 있다.

또한 EC2 Type 별로 부착할 수 있는 EIP 개수는 제한이 된다.  아래의 표를 확인해 보자.

 

EC2 Type           최대 ENI 개수                  최대 Private IP 개수 (IPv4)  최대 Private IP 개수(IPv6)
170920 ec2 당 eip 개수.PNG

http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/using-eni.html

EIP 의 경우, ENI의 개수와 동일하게 생성 가능하다 (1:1 매칭) 주의해야 한다.

EB 2개 생성 후 API 통신 시 TroubleShooting

EB를 통해 배포 자동화를 하고, 2 개의 EB끼리 API 통신을 하는 경우가 있다.
하지만 배포마다 EB 밑 단의 EC2의 공인 아이피가 바뀌므로, 상대 EB-ELB의 도메인을 질의했을 때, ELB의 Security Group에 요청하는 EC2의 정보가 없으므로, 요청이 거부된다. 간단하게 그림으로 표현하면 아래와 같다.170809_야놀자_EB_관련.PNG

위와 같은 현상은 보안 그룹을 규칙의 원본 또는 대상으로 지정할 경우 규칙은 보안 그룹과 연결된 모든 인스턴스에 영향을 주기 때문이다. 유입 트래픽은 퍼블릭 IP 주소 또는 탄력적 IP 주소가 아닌 원본 보안 그룹과 연결된 인스턴스의 프라이빗 IP 주소를 기반으로 허용된다. EB에서 제공하는 도메인의 경우, DNS 질의를 하기 때문에, VPC 외부로 통신을 했어야 하고, 공인 IP로 통신하게 된다. 그러므로 공인 IP를 상대 ELB SG에 추가하는 작업이 필요하다. 하지만 자동화 하는 방법은 없을까?? (참고로 internal ELB로 만들면 문제가 없이 도메인으로 정상 통신된다)

해결책 1. 배포 때마다 새로 생성되는 EC2에 대해서 Public IP를 고정하는 방법이 있다
⇒ 기존에 SG에 추가된 EIP를 disassociate 및 reassociate 하는 AWS CLI 스크립트 작성이 필요할 것으로 보이며, 상대 ELB에 해당 EIP만 SG에 추가하면 된다.

해결책 2. 배포 때마다 새로 생성되는 EC2의 Public IP를 불러와 상대 ELB SG에 추가하는 방법이 있다
⇒ EC2의 유저데이터에 메타데이터를 이용하여 새로 생성된 EC2의 Public IP를 가져와, AWS CLI를 이용하여 상대 측 ELB에 추가하는 스크립트를 이용하여 자동화 할 수 있다. 하지만 이 경우, 보안 상으로기존에 있던 SG의 삭제도 자동화가 필요하다.

해결책 3. EB 배포시 EC2를 Private network으로 두고, 모든 트래픽을 Public Network에 있는 NAT를 통해서 통신하도록 하는 방법
⇒ Public Subnet에 NAT Gateway를 생성하고, EIP를 배정합니다. EB에서 배포 시 Private network에 생성되더라도 모든 트래픽이 NAT를 통하기 때문에 NAT의 EIP만 상대 EB SG에 추가해서 통신하면 된다.

170809_야놀자_EB_관련_2.PNG

 

ELB SSL 적용 및 리디렉션 설정

ELB 에 SSL 을 적용하고 80포트를 443포트로 보내 도메인을 접근할 때, 자동으로 https로 전환하여 모든 통신을 암호화 하도록 설정할 수 있습니다. 우선 준비물로 ACM에서 발급받거나 직접 업로드한 사용 가능한 SSL 인증서가 필요합니다.

1)  ACM 에서 보유 도메인 인증서 신청 및 메일 확인으로 승인

2)  사용 가능한 인증서를 ELB 443 포트에 넣고 81 포트로 리슨하도록 설정
– 80포트는 80포트로 가되, 301 Status Code로 리디렉션 설정

3)  ELB 밑단 인스턴스 접속 및 nginx 설치 후 아래와 같이 설정

vim /etc/nginx/conf.d/1.conf    ## 생성

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name xxx.awssupport.net;
return 301 https://xxx.awssupport.net;
}

vim /etc/nginx/sites-enabled/default   ## listen 80->81
server {
       listen 80 default_server;
       listen [::]:80 default_server ipv6only=on;

       root /usr/share/nginx/html;
       index index.html index.htm;

        # Make site accessible from http://localhost/
       server_name localhost;

       location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
               try_files $uri $uri/ =404;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
       }

service nginx restart    ## 재시작 후 적용

CloudFormation 시작하기

CloudFormation은 json 템플릿 형태를 가진다. CloudFormation은 Chef기반으로 사용하게 되면 설정한 대로 알아서 VPC 및 EC2 생성, Security Group 설정 등이 가능하다.

우선 템플릿 기본구조이다.

{
   "Description" : "이 곳에는 템플릿의 Description을 입력한다.",
   "Parameters": {
   // 스택을 생성할 때 사용자가 입력할 매개변수들이다.
   },
   "Resources" : {
   // AWS 리소스들의 설정 내용 그리고 리소스들간의 관계에 대해 정의할 수 있다.
   },
   "Outputs" : {
   // 스택을 생성 후 출력할 내용이다.
   },
   "AWSTemplateFormatVersion" : "2010-09-09"
}

EC2를 생성하고 EIP를 붙이는 작업을 해주는 템플릿은 아래를 참고한다.
https://s3-us-west-2.amazonaws.com/cloudformation-templates-us-west-2/EIP_With_Association.template

AWS 에서 제공하는 기본 템플릿 모음 문서 사이트

http://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/sample-templates-services-us-west-2.html

  • AWS CloudFormer를 사용하면 현재 VPC 자원에 대해 자동으로 템플릿으로 생성해준다.
  • AWS CloudFormation Designer를 사용하면 조금 더 쉽게 접근할 수 있다.

CloudSearch vs ElasticSearch

AWS 에는 CloudSearch 와 ElasticSearch 서비스가 있다.
간혹 헛갈릴 수 있어 정리해 본다.

CloudSearch 소개

http://wildpup.cafe24.com/archives/1085

  • CloudSearch는 웹페이지를 크롤링하고 데이터화하여 해당 데이터를 바탕으로 검색하는 방식은 아니고 DynamoDB나 S3에 저장된 CSV로 저장된 데이터를 사용한다.
  • RDS의 경우 DataPipeLine을 이용하여 S3에 저장 후 사용이 가능하다. 하지만 TEXT 파일, PDF, HTML, JSON, XML도 검색 데이터 형식으로 쉽게 사용할 수 있는 장점을 가지고 있다.
  • S3 버킷 지정 후 인덱싱 설정하여 검색 할 수 있다.

===========================================================================

ElasticSearch 소개

http://wildpup.cafe24.com/archives/1184

  • ElasticSearch는 루씬 기반으로 루씬의 기능을 대부분 지원 (자바로 개발되었음).
  • 분산시스템 (여러 개의 노드[검색하는 단위 프로세스]로 구성)
  • 확장 시 기존 노드에 새 노드를 실행하여 연결
  • 각 노드에 데이터 분산 저장 (복사본 유지하여 충돌로부터 보호)
  • 높은 가용성 (실패할 경우 다른 노드로 이동)\
  • json으로 저장 (REST API 지원)
  • HTTP Method 지원 (9200번 포트부터)
  • 키바나와 연동되어 시각화 가능
  • AWS ElasticSearch는 생성 시 IAM 권한이 필요하고, Kibana접근 시 액세스 정책을 IP기반으로 열어줘야 함
    =====================================================

    {
     "Version": "2012-10-17",
     "Statement": [
      {
       "Sid": "",
       "Effect": "Allow",
       "Principal": {
       "AWS": "*"
       },
       "Action": "es:*",
       "Resource": "arn:aws:es:ap-southeast-2:167306399485:domain/example-170714/*",
       "Condition": {
        "IpAddress": {
         "aws:SourceIp": "211.3.22.111/32"
        }
       }
      }
     ]
    }

    =====================================================