【问题标题】:Deploying Lambda Function with CDK Failing Due to Missing Parameters由于缺少参数,使用 CDK 部署 Lambda 函数失败
【发布时间】:2020-05-06 23:35:46
【问题描述】:
new Function(this, "TestFunction", {
    handler: "TestFunction.handler",
    code: Code.asset(path.join(__dirname, "lambdas/")),
    runtime: Runtime.NodeJS810
});

当我尝试将其部署到 CodeDeploy 时,我得到:

Parameters: [TestFunctionCodeS3Bucket, TestFunctionCodeS3VersionKey] must have values (Service: AmazonCloudFormation; Status Code: 400; Error Code: ValidationError;

当我检查生成的 CloudFormation 时,我可以看到参数:

TestFunctionCodeS3Bucket:
    Type: String
    Description: S3 bucket for asset "AppStack/TestFunction/Code"
TestFunctionCodeS3VersionKey:
    Type: String
    Description: S3 key for asset version "AppStack/TestFunction/Code"

我的理解是Code.asset 应该自行引导这个过程。这里有没有我遗漏的步骤?

查看文档 (https://docs.aws.amazon.com/cdk/latest/guide/serverless_example.html),它声明您应该创建一个 Amazon S3 bucket that contains the Lambda function code. 但是,在示例中,我没有看到明确完成。所以我只是假设它是隐式完成的。

生成的 CFN:

Parameters:
  TestFunctionCodeS3BucketE8C956AE:
    Type: String
    Description: S3 bucket for asset "AppStack/TestFunction/Code"
  TestFunctionCodeS3VersionKey6B3F3155:
    Type: String
    Description: S3 key for asset version "AppStack/TestFunction/Code"
Resources:
  TestFunctionServiceRole6ABD93C7:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          - Action: sts:AssumeRole
            Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
        Version: "2012-10-17"
      ManagedPolicyArns:
        - Fn::Join:
            - ""
            - - "arn:"
              - Ref: AWS::Partition
              - :iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
    Metadata:
      aws:cdk:path: AppStack/TestFunction/ServiceRole/Resource
  TestFunction22AD90FC:
    Type: AWS::Lambda::Function
    Properties:
      Code:
        S3Bucket:
          Ref: TestFunctionCodeS3BucketE8C956AE
        S3Key:
          Fn::Join:
            - ""
            - - Fn::Select:
                  - 0
                  - Fn::Split:
                      - "||"
                      - Ref: TestFunctionCodeS3VersionKey6B3F3155
              - Fn::Select:
                  - 1
                  - Fn::Split:
                      - "||"
                      - Ref: TestFunctionCodeS3VersionKey6B3F3155
      Handler: TestFunction.handler
      Role:
        Fn::GetAtt:
          - TestFunctionServiceRole6ABD93C7
          - Arn
      Runtime: nodejs8.10
    DependsOn:
      - TestFunctionServiceRole6ABD93C7
    Metadata:
      aws:cdk:path: AppStack/TestFunction/Resource
      aws:asset:path: /Volumes/Unix/AMCC/src/AMCConsole/packages/infrastructure/lib/lambdas/mars
      aws:asset:property: Code
  CDKMetadata:
    Type: AWS::CDK::Metadata
    Properties:
      Modules: aws-cdk=0.22.0,@aws-cdk/assets=0.22.0,@aws-cdk/assets-docker=0.22.0,@aws-cdk/aws-apigateway=0.22.0,@aws-cdk/aws-cloudformation=0.22.0,@aws-cdk/aws-cloudfront=0.22.0,@aws-cdk/aws-cloudwatch=0.22.0,@aws-cdk/aws-codebuild=0.22.0,@aws-cdk/aws-codecommit=0.22.0,@aws-cdk/aws-codepipeline=0.22.0,@aws-cdk/aws-codepipeline-api=0.22.0,@aws-cdk/aws-cognito=0.22.0,@aws-cdk/aws-ec2=0.22.0,@aws-cdk/aws-ecr=0.22.0,@aws-cdk/aws-events=0.22.0,@aws-cdk/aws-iam=0.22.0,@aws-cdk/aws-kms=0.22.0,@aws-cdk/aws-lambda=0.22.0,@aws-cdk/aws-route53=0.22.0,@aws-cdk/aws-s3=0.22.0,@aws-cdk/aws-s3-notifications=0.22.0,@aws-cdk/aws-serverless=0.22.0,@aws-cdk/aws-sns=0.22.0,@aws-cdk/aws-sqs=0.22.0,@aws-cdk/cdk=0.22.0,@aws-cdk/cx-api=0.22.0,jsii-runtime=node.js/v11.12.0

【问题讨论】:

  • 尝试运行cdk bootstrap并将NodeJS810更改为NODEJS_8_10
  • 不幸的是,我必须为这个特定的项目使用 CDK 0.22 版。 fromAssetNODEJS_8_10 我相信是 1.0 >。我也尝试过引导。 CloudFormation 看起来是正确的,这就是它令人困惑的原因。
  • 可以分享完整的cloudformation模板吗?
  • 我将它添加到问题中:)。

标签: amazon-web-services aws-lambda aws-code-deploy aws-cdk


【解决方案1】:

你好 Kris,我遇到了同样的问题,我是这样解决的:

  • 检查在输出中创建的 manifest.json 以获取参数的键(我用 jq 提取它并从 if 创建了一个配置文件)

  • S3 密钥需要这种格式 -> PATH/||YOUR_ASSET_KEY

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-24
    • 2019-12-04
    • 2021-04-08
    • 2015-04-15
    • 2021-03-11
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多