如何以编程方式获取“分发ID”以使Cloudfront缓存无效?

时间:2019-05-24 14:07:16

标签: amazon-web-services caching yaml amazon-cloudfront

需要以编程方式获取CDN_DISTRIBUTION_ID,以便CloudFront缓存可以在构建后失效,无论其分布如何。

我已经按照预期使cloudfront失效了,但是它需要一个发行ID。由于相同的Yaml代码将用于每个开发人员的单独环境,CI,生产等,因此需要以编程方式获取。 我正在努力弄清楚如何在不通过AWS控制台手动找到它或使用其他语言的变通方法的情况下获取distribution_id。我们希望能够像$ {DISTRUBUTIION_ID}这样的变量来传递它,但是我正在努力弄清楚如何通过yaml进行设置。

- aws cloudfront create-invalidation --distribution-id CDN_DISTRIBUTION_ID --paths "/*"

我已经将ID导入了堆栈,但是不确定如何将其导入到运行时构建规范中。

Outputs:
  ClientDistribution:
    Description: "ClientDistribution distribution id"
    Value: !Ref ClientDistribution
    Export:
      Name: !Sub "${AWS::StackName}-ClientDistribution"

2 个答案:

答案 0 :(得分:0)

一旦部署了堆栈,就可以使用AWS CLI和jq(假设您的问题中显示的是ClientDistribution输出)来获取您的发行版ID:

aws cloudformation describe-stacks --stack-name <name> | jq '.Stacks[0].Outputs[] | select(.OutputKey=="ClientDistribution").OutputValue'

然后可以使用它来设置变量并继续无效。

另请参阅describe-stacksDescribeStacks

答案 1 :(得分:0)

假设您正在寻找使用发行版ID来运行无效并等待其完成(我怀疑这是一个常见的用例),则可以将发行版ID传递给其他命令以简​​化此操作。

DISTRIBUTION_ID=`aws cloudformation describe-stacks --stack-name <name> | jq -r '.Stacks[0].Outputs[] | select(.OutputKey=="ClientDistribution").OutputValue'` && \
INVALIDATION_ID=`aws cloudfront create-invalidation --distribution-id $DISTRIBUTION_ID --paths "/*" | jq -r .Invalidation.Id` && \
aws cloudfront wait invalidation-completed --distribution-id $DISTRIBUTION_ID --id $INVALIDATION_ID