使用Terraform构建AWS环境的方法

我正在整理关于构建与开展某项服务相关的IAM的内容,希望能对此有所帮助。

Terraform是什么意思?

用于使用代码(模板文件)自动化基础设施构建和配置的工具。
https://dev.classmethod.jp/cloud/terraform-getting-started-with-aws/

关于环境

    • Mac(High Sierra 10.13.5)

Docker for Mac をインストール済み
Gitをインストール済み
Docker Terraform(v0.11.7)

在使用AWS控制台之前需要完成的环境配置任务。

为了不使用root账号进行操作,创建了一个具有较高权限的账号。因此,请将安全性设置得与root账号一样高。

p5_result.png

使用Docker构建Terraform环境。

从DockerHub下载terraform的镜像。

使用Docker拉取hashicorp/terraform:light镜像。

在Mac上创建一个工作区文件夹。

我想要设置一个用于运行的 shell,所以我会按照以下文件夹结构进行设置。
※我将在文档文件夹下构建如下的文件夹结构。

terraform
├ aws
│ └ main.tf
│
└ bin
  └ terraform_aws.sh

创建一个用于执行的Shell脚本。

我参考了以下网站并创建了一个名为“terraform_aws.sh”的文件:
https://qiita.com/ojiry/items/89bd8b3a68c69c84a60e

#!/usr/bin/env bash

set -eu

SCRIPT_DIR=$(cd $(dirname $0); pwd)

cd $SCRIPT_DIR/../

docker run -i --rm -t -v $(pwd)/aws:/aws -w /aws hashicorp/terraform:light $@

用terraform进行建设

文件将由Git进行管理。
※访问密钥等机密信息将不被包含在Git管理范围内。

    • 作成したワークスペースフォルダに移動します。

 

    • $ cd terraform/aws

 

    • $ git init

 

    .gitignoreファイルを作成してGit管理外のファイルを指定します。
# Local .terraform directories
**/.terraform/*

# .tfstate files
*.tfstate
*.tfstate.*

# Crash log files
crash.log

# Ignore any .tfvars files that are generated automatically for each Terraform run. Most
# .tfvars files are managed as part of configuration and so should be included in
# version control.
#
terraform.tfvars
    terraform.tfvars ファイルを作成してAdmin権限をもったユーザーのアクセスキーを記述します。
aws_access_key = "*******************"
aws_secret_key = "**********************"
    • main.tf ファイルを作成します。

リージョンは東京にしています。

variable "aws_access_key" {}
variable "aws_secret_key" {}
variable "region" {
    default = "ap-northeast-1"
}

provider "aws" {
    access_key = "${var.aws_access_key}"
    secret_key = "${var.aws_secret_key}"
    region = "${var.region}"
}
    設定ファイルはまだないですが、これでAWSに環境を構築する準備ができました。

使用 terraform 进行初始化

    最初にまず以下のコマンドを実行します。

在本地执行以下命令的中文本地化解释:
运行bin目录下的terraform_aws.sh脚本进行初始化操作。

使用 Terraform 进行规划和执行

    • 設定を追加/修正するたびに以下のコマンドを実行して反映させます。

コマンドについては冒頭の「Terraformとは?」のリンク先を参照してください。

在终端输入以下命令来执行AWS Terraform脚本的计划和应用:
$ sh bin/terraform_aws.sh plan
$ sh bin/terraform_aws.sh apply

虽然匆忙进行,但是现在可以利用Terraform在AWS上建立环境了。


赠品

使用AWS CodeCommit进行版本管理

在写作之前,假设您已经了解Git的使用方法。

    1. 使用本地PC创建SSH密钥。

 

    1. ssh-keygen -t rsa -b 4096 -C “电子邮件地址”

使用terraform创建能够在CodeCommit存储库中进行提交的用户。

请将「<< >>」中的文本替换为相应内容。

resource "aws_codecommit_repository" "terraform" {
  repository_name = "terraform"
  description     = "AWS インフラ構築や設定をコード(テンプレートファイル)を使って自動化するためのツール"
}

resource "aws_iam_user" "terraform_committer" {
  name = "terraform_committer"
}

resource "aws_iam_user_ssh_key" "terraform_committer" {
  username   = "${aws_iam_user.terraform_committer.name}"
  encoding   = "SSH"
  public_key = "<<公開鍵>>"
}

resource "aws_iam_policy" "terraform_committer_policy" {
    name        = "terraform_committer_policy"
    description = "GIT管理のみ"
    policy = <<EOF
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "StmtTerraformCommitter01",
            "Effect": "Allow",
            "Action": [
                "codecommit:ListRepositories"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "StmtTerraformCommitter02",
            "Effect": "Allow",
            "Action": [
                "codecommit:BatchGetRepositories",
                "codecommit:GetBlob",
                "codecommit:GetBranch",
                "codecommit:GetCommit",
                "codecommit:GetDifferences",
                "codecommit:GetObjectIdentifier",
                "codecommit:GetReferences",
                "codecommit:GetRepository",
                "codecommit:GetRepositoryTriggers",
                "codecommit:GetTree",
                "codecommit:GitPull",
                "codecommit:GitPush",
                "codecommit:ListBranches",
                "codecommit:ListRepositories"
            ],
            "Resource": [
                "arn:aws:codecommit:ap-northeast-1:<<AWS アカウントID>>:terraform"
            ]
        }
    ]
}
EOF
}

resource "aws_iam_user_policy_attachment" "terraform_committer_policy-attach" {
    user       = "${aws_iam_user.terraform_committer.name}"
    policy_arn = "${aws_iam_policy.terraform_committer_policy.arn}"
}
    ファイル作成後、反映させます。

$ 执行 bin/terraform_aws.sh plan
$ 执行 bin/terraform_aws.sh apply

    GitにOriginリポジトリを追加します。

将以下内容以中文进行释义并给出一个选项:
$ git remote add origin ssh://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/terraform

在中文中,这段内容可以翻译为:
$ git remote add origin ssh://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/terraform。

Please note that the translation provided is the same as the original text and may not make complete sense out of context.

    ローカルPCにSSHの設定をします。
Host codecommit-terraform
  Hostname git-codecommit.ap-northeast-1.amazonaws.com
  User <<terraform_committerユーザーのSSHアクセスキー>>
  IdentityFile <<SSH秘密鍵ファイルパス>>
广告
将在 10 秒后关闭
bannerAds