codepipeline 에서 s3로 배포 이후에 cloudfront create invalidation 를 수행하는 코드 입니다. 해당 lambda 의 수행권한은 cloudfront 접근 권한이 있어야 합니다.


import json
import boto3

cf = boto3.client('cloudfront')
code_pipeline = boto3.client('codepipeline')

DISTRIBUTION_ID = "XXXXXXXXXXXXXX"    # 삭제 하고자 하는 cloudfront id   

def create_invalidation():
    res = cf.create_invalidation(
        DistributionId=DISTRIBUTION_ID,
        InvalidationBatch={
            'Paths': {
                'Quantity': 1,
                'Items': [
                    '/*'
                ]
            },
            'CallerReference': str(time.time()).replace(".", "")
        }
    )
    invalidation_id = res['Invalidation']['Id']
    return invalidation_id


def lambda_handler(event, context):
    id = create_invalidation()
    job = event['CodePipeline.job']['id']
    
    if id:
        return code_pipeline.put_job_success_result(jobId=job)
    else:
        return code_pipeline.put_job_failure_result(jobId=job, failureDetails={'message': message, 'type': 'JobFailed'})