AWS Lambda와 Golang을 사용하여 서버리스 비트코인 ​​적립 애플리케이션을 클라우드에 구축한 이야기

개요



Bitcoin (및 기타 암호화 자산)을 정기적으로 구입하는 응용 프로그램을 개발했습니다. 암호화 자산 거래소(bitflyer)의 API를 정기적으로 호출하는 애플리케이션을 개발하여 클라우드 인프라(AWS)에서 운영하고 있습니다.

소스 코드는 다음과 같습니다.
↓↓↓
htps : // 기주 b. 코 m / 코헤이 사토 - 1221 / 레세 r

애플리케이션 아키텍처


  • AWS 클라우드 인프라를 사용하여 다음과 같은 애플리케이션을 구축했습니다.



  • 기술 스택




    이름
    설명


    AWS Lambda
    서버리스 어플리케이션을 실현. Lambda 함수로 거래소 API를 호출합니다.

    Golang
    Lambda 함수는 Golang에서 구현을 수행했습니다.

    SAM (Serverless Application Model)
    로컬에서 Lambda를 개발할 때 사용. 함수의 병아리 작성, 함수의 로컬에 에뮬레이트, 함수의 배치를 실시합니다.

    이벤트 브릿지
    Lambda 함수를 정기적으로 실행하는 역할.

    System manager(매개 변수 저장소)
    어플리케이션이 사용하는 파라미터를 포함. Lambda가 매개 변수를 가져옵니다.


    앱 개발의 경위



    2021년 비트코인의 가격은 600만엔대에 달했으며, 암호화 자산은 투자 대상으로 매우 주목도가 높아지고 있습니다. 그러나 암호화 자산 변동성이 크기 때문에 한 번의 주문으로 많은 양의 암호 자산을 구입하면 큰 포함 손실이 발생할 수 있습니다.

    그래서 소액의 암호화 자산을 정기적으로 구입함으로써 가격 변동의 위험을 피하는 구매를 원했습니다. 바로, 달러 비용 평균법 의 생각을 적응한 것입니다.

    왜 기존의 적립 기능을 사용하지 않는가?



    bitflyer나 CoinCheck등에서는, 비트코인의 적립 기능을 제공하고 있습니다. 그러나 나는 굳이 이러한 응용 프로그램을 구현했습니다. 이유는 가격 포인트입니다. 기존의 적립기능은 기본적으로 판매소의 가격이 되고 있으며, 판거래로 구입할 수 있는 금액보다 수수료가 늘어나고 있습니다. 거래소에서 암호화 자산을 거래하는 편이 싸게 입수할 수 있습니다.

    기술적인 해설



    아래에서는 애플리케이션을 어떤 단계로 구축했는지 설명합니다.

    SAM (Serverless Application Model) 배포



    SAM은 Lambda와 같은 서버리스 애플리케이션을 개발할 때 유용한 유용한 도구입니다. 이것을 사용하면 Lambda 함수의 병아리를 만들거나 Lambda 함수를 로컬에서 에뮬레이션 할 수 있습니다 (일부 배포하지 않고도 동작을 확인할 수 있습니다).
    AWS SAM CLI를 로컬 PC에 설치하여 Lambda 구현을 시작했습니다.

    새로운 주문 API를 호출하는 Lambda 함수 구현



    bitflyer API을 호출하는 기능을 Lambda에 구현했습니다.
    func (client *APIClient) PlaceOrder(order *Order) (*OrderRes, error) {
        method := "POST"
        path := "/v1/me/sendchildorder"
        url := baseURL + path
        data, err := json.Marshal(order)
        if err != nil {
            return nil, err
        }
    
        header := client.getHeader(method, path, data)
    
        res, err := utils.DoHttpRequest(method, url, header, map[string]string{}, data)
        if err != nil {
            return nil, err
        }
    
        var orderRes OrderRes
        err = json.Unmarshal(res, &orderRes)
        if err != nil {
            return nil, err
        }
    
        if len(orderRes.ChildOrderAcceptanceId) == 0 {
            return nil, errors.New(string(res))
        }
    
        return &orderRes, nil
    }
    

    API 키 · API 비밀 키 처리



    거래소를 주문하려면 거래소 APIキー・APIシークレットキー가 필요합니다. Lambda 함수는 하드 코딩하지 않고 외부에 저장하도록 했습니다. AWS에는 Systems Manager パラメータストア라는 기능이 있습니다. 이 서비스에 거래소의 API 키와 API 비밀을 저장하고 응용 프로그램을 실행할 때 매개 변수를 가져옵니다.
        apiKey, err := getParameter("buy-btc-apikey")
        if err != nil {
            return getErrorResponse(err.Error()), err
        }
        apiSecret, err := getParameter("buy-btc-apisecret")
        if err != nil {
            return getErrorResponse(err.Error()), err
        }
    

    Event Bridge로 스케줄링


    Event Bridge 서비스는 Cron 표현식을 사용하여 Lambda 시작 일정을 설정할 수 있습니다. 하루에 한 번 특정 시간에 Lambda가 시작되도록 설정했습니다.



    Udemy에서 강좌를 공개했습니다.



    이 애플리케이션의 구축 방법을 Udemy 강좌로 공개하고 있습니다.
    암호화 자산(가상 통화)의 기초의 해설이나 환경 구축의 핸즈 온 라이브 코딩이 정리된 교재가 되고 있습니다.

    프로모션 코드를 원하시는 분은 부담없이 연락주십시오!

    좋은 웹페이지 즐겨찾기