如何在部署期间使用非 AWS 资源扩展 AWS CDK

Posted

技术标签:

【中文标题】如何在部署期间使用非 AWS 资源扩展 AWS CDK【英文标题】:How to extend AWS CDK with non AWS Resources during deploy 【发布时间】:2020-10-04 22:55:04 【问题描述】:

我想使用 Sumo Logic 自动设置 AWS Application Load Balancer 日志的收集,如下所述:

https://help.sumologic.com/07Sumo-Logic-Apps/01Amazon_and_AWS/AWS_Elastic_Load_Balancer_-_Application/01_Collect_Logs_for_the_AWS_Elastic_Load_Balancer_Application_App

这涉及创建一个存储桶,使用 S3 源创建一个 Sumo Logic 托管收集器,获取 Sumo Logic 提供的收集器源的 URL,然后使用 HTTP 订阅创建一个 SNS 主题,其中订阅 URL 是由Sumo Logic 源代码。

问题在于 SumoLogic 源 URL 在合成时未知。必须部署 Bucket,然后创建 Sumlogic 事物,然后创建 SNS 主题。

尽我所能,我将不得不通过使用单独的堆栈单独调用 CDK 来做到这一点,这比较慢。一个堆栈来创建存储桶。部署该堆栈后,使用 Sumo Logic api 创建或确认之前创建的 Sumo Logic 托管收集器和源,部署另一个 CDK 以创建 SNS 主题和 HTTP 订阅。

我只是想知道是否有人知道这样做的更好方法,也许是某种可以使用的部署时间挂钩。

【问题讨论】:

【参考方案1】:

您可以通过两种方式(据我所知)自动收集 AWS Application Load Balancer。

    使用 CloudFormation
Sumo Logic 有一个 template,它为 AWS 应用程序负载均衡器创建收集过程,它是 AWS 可观察性解决方案的一部分。您可以分叉存储库,并可以在删除不需要的资源后创建自己的 CloudFormation 模板。 Sumo Logic 还有一个Serverless Application,它自动为现有和新的(在应用程序安装后创建的)负载平衡器启用访问日志记录。使用应用程序的示例 template。
    使用 Terraform
正如Grzegorz 所述,您也可以创建一个 terraform 脚本。

免责声明:目前受雇于 Sumo Logic。

【讨论】:

【参考方案2】:

您可以尝试使用自定义资源 SDK 调用来触发执行所需操作的 lambda。

https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_custom-resources.AwsSdkCall.html

【讨论】:

【参考方案3】:

(我知道这不是一个完美的答案,因为它建议使用其他工具,但我相信它可以满足问题中表达的需求)

使用 Terraform 怎么样?

sumologic_s3_source in Terraform 能够在 Sumo 创建源 AND 输出其 URL 以用于 Terraform 中的其他用途 - 例如设置 AWS 资源。

此文档甚至提到 URL 是返回值之一:

url - 与 SNS 一起使用以通知 Sumo Logic 新的 HTTP 端点 文件。

免责声明:我目前受雇于 Sumo Logic。

【讨论】:

以上是关于如何在部署期间使用非 AWS 资源扩展 AWS CDK的主要内容,如果未能解决你的问题,请参考以下文章

为啥 AWS Auto Scaling 在扩展期间会启动多个实例?

如何将现有资源从不同的 AWS 账户导入 AWS CDK

如何在 Windows Server 上的 Elastic Beanstalk 部署中正确使用 AWS Secrets Manager

如何使用 Elastic Beanstalk 配置 aws cli 配置文件?

在 AWS 中部署非 Web Java 应用程序

如何在不使用密钥的情况下将 GitHub 操作与 AWS 部署连接?