问题描述
我正在尝试在terraform(v 0.13.0)中建立当前的基础架构。我只是从迁移现有的lambda函数开始。我已使用以下代码尝试将.net core 3.1中的现有lambda函数上载到AWS(提供程序v。3.0)。我没问题手动部署它,但这显然不是目标。
这是IAM角色:
resource "aws_iam_role" "role_lambda" {
name = "roleLambda"
assume_role_policy = <<POLICY
{
"Version": "2012-10-17","Statement": [
{
"Action": "sts:AssumeRole","Principal": {
"Service": "lambda.amazonaws.com"
},"Effect": "Allow","Sid": ""
}
]
}
POLICY
}
函数下方(请注意,我混淆了一些值):
resource "aws_lambda_function" "lambda_tf" {
function_name = "LambdaTFTest"
role = aws_iam_role.role_lambda.arn
handler = "Lambda::Lambda.Function::FunctionHandler"
runtime = "dotnetcore3.1"
s3_bucket = "arn:aws:s3:::xxxx-xxxxxx"
s3_key = "Lambda.zip"
s3_object_version = "XxXxXxXxXxXxXxXxXxXxXxXxXxXx"
}
Error: Error creating Lambda function: ValidationException:
status code: 400,request id: a5e89c38-d1f1-456d-93c1-41650fb45386
我已经确保将lambda部署在与s3存储桶本身相同的区域中,所以这不是问题。我以为这可能与某些无效参数有关,但是我已经使用了所有这些无效参数,无法找到问题所在。我还仔细检查了密钥,版本等的正确拼写。我该如何取得进展?
预先感谢您的帮助。
解决方法
这归结为无效传递的参数之一。
确保Lambda名称是唯一的,S3存储桶和密钥存在,并且IAM角色在附加时具有承担角色策略。
运行时是正确的,其他所有内容都是用户定义的,因此需要您进行验证。
尝试使用filename属性而不是S3(这将使用本地磁盘而不是S3)。那样有用吗?如果是这样,可能是S3权限。
如果您验证了所有内容,但仍无法正常工作,最好的建议是通过提供请求ID的AWS支持提出建议。
, aws_iam_role
出现语法错误。如果您希望-
保持标签状态,请在POLICY
前面缺少resource "aws_iam_role" "role_lambda" {
name = "roleLambda"
assume_role_policy = <<-POLICY
{
"Version": "2012-10-17","Statement": [
{
"Action": "sts:AssumeRole","Principal": {
"Service": "lambda.amazonaws.com"
},"Effect": "Allow","Sid": ""
}
]
}
POLICY
}
:
aws_lambda_function
在s3_bucket
中,resource "aws_lambda_function" "lambda_tf" {
function_name = "LambdaTFTest"
role = aws_iam_role.role_lambda.arn
handler = "Lambda::Lambda.Function::FunctionHandler"
runtime = "dotnetcore3.1"
s3_bucket = "xxxx-xxxxxx"
s3_key = "Lambda.zip"
s3_object_version = "XxXxXxXxXxXxXxXxXxXxXxXxXxXx"
}
应该只是存储区名称,不是其名称:
self.ids.widget.pos
,
对于可能遇到相同问题的人,尝试通过将所有空格转换为制表符来格式化 main.tf
文件可能会有所帮助。
如果您使用的是 vscode,下面有一个制表符可以转换它,这取决于是空格还是制表符
以下:
这为我解决了这个问题。
,它实际上可以是您传递给 lambda 资源的任何参数。就我而言,我说超时是“900000”而不是 900。出于某种原因,我认为它以毫秒为单位。
,实际上我在使用 docker 镜像时遇到了同样的错误。这里的修复是设置 package_type = "Image"