使用Terraform为用户数据提供rds端点

问题描述

我想将端点从rds传递到bash脚本,如何将其传递给我正在使用terraform的bash脚本。我正在使用模块结构,从rds模块获取输出,然后从主模板将其提供给ec2模块,但是如何在bash脚本中使用端点。我想在dbserver

中指定rds端点

userdata.sh

#!/bin/bash
sudo yum update -y
sudo yum install -y httpd24 php56 php56-mysqlnd
sudo service httpd start
sudo chkconfig httpd on
sudo groupadd www
sudo usermod -a -G www ec2-user
sudo chgrp -R www /var/www
sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} +
find /var/www -type f -exec sudo chmod 0664 {} +
cd /var/www
mkdir inc
cd inc
sudo echo "<?php
define('DB_SERVER','**Rds endpoint**');
define('DB_USERNAME','mysqldb');
define('DB_PASSWORD','mysql123a');
define('DB_DATABASE','mysqldb');
?>" > dbinfo.inc
sudo aws s3 cp s3://webserver/SamplePage.php /var/www/html/SamplePage.php

ecs.tf

resource "aws_instance" "web" {
  count                       = var.ec2_count
  ami                         = var.ami_id
  instance_type               = var.instance_type
  subnet_id                   = var.subnet_id
  key_name                    = var.key_name
  source_dest_check           = false
  associate_public_ip_address = true
  #user_data                   = "${file("userdata.sh")}"1
  security_groups = [aws_security_group.ec2_sg.id]
  user_data       = "${file("${path.module}/template/userdata.sh")}"
  tags = {
    Name = "Webserver"
  }
}
resource "aws_security_group" "ec2_sg" {
  name        = "ec2-sg"
  description = "Allow TLS inbound traffic"
  vpc_id      = var.vpc_id

  ingress {
    description = "incoming for ec2-instance"
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

  tags = {
    Name = "ec2-sg"
  }
}

解决方法

Make use of the templatefile function将此信息呈现到EC2实例的用户数据中。

userdata.sh进行以下更改,插入名为rds_endpoint的变量:

sudo echo "<?php
define('DB_SERVER','${rds_endpoint}');
define('DB_USERNAME','mysqldb');
define('DB_PASSWORD','mysql123a');
define('DB_DATABASE','mysqldb');
?>" > dbinfo.inc

然后,在您的aws_instance资源中:

user_data = templatefile("${path.module}/template/userdata.sh",{ rds_endpoint = "(your rds endpoint value here)"})

现在,您应该可以将此rds_endpoint值设置为RDS端点-考虑类似aws_db_instance address or endpoint的值。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...