使用cloud-init初始化配置服务器环境及初始化项目,阿里云实践

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用cloud-init初始化配置服务器环境及初始化项目,阿里云实践相关的知识,希望对你有一定的参考价值。

参考技术A 使用cloud-init编写脚本,在创建服务器的时候就写入脚本,在无人值守的情况下完成服务环境的配置/软件的安装(nginx/php等)/自己开发的项目的初次部署及配置.

在创建阿里云ECS的时候写入:

主要干了两件事:

要用cloud-init的,需要先看下 cloud-init官网

php composer-setup.php 执行失败...原因还不知道

我这里三个环境的名字是:production/staging/test,各个文件的目录也是这样

初次部署项目使用的是工具deploy,在我们其他项目中也有介绍,如:
使用deployer部署工具配合阿里云RDC完成部署
deployer文档

如何在 Terraform 上使用 cloud-init 初始化实例

【中文标题】如何在 Terraform 上使用 cloud-init 初始化实例【英文标题】:How can I initialice an instance with cloud-init on Terraform 【发布时间】:2017-09-01 08:31:27 【问题描述】:

我正在尝试使用 cloud-init 初始化 AWS 实例,我使用下一个 terraform 代码进行测试:

variable "hostname"    
variable "domain_name" 


variable "filename" 
  default = "cloud-config.cfg"


data "template_file" "test" 
  template = <<EOF
#cloud-config
hostname: $$hostname
fqdn: $$fqdn
mounts:
  - [ ephemeral, null ]
output:
  all: '| tee -a /var/log/cloud-init-output.log'
EOF

  vars 
    hostname = "$var.hostname"
    fqdn     = "$format("%s.%s", var.hostname, var.domain_name)"
  


data "template_cloudinit_config" "test" 
  gzip          = false
  base64_encode = false

  part 
    filename     = "$var.filename"
    content_type = "text/cloud-config"
    content      = "$data.template_file.test.rendered"
  



resource "aws_instance" "bootstrap2" 
    ami = "$var.aws_centos_ami"
    availability_zone = "eu-west-1b"
    instance_type = "t2.micro"
    key_name = "$var.aws_key_name"
    security_groups = ["$aws_security_group.bastion.id"]
    associate_public_ip_address = true
    private_ip = "10.0.0.12"
    source_dest_check = false
    subnet_id = "$aws_subnet.eu-west-1b-public.id"
    triggers 
      template = "$data.template_file.test.rendered"
    

    tags 
            Name = "bootstrap2"
        

但它使“引导”资源内的触发器失败。那么如何使用我定义的云配置来配置此实例?

【问题讨论】:

【参考方案1】:

triggers 不是aws_instance 资源的有效参数。将配置传递给cloud-init 的常用方法是通过user_data 参数,如下所示:

resource "aws_instance" "bootstrap2" 
  ami = "$var.aws_centos_ami"
  availability_zone = "eu-west-1b"
  instance_type = "t2.micro"
  key_name = "$var.aws_key_name"
  security_groups = ["$aws_security_group.bastion.id"]
  associate_public_ip_address = true
  private_ip = "10.0.0.12"
  source_dest_check = false
  subnet_id = "$aws_subnet.eu-west-1b-public.id"

  # Pass templated configuration to cloud-init
  user_data = "$data.template_file.test.rendered"

  tags 
    Name = "bootstrap2"
  

【讨论】:

以上是关于使用cloud-init初始化配置服务器环境及初始化项目,阿里云实践的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Terraform 上使用 cloud-init 初始化实例

在本地KVM中使用cloud-init

centos6.7 64位安装及初始化环境配置

cloud-init 执行分析

Jenkins安装及初始化配置

Node.js环境配置及初始化