AWS Lambda에서 고양이의 이미지를 시간에 한 번 Slack에 게시 🐾

AWS Lambda에서 고양이 이미지를 시간에 한 번 Slack에 게시 🐾



지금까지 일해 온 회사는 모든 회사에 당연한 것처럼 고양이와 관련된 채널이있었습니다.

이번에는 고양이의 이미지로 시보를 알려주는 AWS Lambda의 함수를 만들고 싶습니다.

고양이 이미지 준비 🐈



이미지를 스스로 수집하거나 스토리지에 저장하고 인덱싱하는 것은 어렵습니다.

이번에는 Cat as a Service인 The Cat API를 이용합니다.

The Cat API - Cats as a Service

여담 🐶



개파의 사람도 안심해 주세요, Dog as a Service인 The Dog API도 제대로 있습니다.

The Dog API - Dogs as a Service

Pricing 💰



신경이 쓰이는 가격입니다만, 이번은 Free 플랜으로 충분합니다.



Paid 플랜이라면 추가 기능을 사용할 수 있습니다.
  • Curated Facts/Jokes/Quotes
  • Analytics
  • Higher resolution Pictures
  • Premium Images
  • Video
  • 실시간 웹 후크

  • ※ 2021년 3월 현재, 아직 Paid 플랜은 이용할 수 없습니다만 차례 대기가 가능합니다.
    Thanks for showing interest in the premium version of the Cat API.
    We're running a few weeks behind on launching the new subscription service. 
    

    The Cat API 가입 및 테스트 📮



    이번에는 Free 플랜으로 가입해 봅시다.
    SIGNUP FOR FREE 를 클릭하고 이메일 주소를 입력합니다.



    가입이 완료되면 이메일로 API 키를 받게 됩니다.

    또한 전환 대상 페이지에서 샘플 코드를 확인할 수 있습니다.

    이메일로 받은 API 키와 샘플 코드를 사용하여 테스트해 보세요.

    파이썬 코드 준비 ✏️



    어리석게 쓴다.

    AWS Lambda에서 사용하기 때문에 requests 대신 urllib를 사용합니다.

    ※ The Dog API를 이용하는 경우는, URL을 바꿔 주세요

    Slack에 게시하는 Incoming Webhook URL을 만들어 둡시다.
    # -*- coding: utf-8 -*-
    
    import urllib.request
    import json
    
    CAT_API_URL = "https://api.thecatapi.com/v1/images/search"
    CAT_API_KEY = "{API_KEY}"
    SLACK_URL = "{SLACK_WEBHOOK_URL}"
    
    def get_cat():
        headers = {'content-type': 'application/json', 'X-API-KEY': CAT_API_KEY}
    
        req = urllib.request.Request('{}?{}'.format(CAT_API_URL, urllib.parse.urlencode(headers)))
        with urllib.request.urlopen(req) as res:
            body = res.read().decode()
    
        response = json.loads(body)
        for i in response:
            return i["url"]
    
    def lambda_handler(event, context):
        cat = get_cat()
        payload = {
            "text": cat
        }
    
        data = json.dumps(payload)
        headers = {
            'Content-Type': 'application/json',
        }
    
        req = urllib.request.Request(SLACK_URL, data.encode(), headers)
        with urllib.request.urlopen(req) as res:
            body = res.read()
    

    AWS Lambda로 이동 ⚙️



    Lambda Function 만들기 ✨



    AWS Management Console로 이동하여 서비스 Lambda를 선택합니다.
    新しい関数 를 작성합니다.
  • 처음부터 만들기를 선택합니다
  • 함수명은 적당히 입력
  • 런타임은 Python 3.8를 선택합니다
  • 필요한 경우 IAM 역할을 선택하고 생성합니다.

    코드 배포 📝



    화면 중앙에 있는 코드/코드 소스에 Python 코드를 붙여넣습니다.



    붙여넣으면 Deploy 를 클릭하여 배포합니다.

    코드 테스트 👩‍💻


    Deploy 버튼 옆에 있는 Test를 선택합니다.

    빈 테스트를 만들고 실행합니다.

    (이번 코드에는 테스트 이벤트를 전달할 필요가 없습니다.)

    1시간에 1회 실행 🕒



    트리거를 만듭니다.

    트리거 작성에서 EventBridge (CloudWatch Events)를 검색하여 선택하십시오.

    Amazon Event Bridge에서 cron 표현식 트리거 생성


    cron(00 1-11 ? * MON-FRI *)
    

    Lambda의 실행 환경측은 GMT 때문에, 9시간 어긋나게 합니다.

    👆의 예라면, 일본의 오전 10시~20시에 투고합니다.

    고양이가 시보를 알려드립니다 🐾



    지정한 트리거로 고양이 이미지가 게시됩니다.

  • 좋은 웹페이지 즐겨찾기