如何获取通过 Terraform 生成的资源(IAM 角色)的 AWS ARN 以用于 Lambda 函数的 Java 代码?

How to get AWS ARN of resource (IAM role) generated through Terraform to use in Java code of Lambda function?

我正在编写一个 AWS Lambda 函数,它基本上是 Java 代码做一些事情。我们正在使用 Terraform 在 AWS 中创建资源,并且我们已经通过 TF 创建了 IAM role/policies。我需要通过 TF 创建的 IAM 角色的 ARN 在我的 Java 代码 (Lambda) 中使用,以便在 AWS STS AssumeRole 调用中使用。

有没有办法在 Java 代码中获取角色的 ARN?

即使我为 output.tf 定义了一个变量,我如何在代码中访问它?我在这里错过了什么吗?提前致谢。

您可以通过 terraform 中的 environment 参数在 lambda 函数中传递任何值。

resource "aws_lambda_function" "lambda" {
  count = var.create_lambda_function ? 1 : 0

  filename         = "${var.lambda_function_name}.${var.archive_type}"
  function_name    = "${var.lambda_function_name}-${lower(var.environment)}"
  role             = var.role_arn
  handler          = var.handler
  timeout          = var.timeout
  runtime          = var.runtime
  layers           = var.add_layers ? aws_lambda_layer_version.pymysql_lambda_layer.*.arn : []
  source_code_hash = one(data.archive_file.lambda_function_zip.*.output_base64sha256)


  environment {
    variables = {
      ROLE_ARN = var.role_arn
    }
  }
}

希望您已经知道如何通过输入变量 (var.role_arn) 获取 IAM 角色 ARN。如果您在不同的模块中创建 IAM 角色,您可以通过 module 输出访问它,或者如果您在 lambda 函数代码所在的相同位置创建角色,您可以将角色 arn 引用为 aws_iam_role.example.arn存在。

完成后,您现在可以在 Java 代码中调用环境变量 ROLE_ARN