AWS Lambda切分不同環境

更新 發佈閱讀 4 分鐘

在沒有分環境之前,每一隻lambda只有一個code console給所有人一起編輯,開發好了就deploy,根據設定的trigger觸發執行。

現在我們希望能夠在code console開發,然後deploy到不同的stage,目標是不同stage的api gateway能夠調用該lambda的不同環境代碼。

Lambda設定

基本flow

基本flow

首先,我們在目標lambda console開發,開發好了以後,點選右上方的發布新版本:

raw-image

接著我們新建別名,別名會綁定指定的lambda版本,這邊我們將別名取為stage名稱:

raw-image

之後如果code有改(包含升級lambda有使用的layer版本),我們就會再發布新版本,並到別名的地方更新版本:

編輯別名的lambda版本

編輯別名的lambda版本

選擇別名要用的lambda版本

選擇別名要用的lambda版本

我們等等會繼續回來設定lambda的權限,這邊先設定lambda的trigger: api gateway。

API Gateway設定

接著我們來設定api gateway:

設定不同stage的api gateway能吃到相應的lambda別名

設定不同stage的api gateway能吃到相應的lambda別名

首先我們會去不同的stage來去設定Stage變數:

到相應的api gateway stage設定stage變數

到相應的api gateway stage設定stage變數

stage變數新增要對應的lambda別名為何

stage變數新增要對應的lambda別名為何

接著我們按照一般API開發流程,新增resource:

新增api resource

新增api resource

raw-image
新增api

新增api

接下來要特別注意了,我們要將這個api的呼叫能夠動態根據api gateway stage來去做不同的lambda別名呼叫。

這邊我們利用stage變數,會應用在lambda的綁定上:

利用stage變數動態呼叫不同別名的lambda

利用stage變數動態呼叫不同別名的lambda

在Lambda function的地方,我們先搜尋要綁定的lambda,接著再做後加上:${stageVariables.lambdaAlias}


為每個lambda別名設定權限

這邊有兩種做法,第一種是用aws cli(請確保你已經設定好),這種方式最快,因為只需要把aws跳出來給你的指令稍作修改就好:

複製黃色區塊的指令,我們要將lambda冒號後的${stageVariables.lambdaAlias}換成實際上的別名名稱

複製黃色區塊的指令,我們要將lambda冒號後的${stageVariables.lambdaAlias}換成實際上的別名名稱

直接複製黃色區塊的指令,把--function-name裡面的值冒號後替換成該lambda的別名,我們有staging跟production,所以就需要兩組指令。

aws lambda add-permission
--function-name "你的lambda arn:staging"
--source-arn "這會是這個api的arn"
--principal apigateway.amazonaws.com
--statement-id 這是aws生成給我們的辨識碼
--action lambda:InvokeFunction這是權限名稱
aws lambda add-permission
--function-name "你的lambda arn:production"
--source-arn "這會是這個api的arn"
--principal apigateway.amazonaws.com
--statement-id 這是aws生成給我們的辨識碼
--action lambda:InvokeFunction這是權限名稱


第二種方法是利用aws console的圖形界面設定,要在lambda的每個別名分別設定一次:

分別為每個別名設定lambda權限

分別為每個別名設定lambda權限

接著就會到別名的設定頁面,點選左側權限,再到最下面點選新增權限開始設定

接著就會到別名的設定頁面,點選左側權限,再到最下面點選新增權限開始設定

我們將剛才在api gateway設定時aws請我們設定的權限命令值填入:

raw-image

每個別名都依序設定好之後,我們就可以在api gateway那邊先test,如果沒有設定成功,會跳500,說沒有權限,如果test沒問題之後就可以按右上角deploy API到不同的api gateway stage開放他們

raw-image

這樣就大功告成拉!


目前覺得比較麻煩的地方就是如果layer有改,就還要重新創新版本,更新別名綁定的版本,有點麻煩,不像之前沒有別名的時候只要去layer那邊一鍵把版本xx layer版本1的lambda升級到xx layer版本2就好。








留言
avatar-img
留言分享你的想法!
avatar-img
JHIHLEI LIN的沙龍
4會員
10內容數
分享感情與生活的故事,期望我們都能在愛與被愛的路上感到幸福,並且在這個只有活一次的人生裡好好的活成自己喜歡的樣子
JHIHLEI LIN的沙龍的其他內容
2024/01/18
第一份正職工作 在iot公司擔任後端工程師,一上工就使用先前沒用過的php/laravel,也馬上負責公司產品的架構規劃,先前資料庫只有簡單記載使用者跟使用者的一些設定,很多地方有資料不一致的問題,產品內容還有很多實體的關係沒有被定義進資料庫都是這次改版我要做的事情。 改版納入公司、機器
Thumbnail
2024/01/18
第一份正職工作 在iot公司擔任後端工程師,一上工就使用先前沒用過的php/laravel,也馬上負責公司產品的架構規劃,先前資料庫只有簡單記載使用者跟使用者的一些設定,很多地方有資料不一致的問題,產品內容還有很多實體的關係沒有被定義進資料庫都是這次改版我要做的事情。 改版納入公司、機器
Thumbnail
2024/01/14
發送表單用get跟post看起來好像都無所謂,然而事實並非如此,使用GET的風險如下: 安全性問題 機密資訊為何不宜用GET,是因為由GET方法提交的表單會將欄位的key,value顯示於URL上,想像一下如果小明借用你的電腦,查看你的網頁歷史紀錄時就可以看到你的帳密了,多可怕! 再來就是如果
2024/01/14
發送表單用get跟post看起來好像都無所謂,然而事實並非如此,使用GET的風險如下: 安全性問題 機密資訊為何不宜用GET,是因為由GET方法提交的表單會將欄位的key,value顯示於URL上,想像一下如果小明借用你的電腦,查看你的網頁歷史紀錄時就可以看到你的帳密了,多可怕! 再來就是如果
2023/12/22
先須知識: 了解什麼是變數 作用域scope 在Rust中,變數預設是不可變的 let name = "Zoe"; // 預設變數不可變 也就同於Javascript中的const,若想讓變數可變則需要在let後面加上mut關鍵字: let mut name = "Vicky"; nam
Thumbnail
2023/12/22
先須知識: 了解什麼是變數 作用域scope 在Rust中,變數預設是不可變的 let name = "Zoe"; // 預設變數不可變 也就同於Javascript中的const,若想讓變數可變則需要在let後面加上mut關鍵字: let mut name = "Vicky"; nam
Thumbnail
看更多
你可能也想看
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
建構Anytype之前..... 1.清晰劃分工作區 2.選擇模板套用 3.改變外觀界面
Thumbnail
建構Anytype之前..... 1.清晰劃分工作區 2.選擇模板套用 3.改變外觀界面
Thumbnail
本章目的是為讀者提供有關如何設置JavaScript開發環境的知識,包括在瀏覽器、Node.js和各種編輯器和IDE中編寫和運行JavaScript的信息。此外,本章還介紹了如何架設本地開發伺服器以模擬實際的網頁環境。這些知識對於希望開發前端應用或後端服務的JavaScript開發者來說都是必要的。
Thumbnail
本章目的是為讀者提供有關如何設置JavaScript開發環境的知識,包括在瀏覽器、Node.js和各種編輯器和IDE中編寫和運行JavaScript的信息。此外,本章還介紹了如何架設本地開發伺服器以模擬實際的網頁環境。這些知識對於希望開發前端應用或後端服務的JavaScript開發者來說都是必要的。
Thumbnail
對 AWS Certified Cloud Practitioner 證照考試難度的看法、學習方法和考試內容的介紹。
Thumbnail
對 AWS Certified Cloud Practitioner 證照考試難度的看法、學習方法和考試內容的介紹。
Thumbnail
Cloud Run 允許您指定哪些修訂版應該接收流量,並指定不同版本接收的流量比例。Revisions 也能使您能夠回滾到先前的版本、逐步增加新版本的流量比例,或在多個修訂版之間拆分流量。
Thumbnail
Cloud Run 允許您指定哪些修訂版應該接收流量,並指定不同版本接收的流量比例。Revisions 也能使您能夠回滾到先前的版本、逐步增加新版本的流量比例,或在多個修訂版之間拆分流量。
Thumbnail
本文介紹了使用PyMuPDF,AWS Lambda和Docker將PDF文件轉換為圖像的高效方法。同時提到了在執行過程中可能會遇到的部分問題和解決方法。
Thumbnail
本文介紹了使用PyMuPDF,AWS Lambda和Docker將PDF文件轉換為圖像的高效方法。同時提到了在執行過程中可能會遇到的部分問題和解決方法。
Thumbnail
實驗目的:Lambda@Edge (L@E) 讓 CLoudFront (CF) 回源時,自動選擇較近的 S3 region 回源
Thumbnail
實驗目的:Lambda@Edge (L@E) 讓 CLoudFront (CF) 回源時,自動選擇較近的 S3 region 回源
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News