写点什么

如何将 AWS Lambda 与 Spinnaker 集成

2020 年 2 月 27 日

如何将 AWS Lambda 与 Spinnaker 集成

2018 年中期,AWS 就开始助力 Netflix 的一个备受期待的开源项目 Spinnaker。Spinnaker 是一个基于云的持续交付平台,用于快速可靠地发布软件更改。借助 Spinnaker,开发人员可以专注于编写代码和部署应用程序,而无需为底层基础设施而费心。Spinnaker 可与 Git、Jenkins 和 TravisCI 等工具无缝集成。使用 Spinnaker,您可以灵活地在云中或您选择的容器平台(如 Amazon Elastic Container Service (Amazon ECS) 或 Amazon Elastic Kubernetes Service (Amazon EKS))中运行的虚拟机上部署应用程序。AirbnbPinterestSnapAutodeskSalesforce 等 AWS 客户都在使用 Spinnaker 为开发人员安全可靠地部署应用程序铺平道路。


2019 年,AWS 将重点放在了 Spinnaker 的多项重要增强功能上。在过去的几个月里,我们与 Netflix 的交付工程团队合作,为 Spinnaker 添加了全新的函数计算基元,以便您可以通过 Spinnaker UI 本身管理和部署 AWS Lambda 函数。Autodesk 的工程运营经理 Brandon Leach 发表了题为 Organizational Challenges of Implementing Continuous Delivery with Spinnaker 的演讲,介绍了 AWS Lambda 与 Spinnaker 的集成将如何为他们的开发人员社区提供帮助。去年,AWS 团队在圣迭戈举行的 Spinnaker 峰会上发表了演讲;Spinnaker on AWS: A State of the Union (AWS) 演讲录像可让您更深入地了解我们正在从事的工作。


我们来进一步了解一下如何将 AWS Lambda 与 Spinnaker 集成。


先决条件

首先,您必须具备可正常运行的 Spinnaker 环境,Amazon EKS 是设置此环境的绝佳平台。如需详细了解如何执行此操作,请参阅 Irshad Buchh 所写的文章 Continuous Delivery using Spinnaker on Amazon EKS


启用 AWS Lambda Clouddriver

要启用 AWS Lambda 支持,我们必须更新 Spinnaker 配置。Halyard 是 Spinnaker 的配置管理工具,它支持自定义配置文件。我们将创建一个启用 AWS Lambda 的自定义 Halyard Clouddriver 配置文件。


我们将创建一个 clouddriver-local.yml 文件,以扩展我们的配置。此“-local”名称会将更改添加到我们现有的 clouddriver 配置中,并启用 AWS Lambda 支持。


首先,登录用于配置 Halyard 的主机,并创建以下文件:


Bash


vi ~/.hal/default/profiles/clouddriver-local.yml
复制代码


clouddriver-local.yml 中添加以下行,替换相应参数以匹配您的配置 (accountId, regions, assumeRole):


Bash


aws:  lambda: enabled: true accounts: - name: test    lambdaEnabled: true    accountId: 'xxxxxxxxxxxx'    regions:     - name: us-west-2    - name: us-east-1    assumeRole: role/your-custom-role-name
复制代码


有关 API 的更多详细信息,请参阅 AWS Lambda 支持文档


接下来,您必须启用新函数 UI。函数管理是作为基于标志的自定义功能推出的,默认情况下处于禁用状态。


要覆盖此生成的设置并提供自定义设置,我们必须启用该标志:


Bash


vi ~/.hal/default/profiles/settings-local.js
复制代码


添加以下行:


Bash


window.spinnakerSettings.feature.functions = true
复制代码


现在,您的配置应该如下所示:


Bash


$ cat ~/.hal/default/profiles/settings-local.jswindow.spinnakerSettings.feature.functions = true
复制代码


部署您的 Halyard 更改:


Bash


$ hal deploy apply
复制代码


验证您的 Kubernetes Pod 是否已启动并正在运行:


Bash


ubuntu:~/.hal/default/profiles$ kubectl get pods -n spinnakerNAME READY  STATUS RESTARTS  AGEspin-clouddriver-6f4d9946c6-gblmg  1/1  Running  0 1dspin-deck-86588476cb-kn926 1/1  Running  0 1dspin-echo-54d9b97449-8h2gz 1/1  Running  0 1dspin-front50-55d7995ffb-nzwdh  1/1  Running  0 1dspin-gate-d8584db7f-h5cj9  1/1  Running  0 1dspin-igor-69d6b458ff-7ntr9 1/1  Running  0 1dspin-orca-7877865879-9lgzv 1/1  Running  0 1dspin-redis-77f74664b5-p8whk  1/1  Running  0 1dspin-rosco-658985dd44-mc2j9  1/1  Running  0 1d
复制代码


您可以根据需要进一步对 Pod 进行问题排查:


Bash


kubectl logs -f -n spinnaker spin-clouddriver-xxxx
复制代码


部署了最新版本的 Deck(即 Spinnaker UI)并满足了上述要求后,您会注意到每个应用程序中都会显示函数选项卡。以下屏幕截图提供了一个示例:



在 Spinnaker 中使用 AWS Lambda

创建 AWS Lambda 函数

要创建新的 AWS Lambda 函数,请导航至函数选项卡,然后单击创建函数按钮。在创建新函数表单中填写相应详细信息,如函数名称运行时S3 存储桶S3 键处理程序,以及用于发布的选项。填写完表单后,您可以单击创建按钮,这样 AWS Lambda 函数就创建好了。然后,您可以导航到 AWS 控制台并查看新创建的 AWS Lambda 函数。



下面的 AWS 控制台屏幕截图显示了由 Spinnaker 创建的新 AWS Lambda 函数。请注意由 Spinnaker 创建的新 AWS Lambda 函数是如何以 Spinnaker 应用程序的应用程序名称为前缀的。



通过 Spinnaker UI 查看 AWS Lambda 函数

导航到与某个应用程序对应的函数选项卡之后,您将看到列出的与该应用程序对应的可用函数。单击任一可用函数可显示函数详细信息,例如上次修改时间、VPC 和函数 ARN。



更新 AWS Lambda 函数

单击与某个 AWS Lambda 函数对应的函数操作按钮,即可访问编辑函数详细信息页面。



进入“编辑函数”屏幕之后,您可以编辑详细信息,然后单击更新按钮,此操作会在后台调用更新函数 API,而函数几乎会即时更新。您可以再次导航到 AWS 控制台,看看更新是否已在控制台中体现出来。



删除 AWS Lambda 函数

单击与某个 AWS Lambda 函数对应的函数操作按钮,即可访问删除函数按钮。单击删除函数按钮后,系统会提示您确认删除,在您确认后,函数就会被删除。要验证此操作,您可以导航到 AWS Lambda 控制台并列出现有函数。



ALB 与 AWS Lambda 函数集成

去年,我们宣布支持 AWS Lambda 作为 Application Load Balancer (ALB) 目标,这是我们添加的另一项重要功能,它成为我们为上游所做的最新贡献的一部分。在 Spinnaker 内,许多客户利用 Elastic Load Balancing 来构建可扩展的应用程序。自今日起,客户现在能够通过 Spinnaker UI 将 AWS Lambda 函数注册为 ALB 目标组的目标类型。


第 1 步:创建以 AWS Lambda 为目标类型的目标组

在 Spinnaker UI 中,导航到负载均衡器创建控制台。选择 AWS 为提供商,ALB 为负载均衡器类型。继续创建目标组,您会注意到列表中已添加一个新的目标类型 lambda。选择 lambda 作为目标类型。将“路径”从 /healthcheck 更改为 /,然后单击创建。这样即会创建 ALB,以及以 AWS Lambda 为目标类型的目标组。



第 2 步:将函数与目标组关联

导航到“函数”选项卡,然后尝试创建一个函数或更新现有函数的详细信息。在本例中,我们来尝试创建一个新函数。创建新函数屏幕包含目标组名称字段。粘贴“第 1 步”中创建的目标组名称,然后继续创建 AWS Lambda 函数。



您可以导航到 AWS EC2 控制台,看看 AWS Lambda 函数是否已与目标组关联。



注意:如果要将现有函数与目标组关联,则必须明确授予目标组调用 AWS Lambda 函数的权限。这尚未纳入我们的实施流程,但已在我们的未来发展路线图中。权限可以通过 AWS CLI 授予,如下所示:


Bash


`aws AWS Lambda add-permission \ --function-name AWS Lambda-function-arn-with-alias-name \ --statement-id elb1 \ --principal elasticloadbalancing.amazonaws.com \ --action AWS Lambda:InvokeFunction \ --source-arn target-group-arn`
复制代码


局限与未来发展

我们花费了大量时间在 Spinnaker 中启用 AWS Lambda 功能,但是目前尚未达到预期。我们将继续改善用户体验,例如为 AWS Lambda 配置参数(如 IAM 角色、目标组等)提供下拉值。展望未来,我们希望为 AWS Lambda 添加本地管道支持。在此期间,我们的一个合作伙伴撰写了一篇值得一看的文章,即 AWS Lambda & Custom Webhook Stages,其中解释了如何扩展 Spinnaker 管道以支持 AWS Lambda。


本文转载自 AWS 技术博客。


原文链接:https://amazonaws-china.com/cn/blogs/china/how-to-integrate-aws-lambda-with-spinnaker/


2020 年 2 月 27 日 16:43129

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布
暂无评论
发现更多内容

Dubbo微服务调用时序图

andy

供应链产品溯源介绍

无誉

区块链 产品 电商 供应链 盘点2020

OpenLookeng连接器-Clickhouse connector性能测试报告

Galaxy数据平台

数据库 数据分析 Clickhouse

联想小新潮7000安装CentOS8.8步骤

莫问

软件架构知识树

andy

十二周总结

水浴清风

第十二周课后练习

落朽

面试官:说一下AQS共享/独占式获取/释放资源的区别

程序员小毕

Java 源码 并发编程 AQS 设计模式

数字货币合约交易系统软件APP开发

开發I852946OIIO

系统开发

架构师训练营第 1 期 - 第 13 周 - 命题作业

wgl

「架构师训练营第 1 期」

分布式套路之分库分表漫谈

程序员小毕

Java 架构 分布式 编程语言 计算机

作业-第12周

arcyao

Week12作业

lggl

大作业二

饭桶

架构师训练营大作业

Cheer

「架构师训练营 4 期」 第二周 - 0201

凯迪

案例研究之聊聊 QLExpress 源码 (二)

小诚信驿站

源码分析 小诚信驿站 28天写作 QLExpress源码 聊聊源码

架构师第 5 课作业及学习总结

小诗

「架构师训练营第 1 期」

软件架构设计实战

andy

上链智能合约系统开发|上链智能合约APP软件开发

开發I852946OIIO

系统开发

从代码到部署微服务实战(一)

Kevin Wan

go 微服务 microservice go-zero

架构师第 12 课作业及学习总结

小诗

架构师训练营第 1 期 - 第 13 周 - 学习总结

wgl

「架构师训练营第 1 期」

他们说飞机很安全,你信吗?

Justin

心理学 概率 28天写作

第 12 周作业

Steven

极客时间 架构大作业,快递平台架构搭建

博古通今小虾米

极客时间 架构

架构入门感悟之十二

莫问

架构师训练营第 1 期 大作业一

李循律

大作业一

饭桶

架构师第 13 课作业及学习总结

小诗

「架构师训练营第 1 期」

DAPP智能合约APP开发|DAPP智能合约软件系统开发

开發I852946OIIO

系统开发

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

如何将 AWS Lambda 与 Spinnaker 集成-InfoQ