如何通过 Cloudformation 在 Beanstalk 实例上获取 SSL 证书
How do you get an SSL cert on a Beanstalk instance via Cloudformation
我按照 AWS 示例使用带 https 直通的 ELB,因为我们需要在实例处终止 SSL。根据 AWS 指南,我有一个现有的 .ebextensions YAML 文件,其中包含文件密钥。这很好用,直到我想为不同的环境使用不同的证书。
我的问题是我希望能够根据部署到的环境通过 Cloudformation 上传不同的 SSL 证书。比如test和dev拿到test证书,production拿到production证书。
我知道如何使用映射,所以这不是问题,但我不知道如何从 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]
感谢您的帮助。
您可以使用 Elastic Beanstalk 的 normal file creation method。在名为 .ebextensions
的文件夹中创建一个名为 certs.conf
的文件并将其放入其中:
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
.
之前将正确的证书放在适当的位置
我按照 AWS 示例使用带 https 直通的 ELB,因为我们需要在实例处终止 SSL。根据 AWS 指南,我有一个现有的 .ebextensions YAML 文件,其中包含文件密钥。这很好用,直到我想为不同的环境使用不同的证书。
我的问题是我希望能够根据部署到的环境通过 Cloudformation 上传不同的 SSL 证书。比如test和dev拿到test证书,production拿到production证书。
我知道如何使用映射,所以这不是问题,但我不知道如何从 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]
感谢您的帮助。
您可以使用 Elastic Beanstalk 的 normal file creation method。在名为 .ebextensions
的文件夹中创建一个名为 certs.conf
的文件并将其放入其中:
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
.