728x90

이전에 생성된 EC2 인스턴스에 SSH 클라이언트로 EC2 서버에 접속해 보겠습니다.

EC2 생성관련 내용은 링크를 참고하세요.

 

[AWS] EC2 인스턴스 SSH 접속하기(1)

SSH를 활용하여 EC2 인스턴스에 접속할 수 있는 방법을 알아보겠습니다. 먼저 접속할 EC2를 생성해보겠습니다. 1. EC2 인스턴스 생성하기 1.1 인스턴스 시작 EC2 대시보드에서 인스턴스시작 버튼을 클

jjnomad.tistory.com


2. EC2 연결하기

EC2 대시보드에서 연결하기를 클릭합니다.

아래와 같이 접속할 수 있는 가이드를 제공합니다.

다운로드 받은 pem파일은 리드 권한으로 최소화 하고 ssh 클라이언트 접속 합니다.

결과

위와 같이 했을 경우 아래와 같이 "Permissions 0555" 에러 발생할 수 있습니다.

The authenticity of host 'ec2-3-34-192-17.ap-northeast-2.compute.amazonaws.com (3.34.192.17)' can't be established.
ECDSA key fingerprint is SHA256:sBCH/6kroLB89QA4VBvyV3ntx8CvtV5wjPUvAQOE4hg.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'ec2-3-34-192-17.ap-northeast-2.compute.amazonaws.com,3.34.192.17' (ECDSA) to the list of known hosts.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0555 for 'ec2-key-pair.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "ec2-key-pair.pem": bad permissions
ec2-user@ec2-3-34-192-17.ap-northeast-2.compute.amazonaws.com: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

그럴경우, sudo 명령어로 실행하면 접속이 가능합니다.

sudo ssh -i "ec2-key-pair.pem" ec2-user@ec2-3-34-192-17.ap-northeast-2.compute.amazonaws.com

접속이 되었습니다. 😄

The authenticity of host 'ec2-3-34-192-17.ap-northeast-2.compute.amazonaws.com (3.34.192.17)' can't be established.
ECDSA key fingerprint is SHA256:sBCH/6kroLB89QA4VBvyV3ntx8CvtV5wjPUvAQOE4hg.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'ec2-3-34-192-17.ap-northeast-2.compute.amazonaws.com,3.34.192.17' (ECDSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-172-31-1-4 ~]$
728x90
반응형
728x90

SSH를 활용하여 EC2 인스턴스에 접속할 수 있는 방법을 알아보겠습니다.


먼저 접속할 EC2를 생성해보겠습니다.

1. EC2 인스턴스 생성하기

1.1 인스턴스 시작

EC2 대시보드에서 인스턴스시작 버튼을 클릭합니다.

1.2 AMI 선택

EC2에 가장 최적화된 Amazon Linux 2 AMI (HVM), SSD Volume Type을 선택합니다.

1.3 인스턴스 유형 선택

사용목적에 따라 자원은 선택가능합니다. 테스트를 위해 프리티어를 사용합니다.

1.4 인스턴스 세부 정보 구성

모두 default 값으로 두고 다음으로 넘어갑니다.

1.5 스토리지추가

스토리지도 기본값으로 선택하고 다음을 클릭합니다. EBS 스토리지는 30GB까지는 무료입니다.

(참고)https://aws.amazon.com/ko/ebs/pricing/

1.6 태그추가

리소스의 인식할 수 있는 Key-Value로 입력합니다.

  • 키 : Name, 값: TestServer

1.7 보안그룹 구성

새 보안 그룹을 생성하고 SSH, HTTP, HTTPS 프로토콜을 선택합니다.

SSH 는 소스에 내 IP를 입력 하고 저장하고 검토 및 시작을 클릭합니다.

1.8 인스턴스 시작 검토

[시작하기]를 클릭합니다.

1.9 키 페어 생성

EC2 서버에 접근하기 위한 새 키 페어 생성을 선택하고, 키페어를 다운로드 받습니다.

다운로드 받은 키페어는 EC2 서버에 접속하기 위한 개인키로 활용 됩니다.

2. 생성결과

2~3분 정도 후 생성 결과를 확인할 수 있습니다.

728x90
반응형
728x90

AWS 람다(Lambda)는 기본적인 라이브러리만 제공하고, 필요한 라이브러리를 import 하더라도 실행되지 않습니다. 따라서 머신러닝(Machine Learning)이나 크롤링 등을 개발하기 위해서는 추가적인 라이브러리 사용을 위해 필요한 라이브러리를 압축해서 올려서 사용해야 합니다.

웹 크롤링에 많이 사용되는 BeautifulSouprequests 라이브러리를 활용해서 API 서버를 구현해보겠습니다.

1. 디렉토리를 만들고 BeatifulSoup과 requests 라이브러리를 설치합니다.

설치된 파일은 아래 계층구조로 zip파일로 압축 해야 라이브러리를 인식할수 있습니다.

Python : python, python/lib/python3.7/site-packages(사이트 디렉토리)

mkdir python \
cd python

# 현재 폴더 위치에 설치하도록 -t 옵션을 붙입니다.
pip3 install bs4 -t .
ptp3 install requests -t .

# 상위 폴더에서 설치한 파일을 압축합니다.
cd ..
zip -r crawls.zip .

2. Lambda Layers 활용하여 공통으로 사용하는 라이브러리를 등록합니다.

Lambda Layers는 버전별로 수정이 불가능하고 만약 수정이 필요하다면 zip파일을 다시 올리고 새로운 리비전이 생성됩니다.

3. 함수 생성 및 Layer 추가

크롤링 함수를 생성합니다.

Layer에 라이브러리를 추가합니다.

4. 코드 입력

삼성전자의 PBR 값을 구하는 코드를 작성해보겠습니다.

import json
import requests
from bs4 import BeautifulSoup

def lambda_handler(event, context):
    # TODO implement
    fs_url = 'http://comp.fnguide.com/svo2/asp/SVD_Finance.asp?pGB=5&cID=&MenuYn=Y&ReportGB=D&NewMenuID=103&stkGb=701&gicode=A005930'
    fs_page = requests.get(fs_url)

    soup = BeautifulSoup(fs_page.text, "html.parser")

    corp_info_list = soup.find("div", {"id":"corp_group2"})

    print(corp_info_list.prettify())

    data = corp_info_list.select("dl")
    pbr = data[6].select("dd")[1].string

    json_data = {
        'pbr' : pbr
    }

    return {
        'statusCode': 200,
        'body' : json.dumps(json_data)
    }

작성한 코드를 테스트 하기 위한 이벤트를 구성합니다.

Lambda는 기본 128MB, 3초 Time-out입니다. 데이터 크롤링 위해 메모리와 Time-Out을 늘립니다.

5. 결과 확인

Reference

  1. https://beomi.github.io/2018/11/30/using-aws-lambda-layers-on-python3/
  2. https://medium.com/@rabter/aws-lambda-layer를-사용하는-방법-how-to-use-aws-lambda-layers-c206ba40d4cc
728x90
반응형
728x90

AWS Lambda를 활용하여 함수를 배포하는 방법을 알아보도록 하겠습니다.

Lambda에 대한 자세한 내용은 아래 링크를 참고하여 주시기 바랍니다.

 

클라우드 컴퓨팅 PaaS | Amazon Web Services

AWS Lambda는 서버 프로비저닝 또는 관리, 워크로드 인식 확장 로직 생성, 이벤트 통합 유지, 또는 런타임 관리 없이 코드를 실행할 수 있는 서버리스 컴퓨팅 서비스입니다. Lambda에서는 사실상 모든

aws.amazon.com

Task1 : Lambda 콘솔로 이동

AWS 콘솔에서 Alt+S 입력하고 Lambda를 입력하여 Lambda 서비스로 이동합니다.

Task2 : 함수생성하기

1. AWS Lambda 콘솔에서 [함수 생성]을 선택합니다.

생성한 Lambda 함수가 없는 경우에만 콘솔에 이 페이지가 표시됩니다. 함수를 이미 생성했다면 [Lambda > 함수] 페이지가 표시됩니다. 목록 페이지에서 [함수 생성]을 선택하여 [함수 생성] 페이지로 이동합니다.

2. [새로 작성]을 선택하고, 함수 이름과 런타임을 입력합니다. 여기서는 Python을 런타임 환경으로 진행합니다.

  • 함수이름 : HelloWorld
  • 런타임 : Python 3.8

권한 설정 및 기본, 고급 설정은 그대로 두고 [함수 생성]을 선택합니다.

함수가 생성되면 기본적으로 lambda_handler 함수가 생성됩니다. lambda는 Handler 함수를 통해서 'event'로 매개변수 값들이 들어오게 됩니다.

Task3. Lambda 함수 호출 및 결과 확인

테스트 이벤트를 사용하여 함수를 호출하여 이벤트 결과를 확인합니다. 아래 내용을 입력 후 [변경 사항 저장] [테스트]를 선택합니다.

  • 템플릿 : hello-world
  • 이름 : HelloWorldTest

실제 Python 코드의 실행된 후 Return 결과를 확인할 수 있습니다.

Task4. 함수 삭제

생성한 함수를 삭제합니다. [작업] 탭에서 [함수 삭제]를 선택합니다.


Reference

1. https://aws.amazon.com/ko/getting-started/hands-on/run-serverless-code/

 

728x90
반응형
728x90
# create the nginx deployment with 2 replicas
kubectl apply -f ./my-nginx.yaml

1. EKS(Elastic Kubernetes Service)란

EKS(Elastic Kubernetes Service)는 AWS에서 Kubernetes를 실행하는 데 사용할 수 있는 Managed 서비스입니다.
EKS는 2가지 방법으로 클러스터를 생성할 때 사용할 수 있습니다.
eksctl : EKS에서 클러스터를 생성하고 관리하기위한 간단한 CLI 도구로 Weaveworks가 제공하는 공식 AWS CloudFormation 템플릿 기반으로 작동하여 단 하나의 명령으로 몇 분 만에 기본 클러스터를 만들 수 있습니다.
AWS 콘솔 및 AWS CLI : Amazon EKS 클러스터에 필요한 각 리소스를 수동으로 생성합니다.
eksctl을 활용하여 간단히 EKS 클러스터를 구성해보고, 애플리케이션을 배포해보도록 하겠습니다.

2. EKS 시작하기

Task1. 환경 구성하기
시작하기 앞서 eksctl을 사용하기 위해서는 다음과 같은 Tool을 설치하여 합니다.
해당 설치 트랙은 Linux기반으로 진행되오니 Window10 환경의 유저분들은 아래 링크를 참조하시어 Linux환경을 설치하시 바랍니다.  https://jjnomad.tistory.com/2
또는, Cloud9 AWS WEB IDE를 활용할 수도 있습니다. 콘솔에서 Cloud9 확인 할 수 있습니다.

3. EKS 클러스터 생성하기

클러스터 생성하기 전 인스턴스에 접근하기 위한 키를 생성합니다. 해당 키를 통해 향후 인스턴스 ssh접근 시 활용하게 됩니다.‌

퍼블릭 key생성을 위해 ssh-keygen을 입력하고, 파일이름을 eks-demo로 정하겠습니다. 그리고 enter를 두번 칩니다.

아래와 같이 결과가 나오는 것을 확인 할 수 있습니다.

ls 명령어로 생성된 파일을 확인 합니다. 그럼 .pub으로 끝나는 공개키와, 비밀키를 확인 할 수 있습니다.

이제 아래코드를 실행하면 EKS 클러스터가 생성해보도록 하겠습니다.

eksctl create cluster \
--name my-cluster \
--version 1.18 \
--region us-west-2 \
--nodegroup-name linux-nodes \
--nodes 1 \
--nodes-min 1 \
--nodes-max 1 \
--ssh-access \
--ssh-public-key eks-demo.pub \
--managed \
--node-type t3.medium

eksctl은 flags를 활용하여 옵션값을 지정할 수 있습니다. 지정된 옵션은 다음과 같습니다.‌

  • 클러스터이름 : my-cluster
  • 쿠버네티스버전 : 1.18
  • 리전 : us-west-2 미국서부(오레곤)
  • 노드그룹이름 : linux-nodes
  • node 개수 : 1
  • 최소개수 : 1, 최대개수 1
  • 노드타입 : t3.medium
  • ssh-public-key : 방금전 생성한 퍼블릭키를 사용합니다.

4. CloudFormation 살펴보기

eksctl을 사용하면 CloudFormation에서 클러스터 생성에 필요한 여러 자원들을 자동으로 설치하여 줍니다.

생성되는데는 약 15분정도 소요 됩니다.

생성결과를 확인해보면 .kube/config에 kubeconfig 정보가 있습니다. 이정보로 만들어진 클러스터에 kubectl cli로 명령어를 처리할 수 있습니다.

노드가 잘 생성되었는지 확인해보겠습니다. kubectl get nodes

5. EKS 살펴보기

콘솔을 통해 생성된 클러스터의 정보들을 확인해보겠습니다.

클러스터 정보 확인

노드 그룹 확인

노드그룹 상세정보에서 인스턴스 유형, Auto Scling그룹, 노드의 크기, 서브넷 구성 등을 확인할 수 있습니다.

6. Nginx 배포하기

웹 서버 배포로 구성된 인프라환경을 테스트 해보겠습니다.

Task1. 배포 Deployment 파일 만들기

Pod에 ngnix를 만들 수 있는 yaml을 생성합니다.

cat <<EoF > my-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      run: my-nginx
  replicas: 2
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        ports:
        - containerPort: 80
EoF

해당 파일은 기 생성된 EKS 클러스터에 배포합니다.

deployment.apps/my-nginx created 결과를 확인되면, 정상적으로 만들어진 상태입니다.

Task2. Pod 생성 결과 확인하기

kubectl get pods -o wide 입력하여 생성된 Pod의 결과를 확인 하겠습니다.

Task3. 서비스 외부 노출하기

현재 외부로 노출된 상태가 아니기 때문에 접근이 불가능 합니다. 이제 외부로 노출하는 작업을 수행하겠습니다.

kubectl expose deployment/my-nginx \
        --port=80 --target-port=80 \
        --name=my-nginx-service \
        --type=LoadBalancer

service/my-nginx-service exposed 결과가 확인되면 외부 노출이 된 상태입니다.

생성된 웹서버를 확인할 수 있습니다.

 

Task4. 클러스터 삭제하기

지금까지 만든 클러스터를 삭제합니다.

# 배포한 서비스를 삭제합니다.
kubectl delete svc my-nginx-service

# 생성한 클러스터를 삭제합니다.
eksctl delete cluster --name my-cluster -r us-west-2

CloudFormation에서 작업결과를 확인하실 수 있습니다.


Reference

  1. https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/getting-started.html
  2. https://www.eksworkshop.com/010_introduction/

 

728x90
반응형

+ Recent posts