【问题标题】:serverless deploy error - Resource handler returned message: "Lambda function xxxxxxxx could not be found"无服务器部署错误 - 资源处理程序返回消息:“找不到 Lambda 函数 xxxxxxxx”
【发布时间】:2023-02-19 07:07:38
【问题描述】:

嗨,任何人都可以帮助我如何在特定阶段部署无服务器,我有 1 个应用程序和 2 个阶段 devprod。当部署到 dev 时,它工作正常并成功部署,但在 prod 阶段总是出现以下错误:

Error:
UPDATE_FAILED: FilterOptionLambdaFunction (AWS::Lambda::Function)
Resource handler returned message: "Lambda function xxxxxxx-api-prod-xxxxxx could not be found" (RequestToken: ee621797-de45-aa3f-118b-8f512d4a5f62, HandlerErrorCode: NotFound)

我试图评论所有功能并留下 1 个功能来测试部署,但收到另一个错误,如下所示:

Error:
UPDATE_FAILED: EnterpriseLogAccessIamRole (AWS::IAM::Role)
Unable to retrieve Arn attribute for AWS::Logs::LogGroup, with error message Resource of type 'AWS::Logs::LogGroup' with identifier '{"/properties/LogGroupName":"/aws/lambda/xxxxx-api-prod-api"}' was not found.

这是我的serverless.yml

org: xxxxxx
app: comeby-api
service: comeby-scheduler-api
frameworkVersion: "3"

custom:
  serverless-offline:
    noPrependStageInUrl: true
  
  myEnvironment:
    MESSAGE:
      prod: "This is production environment"
      staging: "This is staging environment"
      dev: "This is development environment"

useDotenv: true

provider:
  name: aws
  runtime: nodejs14.x
  region: ap-southeast-1
  stage: prod

functions:
  api:
    handler: handler.handler
    events:
      - httpApi: "*"

  # Alikhsan
  SyncAlikhsanSB2: 
  SyncAlikhsanAMT:
  SyncAlikhsanASG:  
  SyncAlikhsanIOI:  
  SyncAlikhsanJSB:  
  SyncAlikhsanSPY:
    
  # Sync Product
  Shopify:  
  SyncSenheng:
  SyncXilnix:
  Puma:
  
  # Anything
  FilterOption:
  AriadneMaps:
    handler: scheduler/update/AriadneMaps.handler
    description: "Update Ariadne Maps (to view report of total visitor of specific store) in Database"
    memorySize: 512
    timeout: 900
    events:
      - schedule:
          rate: cron(00 22 * * ? *)
          enabled: true
      - http:
          path: /cron/ariadne
          method: get
  SendEmailUpdateProduct:
  ReportPurchasing:
  UpdateProductPricePuma:
  UpdateFootFallCam:
  
plugins:
  # - serverless-dotenv-plugin
  - serverless-offline
  - serverless-offline-scheduler

【问题讨论】:

  • 您使用的部署命令是什么?
  • @ReazMurshed sls deploy --stage prod

标签: serverless serverless-framework aws-serverless


【解决方案1】:

我从那些 UPDATE_FAILEDs 猜测,您正在为开发和生产部署使用相同的无服务器文件。基于此假设,您可能必须为两个部署提供单独的服务名称。如果您已经使用服务名称 comeby-scheduler-api 部署到 dev 环境,则具有相同服务名称的 prod 阶段的下一个部署将尝试覆盖之前的部署。

就我而言,我使用 2 个单独的无服务器配置文件(一个用于开发,另一个用于生产)来解决这个问题。对于 dev 部署,我的配置文件 serverless-dev.yml 如下所示。

service: service-dev

provider:
  name: aws
  role: arn:aws:iam::<aws-account-id>:role/<my-lambda-role-name>
  region: <region>
  runtime: python3.8
  environment:
    DB_HOST: <host>
    DB_PASSWORD: <pass>
    DB_PORT: <port>
    DB_DATABASE: <db_name>
    DB_USER: <db_user>
    
plugins:
  - serverless-python-requirements
  - serverless-secrets-plugin
  - serverless-api-compression

package:
  patterns:
    - '!venv/**'
    - '!__pycache__/**'
    - '!node_modules/**'
    - '!test/**'

functions:
  Lambda1:
    handler: lambda_file_name.handler_function_name
    memorySize: 512
    timeout: 900
    events:
      - s3:
          bucket: <bucket_name_for_this_lambda_trigger>
          event: s3:ObjectCreated:*
          rules:
            - prefix: <filter_trigger_file_prefix>
            - suffix: <filter_trigger_file_suffix>
          existing: <true if an existing s3 bucket, false otherwise>

而对于 prodserverless-prod.yml 文件是,

service: service-prod

provider:
  name: aws
  role: arn:aws:iam::<aws-account-id>:role/<my-lambda-role-name>
  region: <region>
  runtime: python3.8

... rest is similar

我对这些单独阶段的部署命令是。

sls deploy -s dev -c serverless-dev.yml
sls deploy -s prod -c serverless-prod.yml

【讨论】:

    猜你喜欢
    • 2021-09-17
    • 1970-01-01
    • 2020-08-09
    • 2011-08-31
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 2019-06-26
    相关资源
    最近更新 更多