AWS Support와의 추억을 언제까지나 유지할 수 있도록 했습니다.
16515 단어 람다AWSSupportDynamoDBAWS
AWS Support 모두 사용하고 계십니까?
내가 가장 좋아하는 서비스 중 하나가 AWS Support라는 사실을 알고 있다고 생각합니다.
시험에 나갈게요.
좋아.
이 AWS Support를 사용하여 문의한 것(기표한 것)은, 기표 후 12개월간은 사용할 수 있다는 것.
htps : // 아 ws. 아마존. 코 m / jp / p 레미 m 쏘 rt / 후 qs /
Q: 사례 기록의 보존 기간은 얼마입니까?
서포트 케이스의 이력은, 작성 후 12개월간 이용하실 수 있습니다.
라고 하는 것은, 기표로부터 12개월 경과하면, AWS Support 와의 추억이 없어져 버린다! ?
경미한 질문이나 초중요한 장해에의 문의도 전부 없어져 버린다! ?
그것은 왠지 싫다, 라고.
그리고, 우리의 여러 쑥쑥 엔지니어스로부터 같은 타이밍에 이야기를 받았으므로,
물건은 시도하고 AWS Support와의 추억을 남겨 두려고 노력했습니다.
조리법
등장인물
AWS Support와의 추억 지원 사례
구성도
※ AWS Support의 단순 아이콘이 보이지 않았기 때문에 Forums 아이콘으로 대용하고 있습니다.
Amazon CloudWatch Events
이번은 10일에 1번 캡처하므로 이하와 같은 설정으로 했습니다.
아래의 Lambda 함수를 만든 다음 설정하십시오.
완성된 Amazon CloudWatch Events는 이런 느낌입니다.
Amazon DynamoDB 테이블
SupportCases 테이블
키 이름
설정
case_id
기본 키
timeCreated
정렬 키
notResolvedCases 테이블
키 이름
설정
case_id
기본 키
timeCreated
정렬 키
AWS Lambda의 Lambda 함수
에러 핸들링은 하고 있지 않으므로, 어디까지나 참고・・・
lambda_function.py
import json
import boto3
import datetime
dynamodb = boto3.resource('dynamodb')
s_table = dynamodb.Table('SupportCases')
n_table = dynamodb.Table('notResolvedCases')
# AWS Support の エンドポイントは米国東部(us-east-1)
support = boto3.client('support', 'us-east-1')
# 10日に1度動くために実行時点から10日前の0時0分とする。
now = datetime.datetime.now()
lastUpdate = '{0:%Y}-{0:%m}-{0:%d}T00:00:00.000Z'.format(now - datetime.timedelta(days=10))
def lambda_handler(event, context):
# 前回見た際に、resolved になっていないものがあったかを確認
notResolvedIds = getNotResolvedIds()
# resolved になっていなかったものがあれば更新する
if len(notResolvedIds) >= 1:
upDateNotReslvedIds(notResolvedIds)
# 前回取得から今回までの間の追加・更新分を取得
supportCases = describeSupportCases()
# あれば更新する
if len(supportCases) >= 1:
addSupportCases(supportCases)
return
def getNotResolvedIds():
# notResolvedCases テーブルから resolved になっていない
# サポートケースの caseId を取得する
case_ids=[]
response = n_table.scan()
for i in response['Items']:
case_ids.append(i['case_id'])
return case_ids
def upDateNotReslvedIds(notResolvedIds):
# case_idを指定して resolved にいなかったサポートケースを取得する
response=support.describe_cases(
caseIdList=notResolvedIds,
includeResolvedCases=True,
language='ja'
)
for i in response['cases']:
# resolved になっていなかったサポートケースの情報を更新する
response = s_table.put_item(
Item={
'case_id': i['caseId'],
'display_id': i['displayId'],
'subject': i['subject'],
'serviceCode': i['serviceCode'],
'categoryCode': i['categoryCode'],
'severityCode': i['severityCode'],
'timeCreated': i['timeCreated'],
'status': i['status'],
'communications': i['recentCommunications']['communications']
}
)
# 更新時に resolvedになっていたら、notResolvedCasesテーブルから情報を消す
if i['status'] == "resolved":
response = n_table.delete_item(
Key={
'case_id': i['caseId'],
'timeCreated': i['timeCreated']
}
)
def describeSupportCases():
# 指定日(例:10日前)から実行時点までのサポートケースを取得する
response = support.describe_cases(
afterTime=lastUpdate,
includeResolvedCases=True,
language='ja'
)
return response
def addSupportCases(supportCases):
# 取得したサポートケースを SupportCases テーブルに格納する
for i in supportCases['cases']:
response = s_table.put_item(
Item={
'case_id': i['caseId'],
'display_id': i['displayId'],
'subject': i['subject'],
'serviceCode': i['serviceCode'],
'categoryCode': i['categoryCode'],
'severityCode': i['severityCode'],
'timeCreated': i['timeCreated'],
'status': i['status'],
'communications': i['recentCommunications']['communications']
}
)
# status が resolved 以外だったら notResolvedCases テーブルに記録する
if i['status'] != "resolved":
response = n_table.put_item(
Item={
'case_id': i['caseId'],
'timeCreated': i['timeCreated'],
'status': i['status'],
}
)
이것이 움직이면 어떻게 될 것인가?
간단하게 정리하면 이하와 같다. .
끝.
요약
12개월 정도밖에 기억할 수 없는 AWS Support와의 추억을 이렇게 저장해 두면,
앞으로는 아래의 예와 같은 표시 방법으로 언제까지나 즐길 수 있습니다.
Reference
이 문제에 관하여(AWS Support와의 추억을 언제까지나 유지할 수 있도록 했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hirosys-biz/items/c6e3579b1e6493a90f06텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)