首页 > 解决方案 > 如何在应用期间使用 terraform 创建 ec2 后运行脚本?

问题描述

在 terraform 中有一个在 aws 中创建 EC2 机器的示例。

# Create a new instance of the latest Ubuntu 20.04 on an
# t3.micro node with an AWS Tag naming it "HelloWorld"
provider "aws" {
  region = "us-west-2"
}

data "aws_ami" "ubuntu" {
  most_recent = true

  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
  }

  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }

  owners = ["099720109477"] # Canonical
}

resource "aws_instance" "web" {
  ami           = data.aws_ami.ubuntu.id
  instance_type = "t3.micro"

  tags = {
    Name = "HelloWorld"
  }
}

但是我也可以在里面运行一些脚本吗?像安装詹金斯?安装 docker,或者只是运行命令:sudo yum update -y在 terraform 应用操作期间?

如果是这样,我会很适合这样的例子或指导资源。

标签: amazon-web-servicesterraformterraform-provider-aws

解决方案


还有 Provisioners 的选项,但 Terraform 有一个注释

/// 来自 TF 文档 /// 注意:Provisioners 只能作为最后的手段。对于最常见的情况,有更好的选择。有关更多信息,请参阅主供应商页面。///

请在决定之前查看这些链接: https ://www.terraform.io/docs/provisioners/index.html https://www.terraform.io/docs/provisioners/remote-exec.html

无论如何,我发布了一个简单的例子。

resource "aws_instance" "WebServer"  {
  ami           = "ami-SomeValid_AMI_ID"
  instance_type = "t2.micro"
  key_name = "SomeValid_keypair"
   
    provisioner "remote-exec" {
    
    inline = [
    "sudo amazon-linux-extras install -y nginx1.12",
    "sudo systemctl start nginx"
    ]
    
    connection {
    type = "ssh"
    user = "ec2-user"
    private_key = file("F:\\PathToMyKeysFolder\\SomeValid_keypair.pem")
    host = self.public_ip
    
    }
    
    }

推荐阅读