同时开始学习Terraform和AWS

我是 GMO ペパボ 和 ムームードメイン 的工程师@litencatt。

昨天是由@dp42开发的一个作为”Hello, World.”之后的聊天机器人。

今天,自从入职以来,我一直专注于Web开发,但最近我阅读了一本关于AWS和Terraform的基础设施建设的书,基于这本书的内容,我想写一写我尝试了的经历。

要做的事情 zuò de

我們將使用 Terraform 進行 AWS 環境構築,參考「Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版」的基礎架構及流程。

此外,本次我們將直接內部進入EC2實例進行Apache等各種安裝的指令執行。

目标

我們將在AWS上進行以下環境搭建。

    • EC2インスタンス x 2台

Webサーバ

インターネットゲートウェイを持つ
Apache(httpd)上でWordPressが動作している

DBサーバ

NATゲートウェイを通してインターネットに接続する
MySQLが起動している

这两个实例存在于同一个VPC上,

我会处理以下具体的AWS资源。

    • EC2

 

    • VPC

 

    • サブネット

 

    • ルートテーブル

 

    • インターネットゲートウェイ

 

    • セキュリティグループ

 

    • Elastic IP

 

    NATゲートウェイ

关于我这次所参考的书籍

在这篇文章中,没有对VPC、子网等各种术语进行解释,但我参考的这本书在这方面有非常详细的解释,并且有关如何在AWS上构建环境的图示非常易懂。因此,我认为对于初次接触这些内容的人来说,这是一本非常推荐的书籍。我建议您准备一本这样的书,尝试一下本文中的内容,希望您会喜欢。

Terraform 是什么?

    • AWSなど様々なサービスProviderに対して、サーバの構築・変更・管理を行うためのツール

HashiCorpのプロダクト
Enterprise版もあるみたい

在Pepabo,我们以OpenStack作为我们自己的私有云运营系统。
Terraform也支持OpenStack,并且最近各项服务的基础设施管理已经越来越多地使用Terraform进行。

这次我们会在AWS上使用Terraform。
https://www.terraform.io/docs/providers/aws/index.html

这个代码库

备战

Terraform的安装(Mac版)

$ brew install terraform

使用版本

使用2017年12月3日的最新发布版本。

$ terraform version
Terraform v0.11.1
+ provider.aws v1.5.0

主要针对Vim

如果处理HCL文件的话,在你的Vim中安装这个插件似乎很方便。

准备AWS

    • AWSアカウント作成

https://portal.aws.amazon.com/billing/signup#/start

AWSアクセスキー作成

ユーザーを作成してアクセスキーとシークレットアクセスキーを取得します
また、TerraformよりEC2インスタンス作成するにはAmazonEC2FullAccessのポリシーをグループに対してアタッチしておく必要があります
参考: https://qiita.com/miwato/items/291c7a8c557908de5833

terraform.tfvars文件的配置

这次我们将AWS的访问密钥等机密信息保存在terraform.tfvars文件中。
请在这里设置创建的访问密钥和密钥访问密钥。
如果要更改区域等内容,请根据需要进行更改。

access_key = "AWS_ACCESS_KEY"
secret_key = "AWS_SECRET_KEY"
region     = "ap-northeast-1"
key_name   = "KEY_PAIR_NAME"

请注意不要将包含实际访问密钥等信息的terraform.tfvars文件提交到存储库中。

登录EC2实例时所需的密钥文件。

这次我们在AWS的仪表板上创建了一个密钥对,并指定在创建EC2实例时使用它。因此,请在key_name中设置所创建的密钥对名称。
另外,由于登录到EC2实例时需要使用,最好将生成的密钥对文件放在同一目录下。

创建虚拟专用云 (VPC)

首先创建一个VPC。

variable "access_key" {}
variable "secret_key" {}
variable "region" {}

provider "aws" {
  access_key = "${var.access_key}"
  secret_key = "${var.secret_key}"
  region     = "${var.region}"
}

resource "aws_vpc" "vpc-1" {
  cidr_block = "10.0.0.0/16"
  tags {
    Name = "vpc-1"
  }
}

在创建main.tf文件后,执行$ terraform init命令,以获取AWS的插件。

image

顺便说一下,自v0.11.0起,如果使用$ terraform apply命令进行应用,需要输入下面的yes才会执行应用的更改。

$ terraform apply

(省略)

Plan: 15 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value:

如果在没有进行初始化的情况下执行计划等,会出现错误。

请先执行 terraform init

$ terraform plan
Plugin reinitialization required. Please run "terraform init".
Reason: Could not satisfy plugin requirements.
...(略

以下是其中国语的同义词:在下一阶段之工作。

由于将所有的工作内容都写在文章中可能会变得很冗长,所以请参考各自的PR来了解后续的工作内容。
我们创建了PR并清晰地说明了步骤和差异,并在必要时添加了说明。
另外,为了进行确认,在每个PR中都执行了$ terraform apply。

    • パブリックサブネットの作成

 

    • インターネットゲートウェイの作成

 

    • パブリックルートテーブルの作成

 

    • tfファイルの分割

 

    • EC2インスタンス(Webサーバ)の作成

 

    • WebサーバへのElastic IPの適用

 

    • Webサーバのセキュリティグループへアウトバウンド設定追加

 

    • WebサーバへのApacheインストールなど

 

    • プライベートサブネットの作成〜DBサーバ作成

 

    NATゲートウェイの作成〜各種インストール

确认WordPress页面的显示

image

请注意,由于此文章中创建的实例已经被销毁,因此无法访问 PR 上的 URL。

尝试使用Terraform来搭建AWS环境。

    • 例えばEC2を作成した場合、未設定項目はデフォルト設定が適用される

ネットワークインターフェースはeth0が追加される
ストレージもgp2, 8GiBのタイプが適用される

ICMPエコー許可設定

サーバに対してpingを有効にするためにセキュリティグループにICMPの許可設定を追加する場合に、通常はfrom_port、to_portにはポート番号を設定しますがICMPを追加する場合はICMP番号という番号で指定しなければならないようです

vpc.tf
resource “aws_security_group” “web-sg” {

+ ingress {
+ from_port = 8
+ to_port = 0
+ protocol = “icmp”
+ cidr_blocks = [“0.0.0.0/0”]
+ }

Elastic IPはデフォルトの上限が5

Amazon Elastic Compute Cloud (Amazon EC2) 制限
それを超えた場合、apply時にエラーが出ます(エラーなどの詳細は下記リンク参照ください)

NATゲートウェイの作成

請求料金などについて

Elastic IPやNATゲートウェイは使用していない時は開放する
ダッシュボード上のリソースの使用数表示はリージョン毎らしいので注意する

AWSで無料枠を利用し「Elastic IP」も全て解放済みのはずなのに料金が発生した件の原因と対応

以后的未来

    • lifecycleを使ってリソースの再作成が必要以上に行われないようにする

 

    • 最新のAMIが常に指定されるようなami設定にする

Basic Two-Tier AWS Architectureなファイル運用にする
moduleを使ってみる

AWS VPC Terraform module

最后

这次,我主要使用Terraform在AWS上构建了WordPress环境。不仅仅是WordPress环境,连Node.js和Rails等环境也可以在约10秒内轻松建立起来,这是Lolipop!托管云的β版,目前正在免费公开。请务必也去试试:https://mc.lolipop.jp/

我参考了一个网站。

    • AWSでTerraformに入門

 

    Terraformで複数台のEC2インスタンスを構築する場合のTIPS

等等,有许多选项

广告
将在 10 秒后关闭
bannerAds