Lambda + CloudWatch + DynamoDB + LINE Notify로 알림 만들기
14868 단어 DynamoDB람다CloudWatchLineNotifyAWS
소개
DynamoDB의 캐치 업 속에, 리마인더를 만들고 싶었기 때문에 만들어 보았다.
이번에는 시간이별로 없었기 때문에 비망록 같은 느낌. (아직 완성되지 않음)
구성으로서는 이하와 같은 느낌.
사실은 안드로이드 앱을 만들어 푸시 알림까지 가지고 가고 싶었지만 시간이 없기 때문에 나중에.
통지의 부분은, 간단하게 할 수 있는 LineNotify를 사용해 Line으로 통지를 하도록(듯이) 했다.
DynamoDB 설정
이번 구성
DynamoDB 개발자 가이드: htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / 아마 젠 dy 나모 db / ㅁ st / ゔ ぇ ぺ ぺ ぐ い / / t 로즈 c 치오. HTML
Lambda에서 함수 만들기
Lambda에는 3개의 함수를 만들 예정.
- Regist Remainder : 알림 등록
- Put Remainder: 전날 알림을 CloudWatch에 등록
- Push Remainder : 알림 알림
주의점 1: 함수내에서 DynamoDB를 접속할 때는, role의 설정을 잊지 않는다
참고 → Lambda에서 DynamoDB 볼 때의 권한 : htps : // 이 m / 헤르 LS / ms / d80c9 f0290966 b0cf8
주의점 2:파티션키와 소트키의 관계를 이해하지 않으면 데이터를 잘 취할 수 없다.
참고 → DynamoDB에서 Python을 사용해보십시오 : htps : // m / e s taro / ms / b329, fd fu f790 아 355
RegistRemainder 함수
※나중에 만든다
PutRemainder 함수
※이것 아직 잘 되어 있지 않습니다. .
import json
import boto3
import datetime
from boto3.dynamodb.conditions import Key
cloudwatch = boto3.resource('cloudwatch')
dynamodb = boto3.resource('dynamodb')
remainder_table = dynamodb.Table('Remainder')
def lambda_handler(event, context):
# get tomorrow schedule from DB
response= remainder_table.query(
KeyConditionExpression=Key('Date').eq(str(datetime.date.today()))
)
print('Get Tommorow Data: ', response)
if len(response['Items']) > 0:
for data in response['Items']:
print('GET Items: ', data)
# リマインド時間取得
remaind_date = datetime.datetime.strptime(str(data['Date'])+ " " + str(data['time']), '%Y-%m-%d %H:%M')
print('Set Date: ', remaind_date.datetime)
print('Set Remaind Id', data['remaind_id'])
# Put an event
response = cloudwatch.put_events(
Entries=[
{
'Time': remaind_date.datetime,
'Resources': [
‘ARN(Your AmazonResourceName)',
],
'Detail': {"remaind_id": data['remaind_id']}
}
]
)
print(response['Entries'])
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
이 Lambda 함수는 매일 0시에 시작하도록 CloudWatch에서 설정.
시작하면 오늘 Remainder의 시간을 DynamoDB에서 찾아 CloudWatchEvent에 등록한다.
PushRemainder 함수
import json
import boto3
import datetime
from boto3.dynamodb.conditions import Key
import requests
dynamodb = boto3.resource('dynamodb')
def lambda_handler(event, context):
print('START lambda_handler: getParam ->', event)
print('TODAY IS: ', str(datetime.date.today()))
remainder_table = dynamodb.Table('Remainder')
table_response= remainder_table.query(
KeyConditionExpression=Key('Date').eq(str(datetime.date.today())) & Key('remaind_id').eq(event['remaind_id'])
)
print('>>>>>>Get Data: ', table_response)
if len(table_response['Items']) > 0:
for remaind_data in table_response['Items']:
header = {'Authorization':'Bearer <access token>'}
param = {'message': remaind_data['contents']}
response = requests.post('https://notify-api.line.me/api/notify', headers=header, data=param,)
print('>>>>>SEND: ', remaind_data['contents'])
print('>>>>>>POST Response: ', response)
return {
'statusCode': 200,
'body': json.dumps('Remaind Finish!')
}
CloudWatchEvent에 등록되어 지정된 시간이 되면 인수가 전달되어 실행되는 함수입니다.
실행되면,
오늘 날짜와 인수로 전달 된 remaider_id를 기반으로 DynamoDB에서 검색.
취득한 리마인더 데이터를 LineNotify를 사용해 Line에 통지를 한다.
공식 문서 : htps : // 후 fy 보 t. 네. 메/도 c/그럼/
※LineNotify에 리퀘스트를 송신할 필요가 있으므로, Lambda에 requests 라이브러리등의 외부 모듈을 설정한다
주의사항: zip을 업로드할 때 lambda_function.py의 데이터가 사라질 수 있으므로 주의! ! ! ! ! !
→requests 모듈 설치: htps : // 코 m / 샤세 03 / ms / 16fd31d3698f207b42c9
※Notify의 액세스 토큰 취득은 PC 사이트에서 밖에 할 수 없기 때문에 주의
→토큰 발행 방법: htps : // 이 m/이니키키다 7/ 있어 ms/576 아 8226바
결론
이런 느낌.
이미지라든지 표시할 수 있다고 생각하므로, 맛을 추가해 갑니다.
끝에
수시로 진행이 있으면 갱신합니다!
연말까지는 완성시키면 좋겠다고 생각합니다!
Reference
이 문제에 관하여(Lambda + CloudWatch + DynamoDB + LINE Notify로 알림 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/a_yoshio/items/adc36b04b38bc093e606텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)