使用Terraform操作EC2并进行ssh连接

请提供参考。

    • Change Infrastructure – Terraform by HashiCorp

 

    terraformでsshアクセス可能なEC2インスタンスを作成する – Qiita

其他链接集

    • Heroku

Terraform で Ruboty-Gacha アプリケーション を Heroku に構築 – Qiita

DigitalOcean

Terraform を Digital Ocean で触ってみた (初級編) – Qiita

GCE

Terraform 0.2.2 で GCE + Ansible を試してみた – Qiita
Terraform 0.2 で Google Compute Engine を試してみた (初級編) – Qiita

AWS

TerraformでAWS(EC2)のセキュリティグループを管理 – Qiita
TerraformでAWS S3バケットを操作 – Qiita


下载 Terraform

    • http://www.terraform.io/downloads.html

 

    v0.6.0 (2015/7/11)

terraform配置文件

    • access_keyとsecret_keyの取得方法は

EC2ダッシュボード -> 右上のAWSにようこそ -> 認証情報 -> ユーザ -> ユーザ操作 -> アクセスキーの管理 -> アクセスキーの作成 -> ユーザーのセキュリティ認証情報を表示 -> アクセスキー ID, シークレットアクセスキー

provider "aws" {
    access_key = "XXXXXXXXXXXXXXXXXXXX"
    secret_key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    region = "ap-northeast-1"
}

resource "aws_instance" "example" {
    ami = "ami-cbf90ecb" #AmazonLinux
    #ami = "ami-936d9d93" #Ubuntu
    instance_type = "t2.micro"
    key_name = "aws_key1"
    security_groups = ["${aws_security_group.default.name}"]
}

# SSH access from anywhere
resource "aws_security_group" "default" {
    name = "terraform_example"
    description = "Used in the terraform"
    ingress {
        from_port = 22 #適宜変更
        to_port = 22
        protocol = "tcp"
        cidr_blocks = ["0.0.0.0/0"]
    }
}
    remote-exeでコマンド発行やfileでファイル転送ができるようだが自分は成功しなかったので別の方法(itamaeとか)で実施する。

terraform命令

./terraform apply
    applyすると、現在のEC2インスタンスがterminatedになり、新規インスタンスがrunningになる。
./terraform plan
./terraform show
./terraform play -destroy
./terraform destroy
# yes を入力。一応EC2ダッシュボードから削除(=terminated状態)か確認しておくこと。

如果想要详细记录,

TF_LOG=1 ./terraform showなど

SSH连接

全球IP验证

$ ./terraform show | grep public_ip
  public_ip = 52.69.110.23

对于AmazonLinux(AMI-CBF90Ecb)的情况

ssh -i aws_key1.pem ec2-user@52.69.110.23

如果是Ubuntu(ami-936d9d93)的情况

ssh -i aws_key1.pem ubuntu@52.69.110.23

分割設定

    terraform使い方(超基礎編) – Qiita
provider "aws" {
  access_key = "${var.access_key}"
  secret_key = "${var.secret_key}"
  region = "${var.region}"
}

resource "aws_instance" "example" {
    ami = "${lookup(var.amis, var.region)}"
    instance_type = "${var.instance_type}"
    key_name = "aws"
    security_groups = ["${aws_security_group.default.name}"]
}

resource "aws_security_group" "default" {
    name = "terraform_example"
    description = "Used in the terraform"

    # SSH access from anywhere
    ingress {
        from_port = 22
        to_port = 22
        protocol = "tcp"
        cidr_blocks = ["0.0.0.0/0"]
    }
}
variable "access_key" {
  description = "AWS access key"
  default     = "XXXXXXXXXXXXXXXXXXXX"
}

variable "secret_key" {
  description = "AWS secret access key"
  default     = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}

variable "region" {
  description = "AWS region to host your network"
  default     = "ap-northeast-1"
}

variable "instance_type" {
  default = "t2.micro"
}

variable "amis" {
  default = {
    "ap-northeast-1" = "ami-cbf90ecb" #AmazonLinux
    #"ap-northeast-1" = "ami-936d9d93" #Ubuntu14.04
  }
}
./terraform apply
广告
将在 10 秒后关闭
bannerAds