AWS의 이벤트 구동 Python

6065 단어 pythonaws
9월 초에 클라우드 종사자 증서를 받은 이래로 저는 AWS 클라우드 제품에 대한 이해를 공고히 하기 위해 프로젝트를 깊이 연구하고 싶습니다.바로 그때 나는 인터넷에서 이 도전을 발견했다

도전 개요


도전 주제는 이벤트 구동의 Python이고 창설자는 Forrest Brazeal입니다.도전은 Python과 클라우드 서비스로 2019 관상 바이러스 질병 데이터를 자동화하는 ETL 처리 파이프라인이다.Forrest는 완벽한 템플릿을 만들어서 나로 하여금 진정한 Python과 AWS 기술을 구축할 수 있게 했다. 이런 기술들은 내가 클라우드 실천자 인증서를 통해 공고히 하는 데 도움을 줄 수 있다. 그러면 나는 해결 방안 설계자 연합 시험을 시도하기 전에 AWS 도구의 기초를 다질 수 있다.이 모든 것은 나의 투자조합의 실력을 강화하고 내가 면접/일을 얻는 것을 돕기 위해서이다.

도전 단계

  • 1. ETL-JOB
  • 2. EXTRACTION
  • 3. TRANSFORMATION
  • 4. CODE-CLEANUP
  • 5. LOAD
  • 6. NOTIFICATION
  • 7. ERROR-HANDLING
  • 8. TESTS
  • 9. DASHBOARD
  • 10. BLOG-POST
  • 내 방법 설명도



    ETL-JOB


    저는 매일 CloudWatch 이벤트 관리를 통해 ETL-JOB를 완성할 계획입니다.이것은 단지 template.yaml 에서 Lambda 함수에 속성을 추가하면 된다
    Events:
            dataDownload:
              Type: Schedule
              Properties:
                Schedule: 'rate(1 day)'
                Description: daily schedule
                Enabled: True
    

    추출


    이 임무 전에 판다를 사용하는 것은 나에게 매우 간단하다.pd를 통해 온라인 csv에서 쉽게 추출할 수 있습니다.읽기 기능:
    nytimes_df = pd.read_csv(nytimes_link)
    john_hopkins_df = pd.read_csv(john_hopkins_link)
    

    변환


    판다의 과거 청결, 여과 기능을 다시 사용하면서 나는 이미 과거에 접촉했다.
    john_hopkins_df = john_hopkins_df[john_hopkins_df["Country/Region"]=='US']  
    john_hopkins_df.columns = [x.lower() for x in john_hopkins_df.columns]
    
    #Converting to datetime object     
    nytimes_df['date'] = pd.to_datetime(nytimes_df['date'], infer_datetime_format=True)     
    john_hopkins_df['date'] = pd.to_datetime(john_hopkins_df['date'], infer_datetime_format=True)
    
    #changing index to date
    nytimes_df = nytimes_df.set_index(['date'])     
    john_hopkins_df = john_hopkins_df.set_index(['date'])
    
    #dropping all columns on john hopkins except recovered 
    john_hopkins_df = john_hopkins_df[['recovered']]
    
    #Joining dataframes
    df = nytimes_df.join(john_hopkins_df)
    

    코드 정리


    위의 코드를 가져와서 새 파일 dataDownload.py 을 만들었습니다.주 init.py 파일에서 호출할 수 있는 함수에 데이터를 다운로드하는 app.py 파일을 만들었습니다.

    하중


    처음에 DynamoDB를 사용하여 변환된 데이터를 로드했습니다.그러나 QuickSight를 사용하여 대시보드를 진행하려는 단계에서 호환되지 않아 오류가 발생했습니다.나는 곧 RDS postgreSQL로 전환할 것이다.여기서 나는 구름의 형성이 얼마나 행복한지 진정으로 알게 되었다.나는 단지 몇 줄만 바꾸면 끝난다.
      PostgreSQL:
        Type: AWS::RDS::DBInstance
        Properties: 
          DBName : CovidDB
          Engine: postgres
          AllocatedStorage: 50
          DBInstanceClass: db.t2.micro
    
    데이터를 불러오기 위해서, 저는 sqlalchemy를 사용하여pandas와psycopg2를postgres에 불러오는 sql 엔진을 만들었습니다.
    engine = create_engine(F"postgresql://{db_param['user']}:{db_param['password']}@{db_param['hostname']}:{db_param['port']}/{db_param['dbname']}")
    

    통지


    구름의 형성으로 이 절차도 간단해졌다.구름 형성은 확실히 일을 간단하게 한다.내가 해야 할 일은 템플릿에 몇 줄을 추가하는 것이다.Lambda 함수 속성의 yaml 파일:
          EventInvokeConfig:
            DestinationConfig:
              OnSuccess:
                Type: SNS
                TopicArn: !Ref CovidDataUpdateSuccess
              OnFailure:
                Type: SNS
                TopicArn: !Ref CovidDataUpdateFailure
    
    

    오류 처리


    오류 처리에 대해, 나는 일련의try/except 규칙을 만들었다.내가 모든 단계에서 오류 코드를 되돌려 주지 않으면마지막으로 lambdahandler 기간에 추가했습니다.
      if error != None:
            return {
            "statusCode": 301,
            "body": json.dumps({
                "message": error,
            }),
        }
    

    테스트


    나는 오류 처리를 테스트하기 위해 몇 개의 단원 파일을 만들었다.데이터 프레임을 만들고 불러오는 중 오류를 확인했습니다.나는 테이블을 다시 만드는 것이 아니라 데이터가 추가되었는지 검사했다.

    IaC 회사


    CloudFormation yaml 파일을 통해 인프라를 코드로 변환합니다.나는 template.yaml 파일에 모든 내용을 열거했다.

    소스 코드 관리


    나의 모든 프로젝트 파일은 나의 GitHub-Rad Huda에 있다

    계기판


    데이터베이스를 QuickSight에 연결합니다.

    도전하다


    이 프로젝트에서 나는 다중 도전에 직면해 있다.그러나 내가 이렇게 오랫동안 이 문제들을 해결하려고 노력했기 때문에, 그 중 두 가지 문제는 여전히 존재한다.
    문제 1: DynamoDB와 QuickSight의 통합이 문제입니다.
    해결 방안 1: 이 문제를 해결하기 위해서postgreSQL로 전환합니다. 이것은 훨씬 쉽습니다.
    문제 2: 터미널에서 SAM CLI를 사용한 적이 있지만 VSCode와 통합하고 싶습니다.나의 잘못은 심지어 구글로 검색할 수 없다.어떤 이유로 VSCode는 내가 무엇을 하든 SAM CLI를 찾을 수 없습니다.따라서 터미널을 통해 대부분의 SAM CLI 작업을 수동으로 수행해야 합니다.결국 나는 이 문제를 해결했다.저는 ssh를 통해 데스크톱에서 VSCode를 사용하기 때문에 SAM CLI는 데스크톱 컴퓨터 자체에서만 작동합니다.VSCode 오류일 수 있습니다.

    재미있는 사실


    저는 의료 보건의 해결 방안 설계사가 되기 위해 클라우드 도구를 배우려고 하는 약사입니다.Warp Speed 행동이 오늘의 의료 보건의 면모를 바꾸면서 내일의 의료 보건은 구름에 더욱 의존하는 세계로 변할 것을 볼 수 있다.일단 클라우드에 통합되기 시작하면 많은 의료 보건이 개발될 수 있다.

    결론


    나는 포레스트가 이런 놀라운 생각을 제기한 것에 매우 감사한다.이 프로젝트는 매우 도움이 된다.

    좋은 웹페이지 즐겨찾기