【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
}
广告
将在 10 秒后关闭
bannerAds