使用Ruby on Rails部署AWS EB新环境时遇负载均衡器更新失败:证书未找到
嘿,我之前碰到过几乎一模一样的问题,你的情况应该是新创建的Elastic Beanstalk环境找不到你配置HTTPS所需的SSL证书——毕竟示例应用默认没启用HTTPS,所以不会触发这个错误。下面是几个针对性的解决办法,你可以一步步排查:
1. 先确认IAM用户有访问证书的权限
你的IAM用户得有读取AWS证书的权限才行,不管证书存在ACM(AWS Certificate Manager)还是IAM证书存储里。去IAM控制台检查用户的权限策略,确保包含这些权限:
acm:DescribeCertificate、acm:ListCertificates(如果用的是ACM证书)iam:GetServerCertificate、iam:ListServerCertificates(如果证书存在IAM里)
可以给用户附加一段类似这样的策略片段:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "acm:DescribeCertificate", "acm:ListCertificates", "iam:GetServerCertificate", "iam:ListServerCertificates" ], "Resource": "*" } ] }
2. 确保部署配置里的证书ARN完全正确
检查你的.elasticbeanstalk/config.yml或者环境变量,确认SSL证书的ARN没写错。你可以去ACM控制台或者IAM证书页面复制正确的ARN:
- ACM证书格式:
arn:aws:acm:us-east-1:123456789012:certificate/abc123-def456-ghi789-jkl012-mno345 - IAM证书格式:
arn:aws:iam::123456789012:server-certificate/MyCertificateName
如果用EB CLI部署,直接用命令设置:
eb setenv SSL_CERTIFICATE_ARN=你的证书ARN
或者在config.yml里添加配置项:
option_settings: aws:elb:listener:443: SSLCertificateId: 你的证书ARN
3. 证书区域要和EB环境区域匹配
ACM证书是区域限定的(除了CloudFront用的全球证书),如果你的新EB环境部署在us-west-2,那证书必须也在us-west-2的ACM里,否则EB肯定找不到。要是之前的development环境用的是另一个区域的证书,要么把证书复制到目标区域,要么把EB环境改到证书所在的区域。
4. 手动检查负载均衡器的HTTPS配置
有时候手动创建环境时,负载均衡器的HTTPS监听没正确关联证书。去AWS控制台找到你的EB环境,进入「配置」→「负载均衡器」,检查HTTPS监听的证书选择是否正确,手动指定正确的证书ARN后再重新部署试试。
5. 重置EB CLI配置(如果配置有缓存)
要是之前的EB CLI配置缓存了旧信息,试试删除.elasticbeanstalk目录后重新初始化:
rm -rf .elasticbeanstalk eb init -i
初始化的时候记得选对区域、应用,还有HTTPS相关的配置选项。
要是这些步骤都试过还不行,去EB的部署日志里看看详细错误信息,里面会明确告诉你是证书不存在、权限不够还是区域不匹配的问题,更容易定位。
内容的提问来源于stack exchange,提问作者Cruz Nunez

