簡體   English   中英

CDK:單獨部署微服務端點 (lambda)

[英]CDK: Deploy microservice endpoints (lambdas) individually

我正在為將使用 APIGateway 的 RestAPI 的微服務編寫帶有 CDK 的 IAAC。

我有一個包含所有 lambda 和 restApi 的堆棧,我可以很好地部署所有內容。

現在的問題是,當兩個人在不同的端點上工作時,我希望他們能夠只部署他們正在處理的端點(lambda)。 目前,當他們部署時,CDK 從他們的 repo 部署所有端點,覆蓋某人可能從他們的分支機構部署的更改。

我很樂意分享一些代碼,但我不確定要分享什么。 我想我可以使用一些幫助來構建堆棧中的代碼來實現我所需要的。

您有一個 api 網關在來自兩個不同存儲庫的兩個不同端點之間共享。

我能想到幾種方法:

選項 1:我們需要 4 個堆棧。

  • 網關堆棧:Api 網關和根端點。
  • Endpoint1 堆棧:Lambda 和必要的路由。
  • Endpoint2 堆棧:Lambda 和必要的路由。
  • 網關部署堆棧:部署階段。

每次更改 lambda function 時,部署自己的堆棧和部署堆棧。

選項 2:我們只需要 1 個堆棧,但單獨部署 lambda。

  • 部署所有內容的單個 CDK 項目。 唯一要記住的是 lambda 函數的工件應該從 S3 存儲桶位置獲取。
  • Within individual pipelines of each lambda, copy artifacts to same S3 location referenced by lambda in cdk and trigger an update to lambda with a aws cli update-function-configuration as simple of update description with a timestamp or an env variable, just to trigger a新部署。
  • 這樣,我們可以無縫部署 CDK 管道或單獨的 lambda 管道

您有 2 個選項來解決這個問題,而無需做太多工作。

第一個是使用代碼來識別誰在部署堆棧。 如果開發人員 1 正在部署堆棧,則將一些環境變量或參數設置為堆棧。 基於該值,CDK 代碼應僅編譯 1 個端點存儲庫。

第二種選擇是不將存儲庫構建為(CDK)部署的一部分。 使用單獨構建 repo 代碼的持續交付(或其他任何東西),CDK 只部署它們。

根據您項目的背景,任何一種策略都應該適合您。 或者,如果直到現在還沒有涉及,請分享更多上下文。

感謝您的輸入。 我采取了以下對我有用的方法:

const testLambda = new TestLambda(app, "dev-test-lambda", {
  ...backendProps.dev,
  dynamoDbTable: docStoreDev.store,
});

const restApiDev = new RestApiStack(app, "dev-RestApi", {
  ...backendProps.dev,
  hostedZone: hostedZones.test,
  testFunction: testLambda.endpointFunction,
});

現在,如果開發人員只想部署他們的 lambda,他們只會部署 lambda 的堆棧,不會部署其他任何東西。 由於 restApiStack 需要 lambda 作為依賴項,因此部署它還將同時部署所有其他 lambdas。

還有一個想法是讓開發人員使用他們的代碼分支名稱部署管道,這樣他們就可以擁有一個完全成熟的環境,而不必擔心覆蓋其他開發人員的 lambda。

一旦他們完成了該功能,他們只需將他們的代碼合並到主分支中並銷毀他們自己的管道。

這是一種常見的方法:-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM