AWS의 S3와 lambda기반으로 트위터 움짤 봇 만들기

EC2 프리티어에서 구동중이던 트위터 움짤 업로드 봇을 이번에 Lambda + scheduling + S3의 조합으로 바꾸기로 했다 올해 5월에 프리티어가 끝나면 EC2 의 t2.micro 인스턴스는 한달에 약 8달러가 소비되지만 lambda + S3로하면 하루에 12번의 람다함수 한달 약 360번 5초정도로 가정하고 S3를 약 1기가를 사용한다고하면 0.005달러 아이러니하게도 한달에 약 1기가*2 ( 움짤 360장에 약 1기가) 의 외부 데이터 송출 요금이 0.114달러로 다른 비용 다 합친 것 보다도 비싸다.. AWS의 데이터 트래픽 요금은 확실히 비싸긴 한 것 같다. 지금이야 0.1달러로 보이지만 서비스가 커질 수록 트래픽 요금이 막대해진다. ...

March 6, 2022 · EBeb

Sync DynamoDB stream To Elastic Search ( Golang )

DynamoDB (DDB) 는 Non-sql에 Key-Value 의 형태로 Column을 형태에 상관없이 늘려가는 자유롭고 가벼운 저장과 RDMS에 비해 Serverless 형태로 access수에 비례하여 저렴한(하지만 예측하기 어려울 수 있음) 유지비용이 장점이라고 할 수 있는데요 문제는 Non-sql이다보니 검색이 자유롭지 않다는 문제가 있습니다. 좀 검색 기능에 하자가 많아요.. 여기서 이번 product에 대한 AWS의 기술 조언 담당가 분하고 여러 이야기를 나눈 결과 dynamoDB + ElasticSearch 를 사용하는 것이 타당하다는 조언을 받았습니다. dynamoDB는 stream형태로 변화를 관리할 수 있어서 여기에 추가, 삭제, 수정이 있으면 그 정보를 실시간으로 외부로 전달하여 처리하는 것이 가능합니다. ...

December 27, 2021 · EBeb

Golang 구조체의 Field 열거하기 / Iterate through Fields of the Struct

구조체는 리스트에 비해서 명확하고 코드의 가독성을 높여주기에 애용하는 편이다. 또한 여러 타입의 변수를 하나에 묶어둘 수 있다는 것도 장점이다. 귀찮은 점은 list 나 array는 for문으로 대충 쭉 훑는게 가능한데 구조체는 그게 간단하지가 않다. 하지만 그렇다고 전체가 필요할 때 구조체의 필드명을 하나하나 말하고 있으면 코드가 길어지고 확장성이 떨어진다. 이번 Golang으로 하는 작업 중에 Field를 열거해 줄 일이 있었다. Golang은 깐깐해 보이면서도 Interface라는 상당히 유연한 시스템을 가지고 있다. 먼저 다음의 코드를 살펴보자 ...

December 2, 2021 · EBeb

Golang으로 Redshift로 보낸 Query의 return값 받기

Golang으로 Redshift 접속 후 쿼리실행까지 생각해보니 저번에 글을 쓰고 생성만 보여주고 정작 중요한 보낸Query의 Return값을 받는 방법을 안 썼다는 것이 생각났다 지금은 저번 Quick Start코드와는 완전 다른 무언가가 되어있지만 Quick Start 의 코드로도 충분하니 Quick Start 에 적힌 코드를 참고해보자 주목해야 할 곳은 104번째 줄 116번째 줄 그리고 130번째 줄에 적혀있는 redshiftclient.ExecuteStatement redshiftclient.DescribeStatement redshiftclient.GetStatementResult 이 3종류의 함수이다. 우선 ExecuteStatement는 Redshift에 Query 의 실행을 요청한다. 이 쿼리에는 Redshift가 Id를 부여하여 관리한다. 다만 Query는 처리 시간이 필요하다. 이 처리 상태와 처리 이후 결과의 상태를 확인할 수 있는 것이 DescribeStatement이다. ...

November 22, 2021 · EBeb

Lambda에서 Golang으로 AWS redshift API ( data API )

이 포스트는 AWS로는 잘못된 사용으로 사고를 치고 Go라고는 써본 적도 없는 제가 인턴으로 구르면서 던져진 과제를 해결하는 과정을 담은 포스트입니다. 포스트의 내용이 부적절 할 수 있음을 미리 말씀드립니다. 왜 Go? 회의중 : 아무튼 C++이나 자바는 쓰기에 문법이 그렇고 Python은 느리다 -> Go를 쓰기로 했습니다 솔직한 감상으로는 어차피 쿼리를 보낸 후에 처리하는 작업은 redshift에서 해주는데 쿼리를 구성해서 보내줄 뿐인 프로그램의 처리속도가 과연 redshift의 처리속도에 비해 어느정도의 bottleneck이 되는가에 대해서는 회의적이네요 절대 Python이 편해서 투덜거리는게 아니에요 아무튼 그래요 ...

November 11, 2021 · EBeb

우분투 에러 The repository does not have a Release file.

보통 docker를 쓸 일이 있으면 VM에서 하는데 이번에 WSL로 써야해서 WSL에 도커를 설치해야했습니다 근데 도커 CLI 설치과정이 참 번거롭기 때문에 코드를 긁어서 복붙하다가 실수를 했네요 무지성 복붙이 가져온 참사… The repository ‘https://download.docker.com/linux/ubuntu (lsb_release Release’ does not have a Release file. URL을 잘못등록했다 ㅜㅜ 문제는 이게 apt update를 해도 계속 에러를 내면서 거슬리게 하는데 sudo vim /etc/apt/sources.list 로 열어서 가장 아래에 해당 URL을 삭제하여 해결했다 얌전히 Docker Desktop을 깔러 가야겠다 ...

October 14, 2021 · EBeb

rsync를 활용한 SSH와의 동기화 ( AWS EC2 )

개인적으로 GUI를 사용하는 것을 좋아하지만 SSH등을 사용하여 GUI없이 작업해야만 하는 경우도 있습니다. 특히 가장 번거로운게 파일이동과 코딩일 것 같은데요 그 중에 파일이동을 위한 rsync를 설명하려합니다 scp가 일반적이지만 저같은 경우에는 로컬의 폴더와 리모트의 폴더를 동기화시킬 필요가 있었습니다. AWS의 EC2에서 돌아가는 트위터 이미지 봇의 이미지 동기화를 위해서인데요. 이건 깃허브로 옮기기도 좀 그렇구.. SSH상에서 동영상으로 gif만들기는 좀 그렇죠 ㅋㅋㅋ 수십개의 파일을 scp로 옮기기도, 그렇다고 수백장의 파일의 폴더를 그 때 그 때 scp로 처리하기는 비효율적이라고 생각하였습니다. ...

September 28, 2021 · EBeb