S3 알림 이벤트로 트리거되는 AWS Lambda 함수 생성
1. aws chalice new-project cdn-invalidation 생성
⚡ $ chalice new-project cdn-invalidation
⚡ $ ls cdn-invalidation
app.py requirements.txt
2. 로컬 aws 구성에서 기본값 대신 람다 함수를 생성할 영역을 정의합니다.
⚡ $ export AWS_DEFAULT_REGION=us-east-1
3. 람다 함수 핸들러 생성
s3:ObjectCreated:Put
이벤트를 수신하므로 s3://mybucket/static/src의 변경 사항이 람다 함수를 트리거합니다.app.py
from chalice import Chalice
import boto3
import time
app_name = 'cdn-invalidation'
app = Chalice(app_name=app_name)
app.debug = True
class InvalidateCDN:
""" Invalidate CDN """
def __init__(self):
self.distribution_id = 'A1AA1AA11A11AA'
self.client = boto3.client('cloudfront')
def create_invalidation(self, file_change):
try:
res = self.client.create_invalidation(
DistributionId=self.distribution_id,
InvalidationBatch={
'Paths': {
'Quantity': 1,
'Items': ["/{}".format(file_change)]
},
'CallerReference': str(time.time()).replace(".", "")
}
)
invalidation_id = res['Invalidation']['Id']
return invalidation_id
except Exception as err:
print(f"Failed to create invalidation, error {err}")
exit(1)
def get_invalidation_status(self, inval_id):
try:
res = self.client.get_invalidation(
DistributionId=self.distribution_id,
Id=inval_id
)
return res['Invalidation']['Status']
except Exception as err:
print(f"Failed to get invalidation status ID {inval_id}, error {err}")
exit(1)
def run(self, key):
print(f"Deploying CDN file: {key}")
the_id = self.create_invalidation(key)
count = 0
while True:
status = self.get_invalidation_status(the_id)
if status == 'Completed':
print(f"Completed, id: {the_id}")
break
elif count < 10:
count += 1
time.sleep(30)
else:
print("Timeout, please check CDN")
break
@app.on_s3_event(bucket='mybucket',
prefix='static/src/',
events=['s3:ObjectCreated:Put'])
def handle_s3_event(event):
cdn = InvalidateCDN()
cdn.run(event.key)
4. 람다 함수에 boto3를 포함하도록 requirements.txt를 업데이트합니다.
⚡ $ cat requirements.txt
boto3
5. 배포
⚡ $ chalice deploy
참조: https://github.com/vumdao/cicd-invalidation-cdn/tree/master/cdn-invalidation
Reference
이 문제에 관하여(S3 알림 이벤트로 트리거되는 AWS Lambda 함수 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/vumdao/create-aws-lambda-function-triggered-by-s3-notification-event-9p0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)