mt logoMyToken
Total Market Cap:
0%
Fear & Greed Index:
0%
Spot --
Exchanges --
ETH Gas :--
EN
USD
APP
介绍Fenrir:Coinbase如何扩展无服务器应用程序

Overall

0

Activity

Funds Held

Trading Pairs

0

Registered Location

-

Followers

0

24h Exchange Volume
$0
0 BTC
2019/04/11 13:17:34发布,内容以 原文链接 为准

无服务器,特别是AWS Lambda,非常棒。它从0扩展到近无穷大,它几乎没有任何成本,它几乎与所有东西都集成在一起。从一个部署应用程序的工程师到一个帐户,再到许多部署到许多共享帐户的工程师,问题就开始了。很难确保应用程序遵循相同的良好命名和安全实践来阻止每个人踩到彼此的脚趾。

为数千名开发人员构建和部署数百个无服务器应用程序到数十个AWS账户提供安全愉快的体验是我们的目标。为此,我们开发并开源了我们的AWS SAM部署者 Fenrir 。这篇文章是关于我们如何使用Fenrir在大型组织中部署无服务器。

框架(SAM,无服务器......)不做什么

无服务器框架通常包括可以创建/更新AWS资源和部署代码的CLI。例如, 无服务器部署sam部署都使用AWS Cloud Formation(CF)来发布代码。这些部署命令在入门时非常有用,可以轻松地放入CI / CD管道中以加速应用程序的发布。

当更多工程师开始部署无服务器应用程序时,最好确保他们:

  • 使用一致的命名 :良好的资源命名(和标记),如Lambda和API Gateway,将保持帐户清洁,并明确哪些资源属于哪些项目。
  • 遵循建议的安全实践 :例如,通过为Lambdas提供单独的安全组和IAM角色来实践“最小特权”。
  • 创建一个可靠的工作流程 :以一种向开发人员显示发生的事情,发生的原因以及如何补救的方式彻底处理故障。
  • 记录部署内容 :快速回答当前部署的内容,使工程师能够调试并了解当前的世界状况。

我们的解决方案是建立一个集中的部署者。此部署程序为在同一AWS账户中工作的开发人员提供了明确的界限,并阻止部署,除非遵循常规做法。这消除了许多细节的认知开销,并允许工程师专注于他们的应用程序代码。

Fenrir无服务器无服务器部署程序

Fenrir是我们的AWS SAM部署者;其核心是将sam deploy命令重新实现为AWS Step Function,因此它是无服务器² )部署者。 sam deploy是python脚本的别名,具有两个步骤aws create-change-set和aws cloudformation execute-change-set。

Fenrir的状态机通过显式状态转换,重试和错误处理来复制这些步骤:

此状态机的输入是SAM模板,其中包含一些其他数据,如ProjectName,ConfigName和要部署到的AWS账户。然后,Fenrir状态机执行以下步骤:

  • 验证 :填写默认值然后验证模板是否正确,并允许使用所有引用的资源。
  • 锁定 :创建锁定以确保每个项目一次只能进行一次部署。
  • CreateChangeSet并等待执行 :为CF堆栈创建更改集。等待更改集验证并变为可用。
  • ExecuteChangeSet并等待Success :等待执行完成。

此状态机处于Success状态, FailureClean状态,其中释放未成功但清理成功,或者FailureDirty状态应该永远不会发生并将提醒团队。

Fenrir(就像我们的其他开源部署者Odin一样 )遵循Bifrost标准 ,在Coinbase上构建部署者。 Bifrost增加了多帐户支持,默认情况下的安全性,部署的可见性以及与现有工具的简单集成。

Fenrir不做的事

Fenrir仅支持AWS SAM的子集。限制模板范围可减少可能的命名冲突和安全风险的表面区域。

支持的资源是AWS :: Serverless :: Function,AWS :: Serverless :: Api,AWS :: Serverless :: LayerVersion,AWS :: Serverless :: SimpleTable。其中每个都有局限性,例如AWS :: Serverless :: Function资源的限制是:

  • FunctionName已生成且无法定义。
  • 角色和VPCConfig.SecurityGroupIds如果定义必须引用具有的资源。
  • VPCConfig.SubnetIds必须使DeployWithFenrir标记等于true。

支持的事件类型是:

  • Api:它必须具有RestApiId,它是对本地API资源的引用
  • S3:斗必须有
  • Kinesis:Stream必须拥有
  • DynamoDB:Stream必须具备
  • SQS:队列必须有
  • 时间表
  • CloudWatchEvent

SNS不在受支持事件列表中。在编写时,SNS不支持标记,因此很难验证Lambda是否允许侦听SNS主题。找到安全支持此类事件和资源的方法是Fenrir的未来目标。

你好Fenrir

与Fenrir一起使用的简单SAM模板包括ProjectName和ConfigName,例如template.yml将如下所示:

 ProjectName:“coinbase / deploy-test” 
ConfigName:“开发”
 AWSTemplateFormatVersion:“2010-09-09” 
转换:AWS :: Serverless-2016-10-31
资源:
带有HelloApi:
键入:AWS :: Serverless :: Api
属性:
StageName:dev
EndpointConfiguration:REGIONAL
你好:
键入:AWS :: Serverless :: Function
属性:
CodeUri :.
作用:lambda-role
处理程序:hello.lambda
运行时:go1.x
事件:
喜:
类型:Api
属性:
RestApiId:!Ref helloAPI
路径:/你好
方法:GET

你好lambda代码:

包主
导入“github.com/aws/aws-lambda-go/lambda”
 func main(){ 
lambda.Start(func(_ interface {})(interface {},error){
return map [string] string {“body”:“Hello”},nil
})
}

Fenrir使用Docker构建并捆绑发送给AWS的代码。 hello函数需要/hello.zip存在于构建的docker容器中,例如Dockerfile:

来自golang 
WORKDIR /
运行apt-get update && apt-get install -y zip
复制。 。
跑去github.com/aws/aws-lambda-go/lambda
RUN GOOS = linux GOARCH = amd64 go build -o hello.lambda。
RUN zip hello.zip hello.lambda

要使用步骤函数打包和部署模板,请运行fenrir package && fenrir deploy:

  1. package构建Docker镜像,然后提取zip文件
  2. deploy上传zip文件并将模板作为输入发送到Fenrir Step Function

履行

Fenrir主要使用以下方式实现:

goformation使用AWS CloudFormation 资源规范SAM规范来生成代码和JSON模式。然后Fenrir使用这些来编码,解码,修改和验证模板。此代码生成使Fenrir可以非常轻松地及时更新SAM并快速发布功能。

未来

构建可扩展,安全且易于使用的工具很困难。 Fenrir为我们的开发人员提供了尖端工具,并明确了解如何使用它们。这是一个巨大的胜利,但通过支持更多的SAM资源,事件和属性,仍有很大的改进空间。

由于CloudFormation不支持上传S3对象,因此SAM / Fenrir无法将静态网站部署到CloudFront后面的S3。未来的Fenrir功能是提供自定义CloudFormation资源 ,该资源可以将文件上载到S3以进行静态网站托管。这将使Fenrir成为一个全栈无服务器2部署者。

最后,Fenrir仍处于测试阶段,我们欢迎并在Github存储库上提供贡献或功能请求。

好读

如果您有兴趣帮助我们为加密市场的未来构建一个现代化,可扩展的平台,我们正在招聘基础设施工程师


介绍Fenrir:Coinbase如何扩展无服务器应用程序最初发布于The Coinbase Blog on Medium,人们通过突出显示和回应这个故事来继续对话。

Previous:社委会通过对“推广挖矿(试行)提案”进行周期调整的提案
News
No Data Available
Most FavoritedTop GainersConsecutive GainsMost Followed
#
Name
Fiat Price
Today's Change