首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用s3和cloudfront使用python boto3部署静态站点

使用s3和cloudfront使用python boto3部署静态站点
EN

Stack Overflow用户
提问于 2017-02-07 14:35:37
回答 1查看 2.8K关注 0票数 2

尝试使用boto3自动部署静态网站。我有一个静态网站(ar角/javascript/html)坐在一个桶里,需要使用aws cloudfront CDN。

无论如何,看起来制作s3桶并在html/js中复制是很好的。

代码语言:javascript
复制
import boto3
cf = boto3.client('cloudfront')

cf.create_distribution(DistributionConfig=dict(CallerReference='firstOne',
            Aliases = dict(Quantity=1, Items=['mydomain.com']),
            DefaultRootObject='index.html',
            Comment='Test distribution',
            Enabled=True,
            Origins = dict(
                Quantity = 1, 
                Items = [dict(
                    Id = '1',
                    DomainName='mydomain.com.s3.amazonaws.com')
                ]),
            DefaultCacheBehavior = dict(
                TargetOriginId = '1',
                ViewerProtocolPolicy= 'redirect-to-https',
                TrustedSigners = dict(Quantity=0, Enabled=False),
                ForwardedValues=dict(
                    Cookies = {'Forward':'all'},
                    Headers = dict(Quantity=0),
                    QueryString=False,
                    QueryStringCacheKeys= dict(Quantity=0),
                    ),
                MinTTL=1000)
            )
)

当我尝试创建cloudfront发行版时,会得到以下错误:

InvalidOrigin:调用CreateDistribution操作时发生错误(InvalidOrigin):指定的源服务器不存在或无效。调用InvalidOrigin操作时发生错误( CreateDistribution ):指定的源服务器不存在或无效。

有趣的是,它似乎在抱怨原点,mydomain.com.s3.amazonaws.com,但是当我在web控制台中为s3桶创建一个发行版时,它对相同的来源域名没有问题。

更新:我可以让它与boto一起使用,但是我更愿意使用boto3:

代码语言:javascript
复制
import boto
c = boto.connect_cloudfront()
origin = boto.cloudfront.origin.S3Origin('mydomain.com.s3.amazonaws.com')
distro = c.create_distribution(origin=origin, enabled=False, comment='My new Distribution')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-08 19:53:01

结果表明,它们是一个必需的参数,没有正确地记录下来。

因为原产地是一个S3桶,所以您必须定义S3OriginConfig = dict(OriginAccessIdentity = ''),即使OriginAccessIdentity没有使用,并且是一个空字符串。

下面的命令可以工作。注意,您仍然需要一个桶策略来使对象可访问,还需要一个route53条目来别名我们想要的cloudfront生成的主机名。

代码语言:javascript
复制
cf.create_distribution(DistributionConfig=dict(CallerReference='firstOne',
            Aliases = dict(Quantity=1, Items=['mydomain.com']),
            DefaultRootObject='index.html',
            Comment='Test distribution',
            Enabled=True,
            Origins = dict(
                Quantity = 1, 
                Items = [dict(
                    Id = '1',
                    DomainName='mydomain.com.s3.amazonaws.com',
                    S3OriginConfig = dict(OriginAccessIdentity = ''))
                ]),
            DefaultCacheBehavior = dict(
                TargetOriginId = '1',
                ViewerProtocolPolicy= 'redirect-to-https',
                TrustedSigners = dict(Quantity=0, Enabled=False),
                ForwardedValues=dict(
                    Cookies = {'Forward':'all'},
                    Headers = dict(Quantity=0),
                    QueryString=False,
                    QueryStringCacheKeys= dict(Quantity=0),
                    ),
                MinTTL=1000)
            )
)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42092512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档