我根据AWS示例使用带有https passthrough的ELB,因为我们需要在实例处终止SSL。根据AWS的指南,我有一个现有的.ebextensions YAML文件,其中包含文件键。这很有效,直到我想为不同的环境使用不同的证书。
我的问题是我希望能够通过Cloudformation上传不同的SSL证书,具体取决于我部署到哪个环境。例如,test和dev获得测试证书,生产获得生产证书。
我知道如何使用映射,因此这不是问题,但我无法解决如何从Cloudformation将文件上传到Elastic Beanstalk环境。
我尝试在CloudFormation YAML的各个位置添加以下代码段,但它没有上传文件。这是代码片段中的错误,还是我错过了其他内容?我尝试添加EC2 :: Instance部分,但是在Beanstalk之外创建了一个新的EC2实例,这是我不想要的。
Metadata:
AWS::CloudFormation::Authentication:
S3Auth:
type: "s3"
buckets: ["s3-bucket"]
roleName: aws-elasticbeanstalk-ec2-role
AWS::Cloudformation:Init:
config:
files:
/etc/pki/tls/certs/server.crt:
mode: "000400"
owner: root
group: root
authentication: "S3Auth"
source: !FindInMap [Certificates, crt-file, !Ref Environment]
/etc/pki/tls/certs/server.key:
mode: "000400"
owner: root
group: root
authentication: "S3Auth"
source: !FindInMap [Certificates, key-file, !Ref Environment]
感谢您的帮助。
答案 0 :(得分:0)
您可以使用Elastic Beanstalk的normal file creation method。在名为certs.conf
的文件夹中创建名为.ebextensions
的文件并将其放入其中:
Resources:
AWSEBAutoScalingGroup:
Metadata:
AWS::CloudFormation::Authentication:
S3Auth:
type: "s3"
buckets: ["s3-bucket"]
roleName: aws-elasticbeanstalk-ec2-role
files:
"/etc/pki/tls/certs/server.crt":
mode: "000400"
owner: root
group: root
authentication: "S3Auth"
source: !FindInMap [Certificates, crt-file, !Ref Environment]
"/etc/pki/tls/certs/server.key":
mode: "000400"
owner: root
group: root
authentication: "S3Auth"
source: !FindInMap [Certificates, key-file, !Ref Environment]
如果!FindInMap
在该部分中不起作用,您可以随时使用一些构建脚本,在调用eb deploy
之前放置正确的证书。