– CloudFront может ускорить доставку вашего статического контента (например, изображения, стиль листов, JavaScript и т. Д.) для зрителей по всему миру. Используя Cloudfront, вы можете воспользоваться преимуществами AWS Backbone Network и Servers CloudFront Edge Servers, чтобы дать вам зрителям быстрый, безопасный и надежный опыт, когда они посещают ваш сайт.
– Простой подход для хранения и предоставления статического контента – использовать ведро Amazon S3. Использование S3 вместе с CloudFront имеет ряд преимуществ, включая опцию для использования идентификатора доступа к происхождению (OAI), чтобы легко ограничить доступ к вашему содержанию S3.
– Когда разработчики хотят обновить статические файлы, им просто нужно подтолкнуть коммит об изменении, все остальное уходит для работы по трубопроводу GitLab
– Общий поток: Файлы синхронизации трубопроводов GitLab в S3 -> S3 Событие уведомлений S3 Триггеры Lambda Функция -> Функция лямбда Создайте запрос на недействию к Cloudfront
Что в этом документе
- Создание трубопровода GitLab для изменений файла синхронизации в S3
- Создание функции Lambda Associate с событием S3 с использованием CAWS Chalice
- Заключение
🚀 Создать работу трубопровода GitLab для изменений файла синхронизации в S3
⚡ $ cat .gitlab-ci.yaml before_script: - echo "Deploy CDN" deploy_cdn: stage: deploy timeout: 5m script: - aws s3 sync static/src s3://static-demo/src/ only: refs: - master changes: - static/src/**/* tags: - gitlab-runner
🚀 Создать функцию Lambda Associate с событием S3 с использованием CAWS Chalice
- Предварительный реквизит: Начало работы с Чаком: QuickStart и учебник
1. Создать AWS Chalice New-Project CDN-недействительна
⚡ $ chalice new-project cdn-invalidation ⚡ $ tree . ├── app.py ├── invalidation-cdn.json ├── __pycache__ │ └── app.cpython-38.pyc ├── README.md └── requirements.txt 1 directory, 6 files
2. Определите, какую область создать функцию лямбда вместо по умолчанию в локальной конфигурации AWS
⚡ $ export AWS_DEFAULT_REGION=us-east-1
3. Создание обработчика функции лямбда, которые создают недействительные файлы объектов Вход
- Обработчик слушает
S3: ObjectCreated: поставить
событие, так что любые изменения вS3://MyBucket/Static/SRC
Запустит функцию лямбда с входом только измененных объектных файлов
https://github.com/vumdao/cicd-invalidation-cdn/blob/master/cdn-invalidation/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 в функцию лямбда
⚡ $ cat requirements.txt boto3
5. Chalice развертывает, чтобы создать функцию лямбда
⚡ $ chalice deploy
6. Результат
- Уведомления о событиях S3
- Лямбда Функция с слоем события S3
🚀 вывод
- Создание CI/CD OF CDN Endailation будет повысить развертывание и четкое острие кэш определения местоположения ваших статических файлов, особенно только измененные
- Объединение событий уведомлений S3 и функции Lambda обеспечит ваш поток лучше, чем выполнение в Gitlab Runner или AWS CLI CLI.
- Спасибо за прочтение этого блога, надеюсь, вы узнали новое.
🌠 Блог · Github · Stackoverflow · LinkedIn · Группа · Страница · Twitter 🌠.
Оригинал: “https://dev.to/vumdao/ci-cd-for-cdn-invalidation-using-aws-lambda-function-and-gitlab-pipeline-3662”