首页 > 解决方案 > 如何在 python 代码中访问 terraform 变量?

问题描述

所以在我的顶级 main.tf 文件中,我有以下内容

module "aws_lambda" {
   ...
   envs = {
      bucket_name = "bucket_name"
      prefix = "prefix"
   }
}

模块 main.tf

resource "aws_lambda_function" "descriptive_name" {
   function_name = "${var.prefix}-name
   handler = "lambda_function.lambda_handler"
   runtime = "python3.8
   filename = "${path.module}/../../package.zip
   role = var.role_arn
   timeout = 300
   tags = local.default_tags
   vpc_config {
      security_group_ids = var.lambda_security_group_ids
      subnet_ids = var.lambda_subnet_ids
   }
}

locals {
   default_tags = {
     Deployment = var.prefix
   }
{

我想在 python 代码中访问 bucket_name。我怎样才能做到这一点?我使用打印print(os.environ)但看不到值。我也试过print(os.getenv("bucket_name")),但它返回无。我需要访问存储桶名称才能将文件写入其中。

任何帮助,将不胜感激。

标签: pythonamazon-web-servicesterraform

解决方案


您需要在执行期间将希望从函数代码访问的环境变量映射传递到aws_lambda_function资源中:

resource "aws_lambda_function" "descriptive_name" {
    function_name = "${var.prefix}-name"
    handler = "lambda_function.lambda_handler"
    runtime = "python3.8"
    filename = "${path.module}/../../package.zip"
    role = var.role_arn
    timeout = 300
    tags = local.default_tags
    vpc_config {
        security_group_ids = var.lambda_security_group_ids
        subnet_ids = var.lambda_subnet_ids
    }
    environment {
        variables = var.envs
    }
}

请参阅Terraform 文档以获取aws_lambda_function.


推荐阅读