amazon-web-services - 由于缺少参数,使用 CDK 部署 Lambda 函数失败
问题描述
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
解决方案
你好克里斯,我遇到了同样的问题,这是我解决它的方法:
检查输出中创建的 manifest.json 以获取参数的键(我用 jq 提取它并从 if 创建了一个配置文件)
S3 密钥需要这种格式 -> PATH/||YOUR_ASSET_KEY
推荐阅读
- c# - 没有匹配开始标签的结束标签“文本”
- python - 带有 virtualenv 的 OSQuery 和 Python 扩展
- amazon-rds - Terraform 不接受 allow_major_version_upgrade
- c++ - 如何或以编程方式使用 openssl 生成 AES 密钥的最佳方法是什么?
- java - 无法读取 ZIpInputStream
- python - 无法登录到 SQL 服务器,使用 Microsoft 服务器工作室
- c# - 使用 WMI 禁用帐户
- javascript - array.some 可以在未定义上循环吗?
- java - 确保我的 servlet 过滤器在其他动态添加的过滤器之前运行
- python - Python 绘制缺失数据