클라우드 엔지니어/클라우드 캠프과정

AWS Lambda 를 가장한 python 수업

해아's 2022. 9. 28. 16:55

프로그램 실행별로 요청건수별로 요금을 책정하는 서비스

다만 프로그램도 실행시간이 있으므로 시간단가도 있다.

더보기
10. 서버리스 아키텍처(AWS Lambda, AWS API Gateway)
  (1) 서버리스 아키텍처란?
	서버리스(Serverless)를 직역하자면, “서버가 없다” 라는 의미가 있습니다. 하지만, 사실상 서버가 없는건 아닙니다. 
	특정 작업을 수행하기 위해서 컴퓨터를 혹은 가상머신에 서버를 설정하고, 이를 통하여 처리 하는 것이 아님을 의미합니다.
	대신 FaaS (Function as a Service) 에 의존하여 작업을 처리하게 됩니다. 
	FaaS 를 제공하는 서비스 중에선, AWS Lambda, Azure Functions, Google Cloud Functions 등이 있습니다.


  (2) AWS Lambda
	AWS Lambda는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스입니다. 
	AWS Lambda는 필요 시에만 코드를 실행하며, 하루에 몇 개의 요청에서 초당 수천 개의 요청까지 자동으로 확장이 가능합니다. 
	사용한 컴퓨팅 시간에 대해서만 요금을 지불하면 되고 코드가 실행되지 않을 때는 요금이 부과되지 않습니다. 
	AWS Lambda를 사용하면 사실상 모든 유형의 애플리케이션 또는 백엔드 서비스를 실행할 수 있으며 이를 관리할 필요는 전혀 없습니다. 
	AWS Lambda는 고가용성 컴퓨팅 인프라에서 코드를 실행하고 서버와 운영 체제 유지 관리, 용량 프로비저닝 및 자동 조정, 
	코드 및 보안 패치 배포, 코드 모니터링 및 로깅 등 모든 컴퓨팅 리소스 관리를 수행합니다. AWS Lambda가 지원하는 언어 중 하나로 코드를 
	공급하기만 하면 됩니다(현재 Node.js, Java, C#, Go 및 Python).

    1) 프리티어
	월별 무료 요청 1,000,000건
	월별 컴퓨팅 시간 최대 3백만 2천 초

    2) 람다 함수
	Lambda 함수를 만드는 시점에 서비스가 코드를 실행할 때 AWS Lambda가 호출할 수 있는 코드의 함수인 핸들러를 지정합니다. 
	Python에서 핸들러 함수를 생성할 때 다음과 같은 일반적인 구문 구조를 사용합니다.

		import json
	
		print('Loading function')
	
		def lambda_handler(event, context):
		    #print("Received event: " + json.dumps(event, indent=2))
		    print("value1 = " + event['key1'])
		    print("value2 = " + event['key2'])
		    print("value3 = " + event['key3'])
		    return event['key1']  # Echo back the first key value
		    #raise Exception('Something went wrong')

	event - AWS Lambda는 이 파라미터를 사용하여 이벤트 데이터를 핸들러에 전달합니다. 이 파라미터는 일반적인 Python dict 유형입니다. 
		또한 list, str, int, float 또는 NoneType 유형이 될 수 있습니다.

	context - AWS Lambda는 이 파라미터를 사용하여 실행 시간 정보를 핸들러에 제공합니다. 이 파라미터는 LambdaContext 유형입니다.




	함수를 호출할 때 따로 전달하는 데이터는 없고
	반환 값을 'Hello World!!' 라고 반환하는 함수

알려주다보니 힘들어서 파이썬을 배우기로 했다

 

파이썬 python-3.9.13-amd64을 다운받는다

https://www.python.org/ftp/python/3.9.13/python-3.9.13-amd64.exe

 

개발도구는 파이참을 쓰기로헀다

https://www.jetbrains.com/ko-kr/pycharm/download/#section=windows

을 다운받아서 설치한다.

 

파이썬 특징

 

들여쓰기가 문법....>>>적응안되 ㅠㅠ

 

컴파일 과 인터프린터 언어의 차이점

 

컴파일된 프로그램을 실행

 

인터프린터로 된 소스코드를 인터프린터를 통해 실행

 

파이썬 연습

 

연금복권 추첨기 (반복문)

import random
lottery = []
num = random.randrange(1, 6)
lottery.append(str(num)+'조')
i=1
while i<=6 :
    num = random.randrange(0,10)
    lottery.append(num)
    i = i+1
print(lottery)

 

로또 추첨기(반복문 조건문)

import random
lottery = [] #저장될애
i=0 #6자리
while i <= 5 : #6자리가 될때까지 반복
    hop = 0 #중복체크
    num = random.randrange(1, 46) #1~45
    if (num in lottery):
        print("중복값"+str(num))
    else:
        lottery.append(num)
        i = i + 1
print(lottery)

업앤다운 게임 (반복문 + 더중조건문)

import random
#1~50 숫자 생성
#사용자에게 숫자입력하여 비교하여 업앤다운 출력
#같으면 게임종료
num = random.randrange(1, 51)
man = 0
print("1~50 까지의 숫자를 입력하세요5")
while num!=man:
    man = int(input())
    if num > man:
        print("업")
    elif num < man:
        print("다운")
    else:
        print("정답")

숫자야구 게임(반복문 두개)

import random
#숫자야구 게임
#컴퓨터중복없는 숫자 3개 생성 1~9
#내가 입력한 숫자 3자리 숫자 입력 1~9
#숫자와 자리가 일치하면 strike
#숫자는 있지만 자리가 다르면 boll
#숫자가 없으면 out
#를 체크해서 strike 볼 out 의 수를 출력
#3strike일경우 게임종료
lottery = [] #저장될애
i=1 #3자리
while i < 4 : #3자리가 될때까지 반복
    hop = 0 #중복체크
    num = random.randrange(1, 10) #1~10
    if (num not in lottery):
        lottery.append(num)
        i = i + 1
#3스트라이크 일때까지 반복
strike = 0
while strike != 3:
    strike = 0
    boll = 0
    out = 0
    my_num = int(input())
    num_100 = my_num// 100
    num_10  = (my_num%100)//10
    num_1 = my_num % 10
    my_num_arr = [num_100, num_10, num_1]
    i = 0
    while i < 3:
        if my_num_arr[i] in lottery:
            if my_num_arr[i] == lottery[i]:
                strike = strike + 1
            else:
                boll = boll + 1
        else:
            out = out +1
        i=i+1
    print("strike="+str(strike)+"  boll="+str(boll)+"  out="+str(out))
print("3스트라이크 끝")

 

함수 def: 로 선언

 

파워쉘에서 권한 부여

Set-ExecutionPolicy Unrestricted

Y

pip 로 패키지 추가

pip install flask

from flask import Flask
app = Flask(__name__)
@app.route("/hello")
def hello():
    return "<h1>Hello World</h1>"
if __name__ == '__main__':
    app.run(host="127.0.0.1",port="8080")

127.0.0.1:8080/hello 로 접속하면

Hello World 가 나온다.

 

사용자로부터 받아서 더해서 리턴해줄수 있다.

http://127.0.0.1:8080/hello?num1=10&num2=20

결과 : 30

from flask import Flask , request
app = Flask(__name__)
@app.route("/hello")

def hello():
    num1 = int(request.args.get('num1'))
    num2 = int(request.args.get('num2'))
    print(request.args.get('num1'))
    result = num1+num2
    return str(result)


if __name__ == '__main__':
    app.run(host="127.0.0.1",port="8080")

pymysql  연결하기

from flask import Flask , request
import pymysql
app = Flask(__name__)

@app.route("/lambda_handler")
def lambda_handler():
    conn = pymysql.connect(
        host='192.168.179.50',
        user='sjb',
        password='qwer1234',
        db='yoskr_db',
        charset='utf8')
    curs = conn.cursor()
    sql = "SELECT * FROM student"
    curs.execute(sql)
    rows = curs.fetchall()
    conn.close()
    print(rows)
    return rows[0][0]+str(rows[0][1])


@app.route("/hello")

def hello():
    num1 = int(request.args.get('num1'))
    num2 = int(request.args.get('num2'))
    print(request.args.get('num1'))
    result = num1+num2
    return str(result)


if __name__ == '__main__':
    app.run(host="127.0.0.1",port="8080")
728x90
반응형