목차

이 글에서는 다음 사항들을 다룹니다.

  • AWS Lambda란 무엇인가
  • AWS Lambda의 장점과 단점
  • 람다의 기가막히게 저렴한 비용
  • 람다 실행 예제

Lambda 란?

Lambda는 AWS에서 단순한 코드 조각을 손쉽게 실행하게 해주는 Component 중 하나입니다.

AWS상에서 Serverless Architecture를 구현하기 위한 가장 간단한 솔루션으로 볼 수 있죠.

Lambda의 가장 큰 장점은 ms 초당 과금된다는데 있습니다.

따라서 초기에 트래픽이 많이 몰리지 않는 서비스들의 경우 복잡한 인프라 아키텍처를 고려하지 않고도 저렴하게 이용할 수 있습니다.

AWS에서 pre-tier 라고해서, 최소 사용량만큼 사용하면 과금을 하지 않는 정책을 피고 있는데,

이를 잘만 구성하면 공짜로 서비스를 만들 수도 있습니다.

Lambda의 장단점

장점

  • 아주 기초적인 단계까지는 한 function을 실행시키는데 복잡한 지식이 필요하지 않습니다.
  • 과금은 사용한만큼 1ms단위로 재서 과금됩니다.
  • 아주 직관적으로 동작합니다.

단점

  • 꽤 크리티컬한 제한 사항을 가지고 있습니다.
    • 최대 실행시간이 5분을 넘어가서는 안됩니다.
    • 사용할 수 있는 메모리가 최대 10GB입니다. 이 이상의 메모리를 사용할 수 없습니다.
    • 프로젝트의 용량이 제한됩니다.
  • 의외로 모니터링 및 디버깅하기가 까다롭습니다.
    • 제대로 이해하기 위해서는 Lambda와 다른 컴포넌트가 어떤방식으로 trigger되는지 이해할 필요합니다.

Lambda의 비용

비용의 정확한 값을 outdate 될 수 있습니다.

AWS에서는 매번 비용을 내리고 있습니다. 기술혁신에 따라 효율화되면 가격을 내리고, 고객을 모으는 방식을 선택하고 있죠.

그래서 이 정보는 outdate 될 수 있음을 미리 말씀드립니다.

GB-초

근데 이해하기 어렵죠? GB 초라는 건 메모리 * 사용 시간(초)입니다.

그 밑에 있는 가격표를 보시는편이 더욱 이해하기 쉽습니다.

메모리를 저만큼 쓰는 코드조각이 1ms초 실행 될 때 요금이 저렇다는 겁니다.

1GB 초 = 1,024 메모리에 1,000ms = 0.0000167 달러입니다.

기가막히게 저렴한 Lambda의 사용 가격 Simulation

한 함수의 호출당 100ms가 걸린다고 하면 100만번 api가 호출되면 16.7달러가 과금된다는 겁니다.

아 그리고 100만 요청당 0.2달러가 추가로 붙죠. 그러니 100만 요청당 16.9달러 정도 청구된다고 볼 수 있습니다.

Lambda의 pre-teir

저도 매번 까먹어서 적어놓겠습니다. pre-tier는 월별 적용이며, 1년이 지나도 계속 무료로 사용할 수 있다는 장점이 있습니다.

  • 100만건의 무료 요청
  • 월별 400,000GB-초의 컴퓨팅 시간

400,000GB-초가 계산이 잘 안되네요.

1GB-초는 메모리 1GB짜리 어플리케이션을 1,000ms 사용했을 때 charging 됩니다.

우리가 가정한 어플리케이션은 1GB당 10회의 처리를 할 수 있겠네요.

4,000,000 번 호출할 수 있네요! 대충 400만번입니다.

메모리는 4G로 올리거나, 한 API당 실행 시간을 400ms로 넉넉히 사용할 수 있겠네요.

이제 최소 100만회의 요청을 보내거나 넉넉한 메모리를 사용해서 서비스를 구성할 수 있겠네요!

그것도 무료로 말이죠!

AWS Lambda 비용 계산기



 

 

간단한 Lambda Service 만들어보기

⚠️ 이 파트는 AWS의 계정이 있음을 가정하고 진행됩니다.

AWS콘솔에서 Lambda를 검색합니다. 그리고 함수 생성을 누릅니다.

버전에 따라 다르겠지만 아래와 같은 창이 뜰겁니다.

저는 python을 좋아하니 python3.9로 런타임을 지정하고, 실행합니다.

함수 이름을 짓는것도 잊지마세요.

저는 간단하게 테스트하는 함수를 작성해 봤습니다.

import json

def lambda_handler(event, context):
    # TODO implement
    return {
        'statusCode': 200,
        'body': '테스트 '
    }

그럼 다음과 같은 에디터 창이 뜰텐데 에디터에 원하는 코드를 삽입하고 deploy 버튼을 눌러봅시다.

그러면 lambda 함수가 업데이트 됐다고 뜰텐데 이제 테스트 탭에가서 테스트를 해봅시다.

잘 동작하나요?

아주 기초적인 lambda 사용법이었습니다.

마무리

람다는 매우 고수준으로 추상화된 서비스입니다.

사실 서버라는 것이 무엇인지 모른다고 하더라도, json정도만 알면 누구나 서버를 구축할 수 있죠.

왠만한 EC2를 사용하는 것보다 더 저렴하게 서비스를 구성할 수 있을 겁니다.

다만 진짜 production으로 나가게되면 고려해야할 점들이 몇가지 있습니다.

Lambda 자체가 안정성이 떨어지는 편이기도 하고,

디버깅이 정말 까다롭기도 하죠.

다음에는 lambda로 제대로된 웹 어플리케이션 서버를 작성해 보겠습니다.

'개발 > AWS' 카테고리의 다른 글

aws IAM  (0) 2017.08.17
aws 시작하기  (0) 2017.08.17
aws에서 결제 알람 받기  (0) 2017.01.23
AWS 준비하기  (0) 2016.10.23

아마존 서비스를 이용하는데에는 총 3가지 방법이 있다.


aws Console                AWS CLI            AWS SDK


콘솔은 웹에서 사용하는 것이고, CLI는 말그대로 aws용 command Line Interface이다.  aws sdk는 각종 프로그래밍 언어등에서 aws를 제어할 수 있도록 제공하는 sdk이다. 뭐, 결국은 모든 것은 aws의 api에 의해서 제어된다. 


aws Console의 경우 사용하기 쉽지만, 제어나 자동화하기에는 한계가 있기 때문에, aws sdk를 통해서 시스템 구축을 자동화 하는것이 맘 편할 것이다.(난이도는 더 높다..)


https://play.google.com/store/apps/details?id=com.amazon.aws.console.mobile

위처럼 모바일 콘솔도 있다 ^ㅇ^


위와 같은 서비스를 사용하기 위해서는 사용자는 자신이 누구인지 인증을 해야하는데, 이를 위해서 사용하는것이 IAM이다. IAM은 aws 계정과 관련된 권한을 제어하고, 관리기능을 제공한다. 



IAM 객체는 두가지 영역으로 구성되는데, 사용자를 정의하는 단위인 IAM User, IAM Group, IAM Role영역이고, 다른 하나는 권한을 정의하는 IAM Policy 영역이다. 


aws 계정을 생성하게 되면, 이 계정은 루트 계정이 된다. 


한 회사에서 관리하는 리소스를 여러 계정에 배치해놓고 쓰기에는 과금도 그렇고 여러므로 불편함으로, 일반적으로 이 루트계정이 권한을 나눈 새로운 유저를 만들어 회사내의 사람에게 분배하는 방식으로 관리를 하게된다. 각각의 사용자에게 직무에 맞는 IAM Policy를 부여함으로서 Human Error를 줄이고, 보안 위협을 사전에 방지한다. 



IAM User


 IAM User는 사용자로서, 여러개의 권한을 할당 받을 수 있고, 또한 IAM GROUP에 속할 수 있다. 유저는 말 그대로 유저로서, 루트에게 받은 권한을 사용할 수 있다. IAM User의 경우에는 aws management console의 로그인 용으로 사용하는 username/password방식을 설정할 수 있고, 또한 accessKey/SecretKey를 설정할 수 있다. 필요에 따라 선택해서 사용하면 된다.


 IAM Group

 IAM Group은 Policy를 미리 설정해두고, User를 넣다 뺐다 할 수 있다. 활용 용도로는 각 부서별로 필요로하는 공통된 권한이 있다면, 해당 부서 명으로 그룹을 만들어서 부서원들의 IAM User를 group안에 넣어주면 되시겠다. (여러개의 유저마다 권한을 설정하기 귀찮으니까)


IAM Role

 IAM Role는 시간부로 권한을 부여한 '역할'로 시간이 지나면 만료 된다. 작동 방식은 어떤 Trusted Entities(주로 아마존 서비스들)가 STS에 임시키를 요청해서 임시키를 발급 받고, 발급받은 임시키로 aws api를 사용한다. 이 키들은 주기적으로 만료되기 때문에, 영구히 유지되는 IAM User에 비해서 보안성이 높다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
  "Version""2012-10-17",
  "Statement": [
    {
      "Sid""FirstStatement",
      "Effect""Allow",
      "Action": ["iam:ChangePassword"],
      "Resource""*"
    },
    {
      "Sid""SecondStatement",
      "Effect""Allow",
      "Action""s3:ListAllMyBuckets",
      "Resource""*"
    },
    {
      "Sid""ThirdStatement",
      "Effect""Allow",
      "Action": [
        "s3:List*",
        "s3:Get*"
      ],
      "Resource": [
        "arn:aws:s3:::confidential-data",
        "arn:aws:s3:::confidential-data/*"
      ],
      "Condition": {"Bool": {"aws:MultiFactorAuthPresent""true"}}
    }
  ]
}
cs



 일반 정책 구조


Policy 문법이다.


Sid는 정책에 관한 설명(아이디)

Effect는 Allow(허가)/Deny(거부) 둘 중 하나를 선택하게된다 거부는 허가보다 우선된다. 

Principal은 API Access가 가능한 계정, 또는 ARN을 서술한다

Action은 사용 가능한 API들의 리스트들이다. 

Resource 는 API 타겟이 될 리소스이다. 마찬가지로 ARN으로 서술한다

Condition은 세부 설정 조건이다.




arn은 aws는 Amazon Resource Name의 약자로, 이름 그대로 리소스의 이름을 뜻하는데, 아마존에서 사용가능한 리소스들은 저마다 구분할 수 있는 arn을 가지고 있다. 


'개발 > AWS' 카테고리의 다른 글

공짜로 서비스 배포하기 Lambda로 서비스 배포하기 (1)  (0) 2023.02.05
aws 시작하기  (0) 2017.08.17
aws에서 결제 알람 받기  (0) 2017.01.23
AWS 준비하기  (0) 2016.10.23

aws는 정말 많은 서비스를 제공하고 있는데, 그냥 개발하다보면, 마치 일반적인 호스팅 업체에서 제공하는 것과 같은 기능 밖에 사용하지 못한다.


aws를 알면 알수록, 보안적으로 안전해지고, 일단 생산성이 올라가게 된다.


그래서 aws를 공부하면서 간단히 포스팅을 해보려 한다.


aws를 쓰면 좋은 점

1. 기존의 서비스를 커버할 수 있는 많은 양의 서비스를 제공한다. 

일반적으로 사용하는 EC2를 비롯해서 database에 관련된 것들이나 , storage서비스등을 it인프라를 구축하지 않고(혹은 가상으로 간단히 구축하고) 돈으로 땜빵할 수 있다.(구축하는데도 돈이들자나!)


2. 탄력적이다. 

서비스의 인프라 규모는 초기에 사업을 시작하기전에 수요를 쉽게 예측하기 어려운데, 이에 맞춘 인프라 규모를 생각할 필요가없다. 사용자가 많으면, 그 만큼 과금되는 시스템이라 그렇다.


3. 자동화가 가능하다. 

aws의 api를 사용하면 서비스를 올리는 바닥부터(심지어 서버를 올리는 것이나, 네트워크 계층을 건드리는 것 까지) 서비스까지 자동화가 가능하다.

물론 드럽게 어렵다. 나같은 초짜에겐...

 

aws의 주요 서비스


aws는 크게 4가지의 코어 서비스를 제공하는데 

compute영역

EC2, ECR, ECS, AWS LAMBDA, ELASTIC LOAD BALANCING

EC2와 같은 가상 서버 서비스이고, lambda는 서버 구성없이 이벤트에 응당하는 코드를 실행해주는 친구다. 다른 친구들은 사용하지 않아서 잘 모르겠다.


storage영역

CloudFront, EFS, Glacier, S3, Import/Export Snowball, Storage Gateway

S3는 AWS에서 제공하는 고가용성/고내구성의 객체 스토리지서비스로 객체를 무제한으로 저장할수 있는 서비스다. 굉장히 유용하고, 가장 유명한 스토리지 서비스인 것 같다. 나머지는 잘모른다. 


database영역

DynamoDB, ElastiCache, RDS, Redshift

이중에서 RDS는 Relational Database Service의 약자로, 관계형 데이터 베이스관련 서비스이다. 아는 왠만한 rds는 다 들어가있다. 

DYNAMODB는 NoSQL db 서비스이다. ElastiCache는 Redis/Memcache같은 인메모리 데이터 베이스를 관리하는 서비스이다.


networking영역

VPC, Route53, Direct Connect

VPC(Virtual Private Cloud)는 사설 IP주소 값을 기반으로 사용자가 구성한 네트워크 영역 위에 EC2와 같은 가상 서버를 배치할 수 있도록 aws에서 제공하는 네트워크 서비다. 



보통, 서비스를 구성하는데 있어서, 이 4가지 영역에 걸쳐서 대부분의 서비스를 사용하게 된다... (그리고 각각 이용하는데마다 요금이 발생하는데, 그래서 어느정도 요금이 나올지 예상하기가 쉽지 않다 ㅠ)


AWS 물리 인프라(Region, AZ, Edge)


aws는 물리 인프라 단위를 Region, AZ, Edge 세가지로 분류하고 있는데, 

AZ는 Availability Zone의 약자로 흔히 데이터 센터라고 보면 된다. 각 AZ는 물리적으로 완전히 독립된 객체이다. 


Region은 두 개 이상의 AZ로 구성되어 있는 동일 지역의 집합체라고 정의 할 수 있는데, 우리가  한국에서 서비스를 하고자한다면 가장 가까운 Seoul Region을 선택하는게 여러므로 유리할 것이다. Region 별로 각 서비스의 가격이 다르며, 서비스도 제공이 되는 것, 안되는 것이 있다. 


세번째 단위는 Edge로 잘 모르겠다. 


aws과금 방식


aws에는 엄청나게 다양한 과금 요소가 있지만 대표적인 과금 요소는 3가지로, Compute, Storage, Data Transfer이다. 이것도, 어떤 서비스를 사용하는지에 따라서 과금 방식이 차이가 나지만, Compute의 경우에는 기본적으로 인스턴스를 유지하는 시간당 비용이 발생한다. 여기서 유지하는 시간이란 해당 인스턴스가 실행되고 있는 시간을 뜻한다.(컴터켜졌으면 돈내라는 것) storage는 용량에 따라 과금하고, Data Transer의 경우 전송량에 비례해 과금이 발생한다.


대부분의 요금들이 On Demand이고, 사용량이 늘어나면 늘어날수록 더 낮은 단가에 제공한다. 또한, 약정을 통해서 과금량을 더 줄일 수도 있다



'개발 > AWS' 카테고리의 다른 글

공짜로 서비스 배포하기 Lambda로 서비스 배포하기 (1)  (0) 2023.02.05
aws IAM  (0) 2017.08.17
aws에서 결제 알람 받기  (0) 2017.01.23
AWS 준비하기  (0) 2016.10.23

검색력이 딸려서 찾는데 엄청 오래걸렸다. 

해당하는 링크는 요기 http://docs.aws.amazon.com/ko_kr/awsaccountbilling/latest/aboutv2/free-tier-alarms.html

'개발 > AWS' 카테고리의 다른 글

공짜로 서비스 배포하기 Lambda로 서비스 배포하기 (1)  (0) 2023.02.05
aws IAM  (0) 2017.08.17
aws 시작하기  (0) 2017.08.17
AWS 준비하기  (0) 2016.10.23

 웹 쪽을 시작하기 앞서서 일단 웹! 하면 서버!기때문에


AWS를 준비하도록 한다.


사실 AWS는 꽤 자주 사용해 봤는데 제대로 사용하는 법은 잘 모른다. 


매번할때마다 까먹고 다시 구글링해서 보고... 



그래서 준비하는 AWS준비하기


https://aws.amazon.com/


일단 AWS에 들어가서 가입한다. 대충 로그인 하려고 하면 아래와 같은 창이 뜨는데 


계정 만드는 부분은 스크린샷을 안찍어둬서... 


걍 하면된다. 새사용자로 클릭,클릭,클릭, 하고 넘어가다가 신용카드나 체크카드를 요구한다.


돈을 뜯어가겠다는 건데 등록을 안하면 EC2(인스턴스를 관리하는 곳)을 열어주지 않는다.


따라서 무조건 등록해줘야한다.



카드를 처음 결제하는 사람일 경우에는 이 부분에서 막힐수가 있는데(이게 뭔소리지... 하는)


credit card number는 체크카드 앞면의 xxxx xxxx xxxx xxxx 하고 나와있는 것들을 의미하고 


날짜는 그 밑에 xx/xx라고 나와있는 게있는데 그걸 순서대로 넣어주면 된다. 


이름은 아마 선택사항이었던 것 같다.


그리고 그렇게 1달러가 들게 됩니다. 


아무튼 이렇게 AWS를 가입하고 나면 이제 EC2에 입장할 수 있는데 


아래와 같은 화면을 볼 수 있다.


빨간색 동그라미 위치에서 위치를 변경할 수 있고 (서울, 도쿄 등등 있다.)


파란색 동그라미로 이제 우리가 원하는 인스턴스를 만들 수 있다.


인스턴스란 복잡하게 생각할 필요는 없고 그냥 간단하게 컴퓨터를 만든다고 생각하면 된다.


인스턴스를 누르면 아래와 같은 창이 뜬다.



OS나 기타등등을 선택하고 추가 옵션을 뭐넣을건지, 스토리지는 얼마나 쓸 건지 등 결정할 수 있다. 


잘모르겠으면 그냥 우분투 선택하고 런치 시키면된다. 연습 단계에서는 하등 상관 없을 것 같다.


이 대 뭐시기 key를 발급 받을 꺼냐고 물어보는데 간단히 말하자면 그야말로 열쇠다.


여러분이 만든 key를 통해서 인스턴스에 접속 할 수 있고 따라서 key관리를 잘 해야한다.


이미 존재하는 키가 없다면 새로운 키를 발급받으라고 나오는데 


역시 이름짓고 하라는데로 하면 키를 생성하고 인스턴트를 실행할 수 있을 것이다.


그 후에 이제 우측 중간에 있는 메뉴 중에서 instances를 선택해 보자. 






하나가 생성되어 있을 것이고 기본셋팅중이 들어올 것이다. 


이때의 instance state가 노란불이 들어와 있을 것이다. 


이 불이 녹색으로 변경되면 ssh 나 putty 를 통해서 간단히 접속할 수 있다.


인스턴트 row에 우클릭을 하면 Connet라는 버튼이 나오는데 클릭하면 접속할 수 있는 방법이 안내 돼 있다.

간단히 설명하자면 

3. chmod xxxxxx.pem

이라고 되어 있는 것은 키의 권한을 바꾸는 거고( 보통 sudo를 쳐줘야 잘 작동한다. 주의) 

4. ~~~DNS 

라고 되어 있는건 그걸로 접속 할 수 있다는 거다. 

터미널에서 ssh를 사용할 수 있다면 example의 ssh -i xxxxx 부분을 그대로 복사해서 터미널에 쳐주면 된다.

sudo만 잊지 않으면 잘 작동한다. 



주의할 사항이 있는데 security groups을 설정해줘야한다. 일반적으로 HTTP를 사용할 꺼라면 security Groups에 HTTP 프로토콜을 사용하고 80번포트(고정)을 받을 것이라고 설정해줘야한다는 의미

django등에서는 일반적으로 custom HTTP 포트 8000 번을 개방하라고 한다. 

django  관련해서는 다른 포스트에서 다루기로 하겠다.




'개발 > AWS' 카테고리의 다른 글

공짜로 서비스 배포하기 Lambda로 서비스 배포하기 (1)  (0) 2023.02.05
aws IAM  (0) 2017.08.17
aws 시작하기  (0) 2017.08.17
aws에서 결제 알람 받기  (0) 2017.01.23

+ Recent posts