使用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