使用无服务器框架部署 lambda 不支持 2 个单独的函数

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

我正在尝试使用无服务器框架部署 lambda 函数 (lambda-1),该框架应该有 s3 创建事件作为触发器。除了要部署的 lambda 函数之外,还有另一个名称不同的 lambda 函数 (lambda-2),它们彼此无关。而且还带有 s3 触发器。两种功能都使用不同的存储桶。每次我尝试部署 lambda-1 时,都会显示以下内容:

CREATE_FAILED: CustomDashresourceDashexistingDashs3LambdaFunction (AWS::Lambda::Function)
<prefix-of-both-lambdas>-custom-resource-existing-s3 already exists in stack arn:aws:cloudformation:eu-central-1:xxx:stack/<prefix-lambda-2>-<lambda-2-name>/xxxsome-uuidxxxx
View the full error: https://eu-central-1.console.aws.amazon.com/cloudformation/home?region=eu-central-1#/stack/detail?stackId=arn%3Aaws%3Acloudformation%3Aeu-central-1%......
1 deprecation found: run 'serverless doctor' for more details

lambda-1 的配置:

functions:
  lambda-1:
    handler: src/lambda_handler.main
    environment:
      ENV: ${opt:stage}
    events:
      - s3:
          bucket: ${ssm:/panda/${opt:stage}/strings/lambda-1-bucket}
          event: s3:ObjectCreated:*
          rules:
            - prefix: <s3-prefix>/
            - suffix: .csv
          existing: true
          forceDeploy: true
resources:
  Outputs:
    ServerlessDeploymentBucketName:
      Export:
        Name: "${self:service}-${opt:stage}-${self:custom.serverless-aws-resource-names.variables.lambdaFunctionName}-sls-dpl"
    PythonRequirementsLambdaLayerHash:
      Export:
        Name: "${self:service}-${opt:stage}-${self:custom.serverless-aws-resource-names.variables.lambdaFunctionName}-requirements-LayerHash"
    PythonRequirementsLambdaLayerQualifiedArn:
      Export:
        Name: "${self:service}-${opt:stage}-${self:custom.serverless-aws-resource-names.variables.lambdaFunctionName}-requirements-LayerQualifiedArn"
    PythonRequirementsLambdaLayerS3Key:
      Export:
        Name: "${self:service}-${opt:stage}-${self:custom.serverless-aws-resource-names.variables.lambdaFunctionName}-requirements-LayerS3Key"

lambda-2 的配置:

functions:
  lambda-2:
    package:
      artifact: ${env:MVN_ARTIFACT_RELATIVE_PATH}
    handler: lambda_handler.Handler
    events:
      - s3:
          bucket: ${ssm:/panda/${opt:stage}/strings/lambda-2-bucket}
          event: s3:ObjectCreated:*
          rules:
            - suffix: .xlsx
          existing: true
    logSubscription: true
    memorySize: 512
    timeout: 120

resources:
  Outputs:
    ServerlessDeploymentBucketName:
      Export:
        Name: "sls-${self:service}-${opt:stage}-${self:custom.serverless-aws-resource-names.variables.lambdaFunctionName}-ServerlessDeploymentBucketName"

当我删除两个 CloudFormation 堆栈时,可以部署其中一个 lambda,但另一个将失败。另外,我没有在 serverless.yml 中定义此资源,两个 s3-trigger-bucket 的命名不同于:

<prefix-of-both-lambdas>-custom-resource-existing-s3

amazon-web-services amazon-s3 aws-lambda serverless-framework aws-serverless
1个回答
0
投票

从 CloudFormation 错误来看,您的帐户上似乎存在一个预先存在(或曾经存在)的堆栈,该堆栈在某个时刻使用相同的 Lambda 名称启动。

解决此问题的最简单方法是完全删除有问题的资源,在本例中是导致冲突的 S3 存储桶,然后重新部署。

尽管存在冲突,但部署

lambda-2
失败的原因是CloudFormation堆栈需要所有资源都能够正常运行,否则它将启动回滚过程来反转操作。
    

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