【Terraform】 ECS/IAM Creation Process Summary【Terraform】 创建ECS/IAM的步骤汇总
文献引用
-
- Terraform – CentOS 7 に Terraform をインストールして AWS へ接続
-
- Terraformインストール
-
- AWS FargateとTerraformで最強&簡単なインフラ環境を目指す
-
- tfenvでTerraformのバージョン管理をする
-
- Terraform Workspacesの基礎と使い方について考えてみた!
-
- Amazon ECS+Fargate まとめ (terraformを使ったクラスタ構築とオートスケール、ブルーグリーンデプロイ)
-
- Terraform職人入門: 日々の運用で学んだ知見を淡々とまとめる
- TerraformでJSONにコメントを書きたいだけの人生だった
Terraform安装步骤
◆ 檢查最新版本
- https://releases.hashicorp.com/terraform/
◆ 安装命令
$ sudo yum install wget unzip
$ wget https://releases.hashicorp.com/terraform/0.12.25/terraform_0.12.25_linux_amd64.zip
$ sudo unzip ./terraform_0.12.25_linux_amd64.zip -d /usr/local/bin/
$ terraform -v
◆ 使用tfenv进行版本管理
- tfenv:Terraformのバージョン管理に特化したツール
//git clone 〜 パス設定
$ git clone https://github.com/tfutils/tfenv.git ~/.tfenv
$ echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile
//tfenvインストール
$ tfenv install latest
$ tfenv use latest
$ tfenv list
terraform术语
用語意味StateTerraformで管理するリソースの状態。.tfstateのことtf.stateローカルにtfstateファイルが生成されるが、S3で管理するのが基本BackendStateの保存先。 ※S3などResourceTerraformで管理する対象の基本単位ModuleResourceを再利用するためにまとめたTerraformのコード
最初的设定
◆ terraform.tfvars定义
$ cat >> ./terraform.tfvars << FIN
access_key = "*****************"
secret_key = "*****************"
db_user = "XXXXX"
db_pass = "XXXXXXXXX"
FIN
◆ 创建terraform工作区
$ terraform workspace new development
$ terraform workspace select development
◆ 创建用于S3的配置文件 ※用于存储tfstate文件的位置
$ aws configure --profile s3-profile
主要的.tf文件
- AWS FargateとTerraformで最強&簡単なインフラ環境を目指す
// 変数を定義 ※terraform.tfvars参照
variable "access_key" {}
variable "secret_key" {}
variable "token" {}
variable "db_user" {}
variable "db_pass" {}
variable "region" { default = "ap-northeast-1"}
// S3にtfstateを格納
terraform {
backend "s3" {
bucket = "sample-project"
key = "sample-project.terraform.tfstate"
region = "ap-northeast-1"
profile = "sample-profile"
}
}
// プロバイダ設定 ※上記変数参照
provider "aws" {
access_key = "${var.access_key}"
secret_key = "${var.secret_key}"
region = "${var.region}"
}
// modulesのソースを指定
module "base" {
region = "${var.region}"
db_user = "${var.db_user}"
db_pass = "${var.db_pass}"
source = "./modules"
}
ecs.tf可以用本地中文重述为“云服务器.”
resource "aws_ecs_cluster" "ecs_cluster" {
name = "sample-cluster"
}
创建IAM策略/ IAM角色
- Terraform
data "aws_iam_policy_document" "samplepolicy" {
statement {
actions = [
"s3:PutObject",
"s3:GetObject",
]
resources = [
"arn:aws:s3:::foo-bucket/*",
]
}
}
resource "aws_iam_policy" "samplepolicy" {
name = "samplepolicy"
path = "/"
description = ""
policy = data.aws_iam_policy_document.samplepolicy.json
}
data "aws_iam_policy_document" "samplerole_assume_policy" {
statement {
actions = ["sts:AssumeRole"]
principals {
type = "Service"
identifiers = ["ecs-tasks.amazonaws.com"]
}
}
}
resource "aws_iam_role" "samplerole" {
name = "samplerole"
assume_role_policy = data.aws_iam_policy_document.samplerole_assume_policy.json
}
resource "aws_iam_role_policy_attachment" "samplerole_attachement" {
role = aws_iam_role.samplerole.name
policy_arn = aws_iam_policy.samplepolicy.arn
}