gpt4 book ai didi

amazon-web-services - 如何访问无服务器框架的 serverless.yml 中的插件输出?

转载 作者:行者123 更新时间:2023-12-04 08:00:28 24 4
gpt4 key购买 nike

上下文:为了实现完整的“基础设施即代码”,我想使用 certbot 编写请求 SSL 证书的过程。 ,使用 DNS 验证域 TXT记录,将证书上传到 Amazon Certificate Manager (ACM),最后将证书 ACM ARN 附加到我的 Cloudfront 分配。这一切都应该通过 Serverless 框架来完成。

我看到了 2 个可能的选择来实现这项工作。

选项 1:使用异步 JavaScript 文件变量

即在serverless.yml我会定义如下条目:

custom:

domains:
prod: tommedema.tk

ssl:
prod:
dnsTxtRoot: ${{file(scripts/request-cert.js):cert.dnsTxtRoot}}
dnsTxtWww: ${{file(scripts/request-cert.js):cert.dnsTxtWww}}
certArn: ${{file(scripts/request-cert.js):cert.certArn}}

资源将像这样使用这些变量:

- Type: TXT
Name: _acme-challenge.www.${{self:custom.domains.${{self:provider.stage}}, ''}}
TTL: '86400'
ResourceRecords:
- ${{self:custom.ssl.${{self:provider.stage}}.dnsTxtWww}}

哪里scripts/request-cert.js看起来像:

module.exports.cert = () => {
console.log('running async logic')

// TODO: run certbot, get DNS records, upload to ACM

return Promise.resolve({
dnsTxtRoot: '"LnaKMkgqlIkXXXXXXXX-7PkKvqb_wqwVnC4q0"',
dnsTxtWww: '"c43VS-XXXXXXXXXWVBRPCXXcA"',
certArn: 'arn:aws:acm:us-east-1:XXXX95:certificate/XXXXXX'
})
}

这里的问题是,似乎无法将参数发送到 request-cert.js ,或者让此脚本了解 serverlessoptions插件参数(因为它不是插件,而是没有上下文的简单脚本)。这意味着脚本无法知道部署所针对的阶段和域等,因此缺少请求证书所需的变量。

因此,选项 1 似乎不可能。

选项 2:创建插件

当然,我可以创建一个插件,它将包含所有必需的变量,因为它可以访问 serverlessoptions对象。现在的问题是我必须访问 serverless.yml 内插件的输出 ,到目前为止我还没有看到如何做到这一点。 IE。我希望能够做这样的事情:

custom:

domains:
prod: tommedema.tk

ssl:
prod:
dnsTxtRoot: ${{myPlugin:cert.dnsTxtRoot}}
dnsTxtWww: ${{myPlugin:cert.dnsTxtWww}}
certArn: ${{myPlugin:cert.certArn}}

但这似乎不可能。是这样吗?

如果这也不可能,那么我如何实现以编程方式(即遵循基础设施即代码原则)使用自定义 SSL 证书部署我的服务的目的,而无需任何手动步骤?即

  1. 向 certbot 请求证书
  2. 从 certbot 接收 DNS txt 记录以进行验证
  3. 将 DNS txt 记录附加到 Route53 记录集
  4. 部署 DNS 记录并验证证书
  5. 从 certbot 下载证书并将其上传到 ACM
  6. 从 ACM 接收证书 ARN
  7. 对 cloudformation 模板内的 cloudfront 分发中的证书 ARN 的引用
  8. 重新部署并附加证书 ARN

最佳答案

可以在部署时执行此操作,但证书会过期,因此最好使其成为重复的事情。

当我遇到这个问题时,我创建了一个 Lambda 来更新插入 SSL 证书并安装它。 (它需要很长的超时,但这很好 - 它不需要经常运行)。它需要的 key 可以作为安全环境变量给出。

然后我使用serverless-warmup-plugin设置每日触发器来检查证书是否需要刷新。该插件也可配置为在部署时预热相关的 lambda,这使我能够在每次部署时检查过期或丢失的 SSL 证书。

也许你可以做类似的事情。

关于amazon-web-services - 如何访问无服务器框架的 serverless.yml 中的插件输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47253027/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com