使用python boto3部署带有s3和cloudfront的静态站点
尝试使用boto3自动化静态网站的部署。我有一个静态网站(angular/javascript/html)放在一个桶中,需要使用aws cloudfront CDN 无论如何,看起来制作s3 bucket并在html/js中进行复制很好使用python boto3部署带有s3和cloudfront的静态站点,python,amazon-web-services,amazon-s3,amazon-cloudfront,boto3,Python,Amazon Web Services,Amazon S3,Amazon Cloudfront,Boto3,尝试使用boto3自动化静态网站的部署。我有一个静态网站(angular/javascript/html)放在一个桶中,需要使用aws cloudfront CDN 无论如何,看起来制作s3 bucket并在html/js中进行复制很好 import boto3 cf = boto3.client('cloudfront') cf.create_distribution(DistributionConfig=dict(CallerReference='firstOne',
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):指定的源服务器不存在或无效。
调用CreateDistribution操作时发生错误(InvalidOrigin):指定的源服务器不存在或无效
有趣的是,它似乎在抱怨源代码mydomain.com.s3.amazonaws.com,但是当我在web控制台中为s3 bucket创建一个发行版时,它与相同的源代码域名没有问题
更新:
我可以通过以下方式使用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')
结果表明,它们是一个未正确记录的必需参数 因为Origin是一个S3 bucket,所以即使没有使用OriginAccessIdentity,也必须定义S3OriginConfig=dict(OriginAccessIdentity=''),并且它是一个空字符串 下面的命令起作用。注意,您仍然需要一个bucket策略来访问对象,还需要一个route53条目来别名我们希望cloudfront生成的主机名的cname
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)
)
)
六羟甲基三聚氰胺六甲醚。。。
mydomain.com
不应该是bucket名称吗?难道你不认为桶名中可以有点?允许使用点和破折号。不过,我确实尝试了一个没有“.”字符的bucket名称,但我得到了相同的错误。在aws网络控制台中使用相同来源的域名字符串确实有效。但是它存在吗?我是说。。您使用的域实际有效吗?启用一些调试或任何必要的功能来捕获生成的请求体XML?InvalidOrigin
错误似乎是指以下情况之一:没有这样的bucket,bucket name>63个字符,bucket name中的大写字符,bucket name中的相邻点,bucket name中的无效字符,或者bucket hostname未在.s3.amazonaws.com
末尾添加。@gsaslis是的,bucket存在。我可以在web控制台中对其进行有效分发。等待亚马逊支持部门的回复