无服务器部署错误 - 资源处理程序返回消息:“找不到 Lambda 函数 xxxxxxxx”

问题描述 投票:0回答:2

嗨,任何人都可以帮助我如何在特定阶段部署无服务器,我有 1 个具有 2 个阶段的应用程序

dev
prod
。当部署到
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

serverless serverless-framework aws-serverless
2个回答
2
投票

我从这些

UPDATE_FAILED
中猜测,您正在使用相同的无服务器文件进行开发和生产部署。基于此假设,您可能必须为两个部署提供单独的服务名称。如果您已使用服务名称
dev
部署到
comeby-scheduler-api
环境,则具有相同服务名称的 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>

对于

prod
serverless-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

0
投票

这个错误也发生在我身上,因为我之前设置了另一个具有相同名称和环境的(不相关的)服务。

Serverless 尝试更新现有的 cloudformation 模板,但失败并显示上述消息,因为之前创建的资源和更新的资源没有任何关联。

我的解决方案是找到并删除旧的云形成模板(因为我实际上不再需要它),但另一种选择是更改环境名称

© www.soinside.com 2019 - 2024. All rights reserved.