Аннулирование кэша Cloudfront с помощью конвейеров AWS CDK

#amazon-web-services #amazon-cloudformation #amazon-cloudfront #aws-cdk

#amazon-веб-сервисы #amazon-cloudformation #amazon-cloudfront #aws-cdk

Вопрос:

В качестве части моего CodePipeline в CDK я хотел бы, в качестве последнего шага, аннулировать кэш Cloudfront.

Это мой текущий этап развертывания:

 {
  stageName: 'Deploy',
  actions: [
    new codepipelineActions.S3DeployAction({
      actionName: 'S3Deploy',
      bucket: frontendCodeBucket, // See bucket config below
      input: buildOutput, // Output from Build step
    }),
  ]
}
 

И вот мой пакет кода и дистрибутив CF:

 const frontendCodeBucket = new s3.Bucket(this, 'FrontendBucketStaging', {
  websiteIndexDocument: 'index.html',
  encryption: s3.BucketEncryption.S3_MANAGED,
  blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,
  bucketName: 'something',
  removalPolicy: RemovalPolicy.DESTROY,
});


const distribution = new cloudfront.CloudFrontWebDistribution(this, 'FrontendCloudfrontStaging', {
  originConfigs: [
    {
      s3OriginSource: {
        s3BucketSource: frontendCodeBucket,
        originAccessIdentity: oai,
      },
      behaviors : [ {isDefaultBehavior: true}]
    }
  ],
 

Я не могу найти способ аннулировать кэш с помощью S3DeployAction.
Похоже, это одна из самых распространенных вещей, которые хотелось бы сделать при работе со статическим веб-сайтом и Cloudfront. Это просто невозможно?

Если это не так. Есть ли обходной путь? Например, в процессе, не являющемся конвейером, должно работать что-то вроде этого (то, что я прочитал):

 new s3deploy.BucketDeployment(this, 'DeployWithInvalidation', {
  sources: [<some assets>],
  destinationBucket: bucket,
  distribution,
  distributionPaths: ['/*'],
});
 

Есть ли тогда способ добавить такой шаг в конвейер, который не является «Действием»?

Очень рад любой помощи или указаниям. Я совсем новичок в CDK, но мне показалось, что это обычная вещь, которую кто-то захочет сделать, поэтому я надеюсь, что я просто что-то здесь упускаю. Помимо этого последнего шага, конвейер работает отлично.

Ответ №1:

В итоге я добавил еще один шаг CodeBuildAction после S3DeployAction с единственной целью — запустить эту команду AWS CLI:

 aws cloudfront create-invalidation --distribution-id ${CLOUDFRONT_ID} --paths "/*"
 

Может быть, не самое красивое решение, но оно работает 🙂
Было бы неплохо, если бы аннулирование было опцией в S3DeployAction

Ссылка: https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_codepipeline_actions-readme.html#invalidating-the-cloudfront-cache-when-deploying-to-s3

Комментарии:

1. Уже сообщалось о восходящем потоке: github.com/aws/aws-cdk/issues/6243

2. Пришлось взглянуть на ваш PR, чтобы узнать, как настроить разрешения для приведенной выше команды. Потому что без разрешений я бы просто получил ошибку 255 от моего CodeBuildAction. github.com/aws/aws-cdk/pull/12238/files

3. Это фактически задокументировано: docs.aws.amazon.com/cdk/api/v2/docs / … Редактировать: не знал, что вы были тем, кто отправил его! Хорошая работа 🙂

Ответ №2:

Аннулирование кэша CloudFront теперь включено в последний aws-s3-deployment модуль https://docs.aws.amazon.com/cdk/api/v1/docs/aws-s3-deployment-readme.html#cloudfront-invalidation