[python, AWS] 무한 확장 Spotify를 만드는 서버 없는 응용 프로그램

개시하다

  • 무한 dig Spotify 욕심을 타고난 덕에 자동 dig 무서버 API 만들기
  • dig은'노래를 찾다'의 정도를 나타낸다
  • 좋은 곡이 있으면 알려주세요. 결과는 디스코드에 알리는 체제
  • 다음 내용을 시험해 보았다
  • Spotify API
  • DynamoDB
  • API Gateway(Lamba 통합)

  • 저번와 중복된 부분에 대해 생략된 설명이 있는 부분
  • 성과물

  • 등록된 아티스트를 기반으로 Spotify를 통해 관련 아티스트를 자동 검색
  • 검색 결과의 아티스트 이름과 최신 앨범 이름, URL을 Discord
  • 에 기고합니다.
    正直想像していたよりうまくいってうれしい

    구성도


  • 동작 단계는 다음과 같다.
  • DynamoDB에 좋아하는 아티스트 정보를 미리 저장
  • Lambda가 DynamoDB에서 예술가 정보를 얻기
  • 엠바다 관련 아티스트 검색 + 최신 앨범 정보
  • Spotify API로 검색
  • 검색 결과 3명 초과 시 무작위로 최대 3명
  • 선택
  • 검색 결과가 DynamoDB에 로그인되어 다음 검색의 피드가 됨
  • 람바다는 3.의 검색 결과는 웹hook을 통해 Discord에 알립니다.
  • 검색 결과가 만족스럽지 않으면 람바다 통합 API Gateway를 두드린다.다음 작업을 다시 수행
  • Eventbridge를 통한 정기적인 Lambda
  • 웹 훅의 URL 등 Lambda에서 사용하는 매개 변수는 Systems Manager에 저장
  • 이루어지다

  • 창고는 전체적으로 이쪽
  • https://github.com/mini-hiori/spotify-digger

    Spotify API 사용(음악가 읽어들이기)

  • Spotify 검색을 위해서는 Spotify API 사용권이 필요합니다.
  • 스포티파이 계정이 있으면 비즈니스가 아니면 무료참고 자료
  • Pytohon에서 Spotify API 사용spotipy
  • 관련 아티스트의 검색은 spotipy의artist입니다.related_artists 함수를 사용합니다.예를 들어우리 관련 예술가를 획득하면 아래 코드
  • 를 사용할 수 있다.
    import spotipy
    from spotipy.oauth2 import SpotifyClientCredentials
    
    # SpotifyAPI有効化時に提示されるclient_idとclient_secretを渡す
    client_id = 'xxxx'
    client_secret = 'xxxx'
    
    # 認証
    client_credentials_manager = spotipy.oauth2.SpotifyClientCredentials(client_id, client_secret)
    spotify = spotipy.Spotify(client_credentials_manager=client_credentials_manager)
    
    # 関連アーティストの検索
    mini_hiori_uri = "spotify:artist:1nSdmeM9MUMLbhoKdf0JS0"
    spotify.artist_related_artists(mini_hiori_uri)
    
  • 검색에 사용되는 키의 Spotify URI(Spotify 옆에 부여된 아티스트의 독특한 키)는 아래 그림처럼 Spotify 공유 버튼
  • 에서 얻을 수 있다

    DynamoDB(음악가 정보 저장)

  • DynamoDB를 관련 아티스트가 검색한 원시 데이터(좋아하는 아티스트)의 저장 위치로
  • 만드는 방법 등 참고
  • 요청 모드는 수요에 따라 할 수 있다고 생각합니다
  • 표의attribute는 다음과 같다.
  • 보조 색인 없음도 OK
  • spotify_uri(PK)
    name
    craeted_date
    아티스트의 Spotify Uri
    음악가 이름
    레코드 작성 날짜
  • 먼저 검색할 아티스트 정보를 AWS 콘솔에서 수동으로 투입

  • Lambda(검색, DynamoDB 작업)


  • Spotify API 검색 및 DynamoDB 작업을 위해 Lambda 사용

  • Lambda를 한 번 실행한 후 다음 동작을 실행합니다
  • Lambda를 시작할 때 DynamoDB의 모든 데이터를 가져옵니다
  • 다이나모DB 내 아티스트 데이터를 활용한 스포티파이 검색.새로운 아티스트 3명에게 메시지 전달
  • Spotify 검색 결과put
  • 를 DynamoDB로
  • DynamoDB의 기록 수가 일정수를 초과하면put의 기록 수와 같은 기록을 무작위로 삭제합니다
  • 무제한 시간 및 비용 증가 방지
  • 웹훅을 통해 Discord에 Spotify 검색 결과 투고

  • Python에서 DynamoDB를 이용한 부분에 대한 코드부기 사항에 기재하다

  • 지금까지 자동dig 응용 프로그램의 기본 기능으로 이미 완성되었다
  • APIGateway+Lambda(아티스트 검색의 다시 로드)

  • 정기 실행으로 인한dig 결과가 만족스럽지 않을 경우 Lambda와 APIGateway를 병합하여 검색을 간단하게 다시 수행할 수 있음
  • 구체적인 집행 절차는참고
  • API Gateway와 Lambda의 합병은 대리 합병과 비 대리 합병 두 가지가 있는데 이번에는 어느 것이든 괜찮아요.
  • 프록시 병합이 존재하는지의 주요 차이점은 람다의 출력 결과의 매핑을 API Gateway에 양도하는지 여부이다.API를 통해 Lambda 출력 결과를 다른 도구에 사용하려면 에이전트 통합
  • 이 필요합니다.
  • 프록시 병합을 사용할 때 Lambda의 반환 값이 API Gateway가 설명할 수 있는 형식참고 자료에 부합됨
  • 을 주의하십시오

    이외에

  • 아래 서비스 기능을 사용하였으나 저번 보도의 설정과 거의 같기 때문에 생략합니다
  • Eventbridge를 통해 정기적으로 Lambda 실행
  • 이번에는 반나절에 한 번이기 때문에 간격은rate(12hours)
  • Systems Manager를 통해 웹 훅 URL 등을 저장
  • Lambda 기반 컨테이너 이미지 시작
  • VScode Remote Continer에서 개발
  • Giithub Action 기반 CI/CD
  • 이번에는 Action의 트리거를push로 바꿀 때 마스터로 변경합니다.얄 여기 있다.
  • 개선점

  • IaC화가 완료되지 않았습니다.결합저번, 우리는 람다의 컨테이너 이미지의 통용성을 알고 있기 때문에 이 부분만 버튼화하고 싶다
  • DynamoDB 내 아티스트의 유지 보수 수단은 AWS 콘솔을 통해서만 수동으로 수정/삭제할 수 있다.싫어하는 복제품으로 방향을 틀면 수정 궤도가 까다로워요
  • 프런트엔드 애플리케이션부터 시작해 보려고 합니다
  • DynamoDB는 항상 전체 scan이 원가와 성능 두 가지 측면에서 적합하지 않다
  • 구역 키를 번호 id로 하고 Lambda에서 뽑은 id만 추출하는 아티스트
  • 좋은 웹페이지 즐겨찾기