전체 글 85

AWS 서비스 상에서 Python 라이브러리 사용하기

Lambda든 Glue든 zip으로 만들어서 upload해야 한다. 다른 점은 어디에 upload 해야하느냐 뿐이다. zip 파일의 이름은 라이브러리 이름으로 하지만 내부 폴더 이름은 python이어야 한다. $ cd ~ && mkdir python $ cd python && python3 -m pip install package_name -t . zip으로 압축한다. $ zip -r package_name.zip ./python Lambda Layer에 upload한다. 콘솔에서 하는게 확실하고 빠르고 편하다. cli에서 하자면 아래와 같다. $ aws lambda publish-layer-version --layer-name package_name --zip-file fileb://package_na..

AWS 노트 2020.06.11

Pycharm을 anaconda환경으로 설정하기

일단 miniconda를 깔아준다. $ brew install Caskroom/cask/miniconda conda를 zsh에서 초기화한다. $ conda init zsh no change taken 아래에 창을 새로 열면 변화가 있을 것이라는 문장이 나오면 성공. 가상 환경을 만든다. $ conda create --name {virtual_environment_name} python=3.7 -y 활성화한다. $ conda activate {virtural_environment_name} 비활성화 하고 싶다면 activate 대신 deactivate를 사용하면 된다. 이제 Pycham차례이다. Pycharm을 열고 cmd+,로 환경설정창을 연다. 아래 사진과 같이 Project Interpreter에 가..

파이썬3 노트 2020.05.28

Parameter Store의 Parameter를 참조한 CDK stack을 deploy할 때 주의할 점

하드코딩을 막기 위해 AWS의 ParameterStore(SSM)을 사용해야 한다는 이야기를 적었었다. AWS SDK로 TypeScript에서 Parameter Store의 파라미터를 참조하기 (비동기처리와 async, await, promise) Prameter Store를 이용해 CDK stack에서 하드코드 없애기 이번에는 ParameterStore를 이용해 기밀정보를 마스크한 CDK stack이나 여타 다른 TypeScript 스크립트 파일을 AWS에 deploy할 때 어떤 점을 주의해야 하는가에 대해 적을 것이다. 이 글의 전제는 기본(default 혹은 production) 계정과 개발용(development) 계정이 다르다는 것이다. 일반적으로 보통 CDK stack을 AWS CloudFor..

AWS 노트 2020.05.25

Redshit로 COPY가 되지 않을 때 대처법

전제: UNLOAD할 때 데이터를 흘리지 않았다는 것이 확실한 상황 에러를 확인할 수 있는 loadview를 생성 create view loadview as (select distinct tbl, trim(name) as table_name, query, starttime, trim(filename) as input, line_number, colname, err_code, trim(err_reason) as reason from stl_load_errors sl, stv_tbl_perm sp where sl.tbl = sp.id); COPY가 안된 테이블의 에러를 확인 select * from loadview where table_name='your_table_name'; 가장 최근에 실..

AWS 노트 2020.05.20

cdk deploy하려는데 Cloud assembly schema version mismatch 에러가 나면서 실패할 때

오랜만에 cdk deploy를 하려는데 아래 에러가 나면서 계속 실패했다. Cloud assembly schema version mismatch: Maximum schema version supported is 1.33.0, but found 3.0.0. Please upgrade your CLI in order to interact with this app. 이 에러 때문에 잠 못자고 구글링 + 커맨드 두들기는 것만 1시간 째 하다 드디어 성공. 구글링 하면 가장 많이 나오는 해법이 $ npm -g install aws-cdk 이다. 개소리 난 하나도 안 먹혔다. 그래서 쓴다. 일단 aws-cli를 업그레이드 해준다. $ python3 -m pip install --update aws-cli ncu를 ..

AWS 노트 2020.05.19

Glue에서 실패하는 job이 있다면 Lambda함수를 통해 Slack에 통지하기

대략적으로 순서를 나열해보자면 아래와 같다. Glue job AWS Glue란 대체 무엇인가 AWS Glue는 까다롭고 시간이 많이 소요되는 데이터 검색, 변환, 작업 일정 조정 등과 같은 작업은 간소화 및 자동화하는 종합 관리형 데이터 카탈로그 및 ETL(추출, 변환, 로드) 서비스라고 AWS에 소개되어있다. ETL처리의 예를 들자면, Amazon Redshift에서 데이터를 unload(추출)해 Amazon S3에 보관하면서 csv에서 parquet으로 변환하고 Redshift로 load하는 등의 처리를 들 수 있다. 데이터 카탈로그에 대한 알기 쉬운 설명: Data Catalog 와 DCAT (Data Catalog Vocabulary) 개요 간단히 말하자면 데이터 카탈로그란 메타데이터(데이터에 대..

AWS 노트 2020.05.16

Python3.x를 최대한 읽기 쉽고 아름답게 쓰기 위한 메모

회사에서 요즘 코드 정리하는 태스크에 집중하고 있는데 작성되어 있는 Python코드가 카오스 그 자체라 다시한 번 깔끔한 코드를 작성하는 것이 얼마나 중요한 것인가를 깨닫고 무엇을 하면 안되는지 메모했다. 참고하면 좋은 사이트 PEP 8 -- Style Guide for Python Code typing — Support for type hints Difference between , _ and xx in Python Why you should be using pathlib Python에는 문법만큼 지켜야 하는 작성규칙이 있다 개행 import는 가능한 한 최상단에서만 이루어져야 한다 import아래에 바로 함수 혹은 클래스가 나온다면 2줄 개행하고 변수가 나온다면 1줄 개행한다 import os imp..

파이썬3 노트 2020.05.12

Redshift에 쿼리 던질 때 'Invalid operation: syntax error at or near "첫행 이름" Position: 3x;'에러가 나는 이유

먼저, Redshift는 Postresql을 기반으로 하기 때문에 psql문법으로 쿼리를 던진다. mysql과 psql의 커맨드 비교해 놓은 블로그가 있으니 링크를 올려둬야지. 혹시 나 이외에 이 글을 보는 사람이 있다면 일본어 몰라도 mysql문법을 알고 있다면 바로 무슨 소리인지 알아들을 수 있을테니 가 보는 것을 주저하지 않길 바란다. https://qiita.com/aosho235/items/c657e2fcd15fa0647471 Glue에서 작업 플로우를 생성하기 위해 로컬에서 sql쿼리와 여타 코드를 함께 구현해 디플로이를 하면 로컬에서 작성한 예를 들어 아래와 같이 테이블을 작성하는 sql이 정상 작동할 것이다. CREATE TABLE IF NOT EXISTS some_table ( user_..

AWS 노트 2020.05.12

갑자기 터미널에서 git 권한이 없다며 push에 실패할 때

2년동안 대학원 연구로 사용해오던 맥북이 요새 회사 맥북만 썼다고 갑자기 git 인증 실패를 뿜어냈다. 이게 뭔일... Username for 'https://github.com': USER_NAME Password for 'https://USER_NAME@github.com': remote: Invalid username or password. fatal: 'https://github.com/USER_NAME/REPOSITORY.git/' 鉴权失败 ssh를 확인해보니 권한이 없단다. $ ssh -T USER_NAME@github.com USER_NAME@github.com: Permission denied (publickey). ~/.ssh/config를 보아하니 대학원 서버에서의 접속만 가능하게 되어..

command line 노트 2020.05.06

AWS SDK로 TypeScript에서 Parameter Store의 파라미터를 참조하기 (비동기처리와 async, await, promise)

저번 글에서 틀렸던 것 저번 글: Prameter Store를 이용해 CDK stack에서 하드코드 없애기 저번 글 후보 3에 대해 aws-sdk와 @aws-cdk/aws-ssm을 같이 사용해야 TypeScript에서 파라미터를 참조할 수 있다고 했는데 실제로 구현해보니 그건 아니었다. boto3와 같이 aws-sdk만 있으면 되었다. aws-sdk.SSM().getParameter() 결론부터 말하자면 파라미터는 아래와 같이 불러온다. import AWS = require("aws-sdk"); const ssm = new AWS.SSM(); export async function getParameterString(service: string, key: string): Promise { const par..

AWS 노트 2020.04.25