使用python boto3部署带有s3和cloudfront的静态站点

使用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',

尝试使用boto3自动化静态网站的部署。我有一个静态网站(angular/javascript/html)放在一个桶中,需要使用aws cloudfront CDN

无论如何,看起来制作s3 bucket并在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):指定的源服务器不存在或无效。 调用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控制台中对其进行有效分发。等待亚马逊支持部门的回复