尝试使用boto3自动部署静态网站。我有一个静态网站(ar角/javascript/html)坐在一个桶里,需要使用aws cloudfront CDN。
无论如何,看起来制作s3桶并在html/js中复制是很好的。
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:
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')发布于 2017-02-08 19:53:01
结果表明,它们是一个必需的参数,没有正确地记录下来。
因为原产地是一个S3桶,所以您必须定义S3OriginConfig = dict(OriginAccessIdentity = ''),即使OriginAccessIdentity没有使用,并且是一个空字符串。
下面的命令可以工作。注意,您仍然需要一个桶策略来使对象可访问,还需要一个route53条目来别名我们想要的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',
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)
)
)https://stackoverflow.com/questions/42092512
复制相似问题