使用 .zip 封存檔部署 Ruby Lambda 函數 - AWS Lambda

使用 .zip 封存檔部署 Ruby Lambda 函數

您的 AWS Lambda 函數的程式碼由指令碼或編譯程式及其相依項所組成。使用部署套件將函數程式碼部署到 Lambda。Lambda 支援兩種類型的部署套件:容器映像和 .zip 封存檔。

若要建立 .zip 存檔檔案的部署套件,您可以為命令列工具使用內建 .zip 檔案封存公用程式或任何其他 .zip 檔案公用程式 (例如 7zip)。請注意使用 .zip 檔案作為部署套件的下列需求:

  • .zip 檔案必須包含函數程式碼和用於在 Lambda 上執行函數程式碼 (如果適用) 的任何相依性。如果您的函數僅依賴於標準程式庫或 AWS 開發套件程式庫,則不需要在 .zip 檔案中包含這些程式庫。這些程式庫包含支援的 Lambda 執行時間環境。

  • 如果 .zip 檔案大於 50 MB,建議您將檔案從 Amazon Simple Storage Service (Amazon S3) 儲存貯體上傳至您的函數。

  • 如果您的部署套件包含原生程式庫,您可以使用 AWS Serverless Application Model(AWS SAM)。您可以將 AWS SAM CLI sam build 命令搭配 --use-container 使用來建立您的部署套件。此選項會在與 Lambda 執行環境相容的 Docker 映像內建置部署套件。

    如需詳細資訊,請參閱 AWS Serverless Application Model 開發人員指南中的 sam 建置

  • 您需要建置要與函數的這個指令集架構相容的部署套件。

  • Lambda 使用 POSIX 檔案許可,因此在建立 .zip 封存檔之前,您可能需要設定部署套件資料夾的許可

Prerequisites

AWS CLI 是開放原始碼工具,可讓您在命令列 shell 中使用命令來與 AWS 服務互動。若要完成本節中的步驟,您必須執行下列各項:

工具與程式庫

Lambda 為 Ruby 執行時間提供下列工具和程式庫:

適用於 Ruby 的工具和程式庫

  • AWS SDK for Ruby:適用於 Ruby 程式設計語言的官方 AWS 開發套件。

更新不含任何依存項目的函數

若要使用 Lambda API 更新函數,請使用 UpdateFunctionCode 操作。建立一個包含函數程式碼的封存檔,然後使用 AWS Command Line Interface (AWS CLI) 加以上傳。

更新不含任何依存項目的 Ruby 函式

  1. 建立 .zip 檔案封存。

    zip function.zip function.rb
  2. 使用 update-function-code 命令來上傳套件。

    aws lambda update-function-code --function-name my-function --zip-file fileb://function.zip

    您應該會看到下列輸出:

    { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", "Runtime": "ruby2.5", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "function.handler", "CodeSha256": "Qf0hMc1I2di6YFMi9aXm3JtGTmcDbjniEuiYonYptAk=", "Version": "$LATEST", "TracingConfig": { "Mode": "Active" }, "RevisionId": "983ed1e3-ca8e-434b-8dc1-7d72ebadd83d", ... }

更新具有額外依存項目的函數

如果您的函式倚賴AWS SDK for Ruby以外的程式庫,請使用 Bundler 將程式庫安裝至本機目錄,並將其納入部署套件中。

更新具有依存項目的 Ruby 函式

  1. 使用 bundle 命令,將程式庫安裝至 vendor 目錄。

    bundle config set --local path 'vendor/bundle' \ bundle install

    您應該會看到下列輸出:

    Fetching gem metadata from https://rubygems.org/.............. Resolving dependencies... Fetching aws-eventstream 1.0.1 Installing aws-eventstream 1.0.1 ...

    這會將 Gem 安裝於專案目錄而非系統位置,並且將 vendor/bundle 設定為日後安裝的預設路徑。以後如欲全面安裝 Gem,請使用 bundle config set --local system 'true'

  2. 建立 .zip 檔案封存。

    zip -r function.zip function.rb vendor

    您應該會看到下列輸出:

    adding: function.rb (deflated 37%) adding: vendor/ (stored 0%) adding: vendor/bundle/ (stored 0%) adding: vendor/bundle/ruby/ (stored 0%) adding: vendor/bundle/ruby/2.7.0/ (stored 0%) adding: vendor/bundle/ruby/2.7.0/build_info/ (stored 0%) adding: vendor/bundle/ruby/2.7.0/cache/ (stored 0%) adding: vendor/bundle/ruby/2.7.0/cache/aws-eventstream-1.0.1.gem (deflated 36%) ...
  3. 更新函式程式碼。

    aws lambda update-function-code --function-name my-function --zip-file fileb://function.zip

    您應該會看到下列輸出:

    { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", "Runtime": "ruby2.5", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "function.handler", "CodeSize": 300, "CodeSha256": "Qf0hMc1I2di6YFMi9aXm3JtGTmcDbjniEuiYonYptAk=", "Version": "$LATEST", "RevisionId": "983ed1e3-ca8e-434b-8dc1-7d72ebadd83d", ... }