자동 개인 재테크 대시보드 만들기 - 4부(DynamoDB)

4925 단어 apiawsdynamodblambda
나는 엉터리 코드를 써서 비행 중에 다시 설계했다.
이전 글에서 웹 훅 이벤트를 처리하는 코드를 작성하고 이벤트를 지원하는 API 인프라를 설치했습니다.
이 부분은 S3 메모리 통에 CSV 파일을 쓰는 것을 포함해야 한다는 점에서 뚜렷한 변화가 생겼다.DynamoDB를 지원하기 위해 다시 설계했습니다. 솔직히 말해서, 이것은 제가 처음부터 마땅히 해야 할 일입니다.
새 시스템의 모양은 다음과 같습니다.

S3에서 CSV를 사용하지 않는 이유는 무엇입니까?

  • S3에서 CSV 파일에 추가하기 어려웠고 Boto3의 기능은 존재하지 않았다
  • 솔루션에 더 많은 엔지니어링 및 유지 보수 필요
  • 그렇게 멋있지 않아
  • 왜 DynamoDB입니까?

  • AWS
  • 가 관리
  • Boto3 지원
  • 시스템의 확장에 따라 확장되며 S3의 CSV는 오랫동안 실용적일 뿐입니다
  • DynamoDB 설정


    DynamoDB는 처음 사용하는 제품입니다. 설치가 매우 간단합니다. 다음을 살펴보겠습니다.
    DynamoDB에 테이블을 만듭니다. 이 모든 것은 명백합니다. 저는 TransactionID를 섹션 키로 사용할 것입니다.

    ... 이렇게--너무 쉬운 것 같아, 그렇지?여기에는 기교가 없다. 이것이 바로 완전히 관리된 NosQL 데이터베이스의 모습이다.이것은 매우 간단하다.

    DynamoDB에 편지 쓰기


    그것이 일이 더 재미있어지는 곳이다. 비록 여전히 간단하지만.목표는 두 개의 lambda를 수정하여 각각의 유효 부하를 다이나마이드에 직접 기록하는 것입니다.
    DynamoDB에 쓰기를 시도하기 전에 우리는 정확한 권한을 확보해야 한다. 지금 누군가가 '이것은 당신의 오류 코드입니다.' 라고 말할 수도 있다. 그들은 정확하다.일률적으로 모든 것을 허락하는 정책이 엉망이어서 나는 괴로워해야 한다.v0이 끝날 때 안전 심사를 진행했습니다.1. 나는 모든 정책이 최저 특권 규정에 부합되는지 검사하고 확보할 것이다. 지금은 일이 순조롭게 진행되도록 하는 데만 전념할 것이다.
    "Effect": "Allow",
    "Action": [
        "dynamodb:*"
    
    lambdas supreme DynamoDB 제어권을 부여한 이상 코드를 작성할 수 있습니다.DynamoDB에 대한boto3 지원은 매우 좋고 사용하기 쉬우며 매우 직관적이다.DynamoDB에 관해서 내가 가장 좋아하는 점은, 패턴을 미리 정의할 필요가 없다는 것이다. 최소한 섹션 키가 필요할 때, 원하는 다른 키 값을 추가할 수 있다는 것이다.S'및'N'은 문자열 또는 숫자를 나타냅니다.
    이것은 Webhook lambda 프로세스에 사용되는 함수입니다.
    def write_to_dynamo(dictionary):
        dynamodb = boto3.client('dynamodb')
        dynamodb.put_item(TableName='quicksightTest', Item={'TransactionID':{'S': dictionary['ID']},'Category':{'S': dictionary['Category']}, 
        'ParentCategory' : {'S' : dictionary['ParentCategory']}, 'Value' : {'N' : dictionary['Value']}, 'Description' : {'S' : dictionary['Description']}, 
        'CreatedAt' : {'S' : dictionary['CreatedAt']}})
    

    악코드


    만약 코드가 유효하다면, 그것은 나쁜 코드입니까?그럴 수도 있어.
    왜 안 좋아요?합병성이 부족하여 전체적인 디자인 효율이 낮다.
    나는 새 사용자인 lambda를 위해 프로세스 웹훅 코드를 복사했다.일리가 있죠?그것은 더 큰 범위 내에서 기본적으로 같은 일을 하고 있다
    다음은 현재 코드 블록입니다.
    def write_to_dynamo(dictionary):
        dynamodb = boto3.client('dynamodb')
        a = 0
        for transaction in dictionary['id']:
            dynamodb.put_item(TableName='quicksightTest', Item={'TransactionID':{'S': dictionary['id'][a]},'Category':{'S': dictionary['category'][a]}, 
            'ParentCategory' : {'S' : dictionary['parentCategory'][a]}, 'Value' : {'N' : dictionary['value'][a]}, 'Description' : {'S' : dictionary['description'][a]}, 
            'CreatedAt' : {'S' : dictionary['createdAt'][a]}})
            a += 1
    
    
    def lambda_handler(event, context):
        dictionary = create_Dictionary()
        write_to_dynamo(dictionary)
    
    내가 처음 그것을 운행하려고 시도했을 때, 그것은 시간을 초과했다.걱정할 거 없어요. lambda 제한은 1분으로 하고 큰 거래 역사 기록은 다운로드하는 데 더 오래 걸려요.

    마지막으로, 나는 lambda 시간 초과를 최대 15분으로 늘려야 했다. 나의 lambda 자원은 약 13분 동안 실행되었다.이것은 분명히 이상적이지 않다. 왜냐하면 나의 업무 역사는 갈수록 커질 뿐이기 때문이다. 이것은 언젠가는 이 코드가 작용하지 않을 것이라는 것을 의미한다.
    그럼 제가 뭘 했죠?
    아무것도 아니에요.
    만약 이것이 프로세스 웹훅에 있다면, 나는 더욱 효율적인 해결 방안을 재구성하고 만들어야 하지만, 이 함수는 새로운 사용자를 제공하기 위해 한 번만 실행되며, 현재는 효율이 낮은 결과를 감당할 수 있다.

    비록 이것은 매우 보기 싫지만, 그것은 확실히 효과가 있었다. 나는 현재 다이나믹 DB에 4418개의 기록을 가지고 있으며, 모든 웹 훅 사건마다 더 많은 기록을 추가할 것이다.비록 그것은 나로 하여금 계산을 어떻게 처리해야 할지 생각하게 했지만, 소프트웨어 패키지 전체를 개선할 수 있는 많은 방법이 있다.업데이트를 계속 확인하십시오.

    오늘의 진전


  • DynamoDB
  • 에 표를 만들었습니다.
  • DynamoDB에 쓸 수 있는 함수를 작성했습니다
  • 나의 전체 거래 기록을 DynamoDB로 가져옵니다!!!
  • 다음 게시물


    다음에, 우리는 아테나를 통해dynamoDB를 조회하고, 우리의 재무 기록을 Quicksight에 가져올 것이다. 이것은 재미있는 일이다.

    좋은 웹페이지 즐겨찾기