亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

lambda 層與 Go 兼容嗎?

lambda 層與 Go 兼容嗎?

Go
明月笑刀無情 2023-05-22 17:13:09
是否可以將 Golang lambda 與 AWS 的新 lambda 層功能一起使用?我一直在嘗試找到一種解決方案,以將層與用 Go 編寫的 Lambda 函數一起使用,但我一直未能這樣做。不過,我讓它與 python lambda 一起工作。我覺得因為 Go 代碼是編譯后的二進制文件,所以不可能在運行時使用層導入。如果我在本地有層的代碼,導入也會被編譯成二進制文件,這就違背了使用層的目的。有沒有人知道或有任何使用 Golang 的 Lambda 層的例子?
查看完整描述

3 回答

?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

Go 依賴項位于已編譯的二進制文件中,因此您不能/不需要使用層。問題在語言層面得到解決。它與編譯的事實沒有任何關系,C 和 C++ 二進制文件仍然具有依賴性。



查看完整回答
反對 回復 2023-05-22
?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

實際上,可以為 Go 層提供一個預編譯的插件,但是有太多的限制,它并不是很有用:

  • 插件和應用程序必須使用完全相同的編譯器版本進行編譯(例如,1.13.3 和 1.13.4 之間不兼容)。

  • 如果插件和應用程序都依賴于相同的依賴項,那么它們也必須使用完全相同的版本。

  • 當插件的 API 使用自定義接口和/或結構時,它們需要在共享的 Go 包中定義,該包必須由插件和應用程序導入。

  • 插件和應用程序共有的所有依賴項都必須存儲在相同的文件夾結構中!

在 AWS Lambda 層的情況下,上面提到的最后兩點使 Go 層變得毫無用處。由于應用程序代碼無論如何都需要導入共享包,為什么不導入駐留在 Go 層中的實際包呢?

如果我沒看錯,Go 插件系統將用于提供與主應用程序一起編譯和部署的可插入實現。它并非旨在供第三方用于交付自定義應用程序插件。

底線是:如果你真的想要,你可以使用 Go + AWS Lambda Layers,但在我看來,實際上不值得付出努力。


查看完整回答
反對 回復 2023-05-22
?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

不幸的是,到了 2022 年,這仍然是一個問題。

是的,您可以構建一個插件并創建一個層,將其注入您的 lambda,但這CGO_ENABLED是一個交易破壞者。

基本上,您的 lambdaCGO_ENABLED=0在構建步驟中需要。(例如。GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o main main.go

但是,在禁用 CGO 的情況下,在您的 lambda 中使用“插件”會導致錯誤 -plugin: not implemented

從我可以確認的情況來看,在本地,當 CGO 兩次都啟用時 - 即在構建插件和 go 模塊時,導入插件按預期工作。但是,在 AWS 中,要使 lambda 起作用,您需要在構建期間禁用 CGO,這意味著使用插件是脫離上下文的。


查看完整回答
反對 回復 2023-05-22
  • 3 回答
  • 0 關注
  • 176 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號