[英]How to pass the EC2 instance ID created by an aws_instance resource into a file and place it inside an EC2 instance using Terraform?
[英]How do I pass resource output (EC2 Instance ID) as an environment variable to a Lambda function in Terraform?
我有四个文件 ec2.tf、lambda.tf、variables.tf 和 outputs.tf。 在 ec2.tf 中创建了一个 EC2 实例,我希望将实例 ID 作为环境变量传递给 Lambda 创建资源。 我想通过 variables.tf 传递实例 ID。
# variables.tf
variable "runec2_lambda_env" {
type = map(string)
default = {
# I want to pass the output as environment variable here
instanceid = ""
email = "abc@xyz.com"
}
}
# master/lambda.tf
resource "aws_lambda_function" "runec2" {
filename = "runec2.zip"
function_name = "runec2"
role = aws_iam_role.runec2_exec_role.arn
handler = "runec2.lambda_handler"
source_code_hash = filebase64sha256("runec2.zip")
runtime = "python3.7"
environment {
variables = var.runec2_lambda_env
}
}
# master/outputs.tf
output "server_id" {
value = "${join(", ", aws_instance.automation_server.*.id)}"
}
# outputs.tf
output "public_instance_ids" {
value = "${module.master.server_id}"
}
# master/ec2.tf
resource "aws_instance" "automation_server" {
instance_type = var.instance_type
ami = var.image_id
iam_instance_profile = aws_iam_instance_profile.ec2_profile.name
tags = {
Name = "Automation Server"
}
user_data = data.template_file.user-init.rendered
}
变量是您希望能够使用tfvars
文件设置或覆盖的东西,或者,如果它是一个模块,则使用模块参数。 另一个重要的部分是它们不支持插值。
如果要使用插值,则需要使用locals 。 您还可以使用局部变量来提供可以多次引用但不能像变量一样被覆盖的常量的等价物。
所以在这里你可能想要修改一些东西,以便你的email
变量是可配置的,但你会自动将 EC2 实例 ID 插入 Lambda function 的环境变量中。
最简单的选项如下所示:
variable "email" {
default = "abc@xyz.com"
}
resource "aws_lambda_function" "runec2" {
filename = "runec2.zip"
function_name = "runec2"
role = aws_iam_role.runec2_exec_role.arn
handler = "runec2.lambda_handler"
source_code_hash = filebase64sha256("runec2.zip")
runtime = "python3.7"
environment {
variables = {
email = var.email
instanceid = aws_instance.automation_server.arn
}
}
}
如果您真的想将环境变量定义为一个块,那么您将使用这样的本地变量:
variable "email" {
default = "abc@xyz.com"
}
locals {
runec2_lambda_env = {
email = var.email
instanceid = aws_instance.automation_server.arn
}
}
resource "aws_lambda_function" "runec2" {
filename = "runec2.zip"
function_name = "runec2"
role = aws_iam_role.runec2_exec_role.arn
handler = "runec2.lambda_handler"
source_code_hash = filebase64sha256("runec2.zip")
runtime = "python3.7"
environment {
variables = local.runec2_lambda_env
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.