Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

393
Vistas
Terraform: use el ID del grupo de seguridad creado en un archivo separado para la creación de instancias EC2

He usado este módulo para crear un grupo de seguridad en AWS VPC. ¿Cómo hago referencia al recurso creado a partir de esto en un archivo separado? Estoy creando nuestra instancia de bastión en un directorio separado en el mismo repositorio.

La configuración de mi bastión se parece a la siguiente, usa el módulo Terraform EC2 y funciona si codifico el ID del grupo de seguridad vpc, pero quiero que pueda tomarlo directamente cuando se crea el grupo de seguridad, ya que esto podría cambiar en el futuro. ..

terraform/aws/layers/bastion/main.tf

 provider "aws" { region = var.region } module "ec2-instance" { source = "terraform-aws-modules/ec2-instance/aws" name = "bastion" instance_count. = 1 ami = var.image_id instance_type = var.instance_type vpc_security_group_ids = ["${}"] subnet_id = var.subnet iam_instance_profile = "aws-example-ec2-role" tags = { Layer = "Bastion" } }

Así he creado el grupo de seguridad: terraform/aws/global/vpc/bastion_sg.tf

 module "bastion-sg" { source = "terraform-aws-modules/security-group/aws" name = "Bastion" description = "Bastion example group" vpc_id = "vpc-12345" ingress_with_cidr_blocks = [ { from_port = ## to_port = ## protocol = "##" description = "Bastion SSH" cidr_blocks = "1.2.3.4/5" }, { from_port = ## to_port = ## protocol = "##" description = "Bastion SSH" cidr_blocks = "1.2.3.4/5" } ] egress_with_source_security_group_id = [ { from_port = ## to_port = ## protocol = "##" description = "Access to default server security group" source_security_group_id = "sg-12345" }, { from_port = ## to_port = ## protocol = "##" description = "Access to db" source_security_group_id = "sg-12345" } ] }

¿Necesito enviar el ID del grupo de seguridad a outputs.tf donde he creado bastion_sg.tf antes de poder hacer referencia a bastion/main.tf como se muestra a continuación?

 module "bastion_sg" source "../../global/vpc"

y luego de alguna manera pasar la ID a vpc_security_group_id = ?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

No usaría terraform-aws-modules. Usaría los recursos del proveedor de aws como aws_security_group y aws_security_group_rules directamente. Desde Terraform 0.12, estos módulos de un solo recurso no ofrecen ningún beneficio, solo mayor complejidad.

Este es un ejemplo de lo que podría ser su código con recursos directos del proveedor de AWS y sin módulos superfluos:

 provider "aws" { region = var.region } resource "aws_instance" "bastion" { name = "bastion" ami = var.image_id instance_type = var.instance_type vpc_security_group_ids = [aws_security_group.bastion.id] subnet_id = var.subnet iam_instance_profile = "aws-example-ec2-role" tags = { Layer = "Bastion" } } resource "aws_security_group" "bastion_from_ssh" { name = "Bastion" description = "Bastion example group" vpc_id = "vpc-12345" } resource "aws_security_group_rule" "allow_ssh" { type = "ingress" from_port = ## to_port = ## protocol = "##" description = "Bastion SSH" cidr_blocks = ["1.2.3.4/5"] } resource "aws_security_group_rule" "bastion_to_db" { type = "egress" from_port = ## to_port = ## protocol = "##" description = "Access to default server security group" source_security_group_id = "sg-12345" } output "security_group_id" { value = aws_security_group.bastion_from_ssh.id }

Ejemplo: Hacer referencia a la salida en otro módulo:

 module "bastion" { source = "path/to/dir/with/code/above" // ... any variables it needs } resource "aws_security_group" "app_server" { name = "AppServer" description = "App Server group" vpc_id = "vpc-12345" } resource "aws_security_group_rule" "allow_ssh_to_app_server" { security_group_id = module.bastion.security_group_id type = "egress" from_port = 22 to_port = 22 protocol = "tcp" description = "SSH to App Server" source_security_group_id = aws_security_group.app_server.id } resource "aws_security_group_rule" "allow_ssh_from_bastion" { security_group_id = aws_security_group.app_server.id type = "ingress" from_port = 22 to_port = 22 protocol = "tcp" description = "SSH from Bastion" source_security_group_id = module.bastion.security_group_id }
over 4 years ago · Santiago Trujillo Denunciar

0

De la documentación del módulo que está utilizando, estos son los resultados .

La forma de referenciarlos en tu propia terraformación sería:

 module.bastion-sg.this_security_group_id

Entonces, su archivo terraform/aws/layers/bastion/main.tf se vería así:

 provider "aws" { region = var.region } module "ec2-instance" { source = "terraform-aws-modules/ec2-instance/aws" name = "bastion" instance_count. = 1 ami = var.image_id instance_type = var.instance_type vpc_security_group_ids = [module.bastion-sg.this_security_group_id] subnet_id = var.subnet iam_instance_profile = "aws-example-ec2-role" tags = { Layer = "Bastion" } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda