将 Pulumi S3 Bucket ID 作为参数传递给 AWS Lambda
Passing Pulumi S3 Bucket ID to AWS Lambda as a parameter
我想通过 Pulumi 将 S3 存储桶 ID 作为参数传递给 AWS Lambda。
但是,Pulumi 传递了这个参数On Build
,所以我在 Lambda 中获取了一个 Object 引用,而不是 S3 路径。
我的代码是这样的
bucket = s3.Bucket(resource_name="bucket", acl="private")
lambda_func = lambda_.Function("Function",
role=lambda_role.arn,
package_type="Image",
image_uri=docker.image_name,
image_config={"commands": ["api/main.handler"]},
vpc_config={"subnet_ids": private_subnet_ids,
"security_group_ids": [internet_access.id],
},
environment=lambda_.FunctionEnvironmentArgs(
variables={"STORE_PATH": f"s3://s{bucket.id}/api"})
)
根据 Pulumi documentation:
Outputs that contain strings cannot be used directly in operations such as string concatenation.
所以我尝试了推荐的方法,例如:
bucket_url = Output.all(bucket.id).apply(lambda l: f"http://{l[0]}/")
或
url = Output.concat("http://", bucket.id, "/")
欢迎任何帮助。提前谢谢大家。
最后一种方法应该可以正常工作。请注意 bucket.id
只是存储桶的名称,您需要使用它构建 S3 访问 URL,例如
url = Output.concat("https://", bucket.id, ".s3.us-west-2.amazonaws.com")
# or url = Output.concat("s3://", bucket.id)
如果这仍然不能满足您的要求,您可以导出 url
的值以查看它的错误(或 post 您问题的结果)。
export('url', url)
发生这种情况是因为 lambda 函数的环境变量字段需要一个字符串。我们需要告诉 Pulumi 确保 bucket id 已解析(即,bucket 已完成创建并且输出已返回)
如果像这样将 Output.concat
传递给 lambda 函数,它会起作用:
lambda_func = aws.lambda_.Function(
"function",
runtime="python3.7",
role=role.arn,
handler="hello_world.handler",
code=pulumi.AssetArchive({".": pulumi.FileArchive(".")}),
environment=aws.lambda_.FunctionEnvironmentArgs(
variables={"STORE_PATH": pulumi.Output.concat("s3://", bucket.id, "/")}
),
)
我想通过 Pulumi 将 S3 存储桶 ID 作为参数传递给 AWS Lambda。
但是,Pulumi 传递了这个参数On Build
,所以我在 Lambda 中获取了一个 Object 引用,而不是 S3 路径。
我的代码是这样的
bucket = s3.Bucket(resource_name="bucket", acl="private")
lambda_func = lambda_.Function("Function",
role=lambda_role.arn,
package_type="Image",
image_uri=docker.image_name,
image_config={"commands": ["api/main.handler"]},
vpc_config={"subnet_ids": private_subnet_ids,
"security_group_ids": [internet_access.id],
},
environment=lambda_.FunctionEnvironmentArgs(
variables={"STORE_PATH": f"s3://s{bucket.id}/api"})
)
根据 Pulumi documentation:
Outputs that contain strings cannot be used directly in operations such as string concatenation.
所以我尝试了推荐的方法,例如:
bucket_url = Output.all(bucket.id).apply(lambda l: f"http://{l[0]}/")
或
url = Output.concat("http://", bucket.id, "/")
欢迎任何帮助。提前谢谢大家。
最后一种方法应该可以正常工作。请注意 bucket.id
只是存储桶的名称,您需要使用它构建 S3 访问 URL,例如
url = Output.concat("https://", bucket.id, ".s3.us-west-2.amazonaws.com")
# or url = Output.concat("s3://", bucket.id)
如果这仍然不能满足您的要求,您可以导出 url
的值以查看它的错误(或 post 您问题的结果)。
export('url', url)
发生这种情况是因为 lambda 函数的环境变量字段需要一个字符串。我们需要告诉 Pulumi 确保 bucket id 已解析(即,bucket 已完成创建并且输出已返回)
如果像这样将 Output.concat
传递给 lambda 函数,它会起作用:
lambda_func = aws.lambda_.Function(
"function",
runtime="python3.7",
role=role.arn,
handler="hello_world.handler",
code=pulumi.AssetArchive({".": pulumi.FileArchive(".")}),
environment=aws.lambda_.FunctionEnvironmentArgs(
variables={"STORE_PATH": pulumi.Output.concat("s3://", bucket.id, "/")}
),
)