AWS 노트 31

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

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

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

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

Prameter Store를 이용해 CDK stack에서 하드코드 없애기

하드코딩이라 함은 소스코드 내부에 밖으로 새어 나가서는 안되는 정보(e.g. accesskey, secretaccesskey, host, wdbhook url 등)가 적혀있는 것을 말한다. 로컬에서 개발하는 단계에는 그런 정보가 있으나 없으나 상관은 없겠다만 commit & push를 해 버리면 위험하다. git이나 github 레포지토리에 그 이력이 남기 때문에 악의를 가진 사람들이 작정하고 알아내려 한다면 알아낼 수 있을거고 그런 위험에 대비하기 위해서는 commit해버린 정보를 파기하고 그 정보와 관련된 모든 서비스 혹은 프로그램, 소프트웨어 등을 새로 정보설정해야하는 큰일이 벌어질 것이다. 하지만 아무리 머리 속으로 생각해도 간혹 이런 중요한 방침을 잊어버릴 일도 있지 않겠는가..(내가 방금 저 ..

AWS 노트 2020.04.17

AWS CDK가 Argument of type 'Function' is not assignable to parameter of type 'IFunction'. 에러를 뿜을 때

문제발생 AWS CDK stack안에 적었던 Lambda함수와 이를 반복 실행시키는 규칙 부분에서 Argument of type 'Function' is not assignable to parameter of type 'IFunction'.에러가 나기 시작했다. 에러 메세지는 아래와 같으며 구글에 찾아봐도 '아무 문제 없어야 하는 코드인데 왜 그러지??'라는 대답으로 끝나는 것이 대부분이었다. Argument of type 'Function' is not assignable to parameter of type 'IFunction'. Types of property 'role' are incompatible. Type ..

AWS 노트 2020.04.17

DataWarehouse와 DateLake의 차이

데이터를 격납하는 방식 데이터웨어하우스도 데이터레이크도 모든 데이터를 저장할 수 있음 차이점1: 데이터웨어하우스는 구조적 데이터를 격납하고 데이터레이크는 비구조적 데이터와 구조적 데이터 모두 격납 가능하다 차이점2: 데이터웨어하우스는 raw-data를 격납하기 위해서 ELT(추출->변형->적재) 프로세스를 거쳐 통일된 형태의 데이터로 격납하지만 데이터레이크는 바로 raw-data를 격납한다 데이터를 분석하는 방식 데이터레이크는 raw-data그대로 저장하기 때문에 분석할 때 필요한 형태로 가공해 분석 툴로 데이터를 보낸다 그 데이터만을 위한(ad-hoc) 분석이 가능 대신 카탈로그라는 기능이 필요함: 어떤 데이터가 어디에 저장이 되어 있는지 알 수 있도록 데이터웨어하우스는 그 자체로 분석까지 가능하다 A..

AWS 노트 2020.04.15