Serverless frame work에서 Snowflak 터치
이거 뭐야?
이 글은 Snowflake Advent Calendar 2021 넷째 날의 글이다.
↑ 기사를 쓸 사람을 모집하고 있는 것 같으니 꼭 참석해 주세요!
혹시 AWS Lambda에서 Snowflak에 가끔 문의하고 싶으신가요?
나는 업무에서 측정계의 통지 등의 운용용도로 자주 쓰인다.
간단하게 조회를 수행하고 싶다면, 스노우 빌리지 촌장이 쓴 Lambda에서 Snowflak으로 연결하고 싶어요!이 가장 이용하기 쉬운 방법이라고 생각합니다!
이번엔 촌장 기사에서 구상을 얻어 Serverless Framework를 활용해 람바다부터 스노우플랙까지 연결이 가능한지 시험해보자.
할 일
우선 Serverless Framework에서 파이톤용 Snowflake 커넥터를 사용할 수 있도록 다양한 설정을 한다.
serverless create --template aws-python3 --name snowflake-lambda
sls plugin install -n serverless-python-requirements
pipenv --python 3.8
pipenv shell
pipenv install "snowflake-connector-python[pandas]"
pipenv lock -r > requirements.txt
serverless-python-requirements
는 파이톤의 외부 모듈을 zip화한 플러그인입니다.Serverless.yml
에는 다음과 같은 내용이 추가됐다.Serverless.yml
custom:
pythonRequirements:
dockerizePip: true
plugins:
- serverless-python-requirements
또 이번에는 Snowflake 데이터를 판다스 DataFrame에 저장할 수 있는 파이썬 커넥터를 사용했다.실제로 Snowflak에 조회를 시도해 봅니다.
Snowflake의 Warehouse 리소스를 이용하여 1과 2의 기록을 생성하고 이를 데이터화된 Lambda에 추가하는 것은 정말 신비로운 일이다😇
handler.py
import os
import snowflake.connector
def main(event, context):
sf_account = os.environ['SF_ACCOUNT']
sf_user = os.environ['SF_USER']
sf_pw = os.environ['SF_PW']
conn = snowflake.connector.connect(
account = sf_account,
user = sf_user,
password = sf_pw
)
cur = conn.cursor()
try:
cur.execute("select NUM from (values (1),(2)) as t (NUM)")
df = cur.fetch_pandas_all()
finally:
cur.close()
conn.close()
response = {
"statusCode": 200,
"body": str(df['NUM'].sum())
}
print(response)
return response
번거롭기 때문에 비밀번호는 환경 변수에서 꺼내는 것이고, 업무를 사용하려면 SSM이나 KMS로 관리하는 것이 좋다.커넥터 용량 과대 문제
현지에서 테스트를 시도해 보세요.
pipenv run npx sls invoke local --log -f snowflake-lambda
무사하다고 말씀해 주세요.{'statusCode': 200, 'body': '3'}
{
"statusCode": 200,
"body": "3"
}
수수께끼 같은 쿼리가 Snowflak에서 실행되는 것도 확인했다😇그래서 디자인을 해봤어요.
sls deploy
Snowflake의 Python connector 용량이 상당히 커서 용량 오류가 발생했습니다!Resource handler returned message: "Unzipped size must be smaller than 262144000 bytes
따라서 1+2
의 설정에 다음과 같은 내용을 보충하여 용량을 삭감해 보자.참조:
Serverless.yml
custom:
pythonRequirements:
dockerizePip: true
zip: true
slim: true
plugins:
- serverless-python-requirements
동시에 람다의 시작에도 이곳을 추기해야 한다.handler.py
try:
import unzip_requirements
except ImportError:
pass
디자인 다시 할게요.sls deploy
디자인 성공!이벤트를 실행할 때마다 설정하기 때문에 시간당 한 번, 제 신용카드로 계산
serverless-python-requirements
은1+2
입니다!감사합니다!오피스
Snowflake의 데이터를 이용하여 대량 처리와 간단한 ELT 처리를 할 수도 있고, 도량 주위의 표를 참조하여 일상적으로 활용하는 요약을 만들 수도 있다고 생각합니다!
슬랙의 웹훅에 올려놓으면 일상적인 활용도 수월해지겠죠!
그리고 코드 관리 능력과 프로그램도 하나하나 실행할 수 있기 때문에 나는 상당히 가벼워졌다고 생각한다!
최후
드디어 다음 주 12/07(화요일)~12/08(수요일), 스노우플레이크의 활동'스노우데이'가 시작된다!
국내외의 고객 사례와 스노우플래크의 개발 정보 등이 많습니다!
저는 개인적으로 매년 세계 최신 데이터 공학의 흐름을 추적하기에 가장 적합한 활동이라고 생각하기 때문에 데이터와 관련된 사람들이 검사해도 된다고 생각합니다.
12/08 (수) 15:20~15:50에도 출연할 거니까 시간 되시면 잘 부탁드려요!
Reference
이 문제에 관하여(Serverless frame work에서 Snowflak 터치), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/gappy/articles/509d0b1616d1c7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)