使用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账号一样高。
使用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的使用方法。
-
- 使用本地PC创建SSH密钥。
-
- 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秘密鍵ファイルパス>>