我想使用WordPress的REST API来构建一个SPA,并在Terraform中首先设置AWS环境

首先

这是亚马逊网络服务2016年圣诞节日历的第23天的文章。

简述

正如标题所述,这次是关于AWS的“亚马逊云环境搭建”为目标的讨论。关于使用Terraform搭建AWS环境的话题。关于使用WordPress的REST API等的讨论将在以后进行。

Terraform是什么?

这个工具使用了一个包含了定义基础设施配置的模板文件作为输入,然后使用terraform命令将这些配置应用到AWS或其他云环境中。

前提 – –

假设 – –

条件 – –

先决条件 – –

    • 開発環境にterraformをインストール済み

筆者の環境は、v0.7.6

AWSアカウント・環境構築用のIAM作成済み

アクセスキーを作成し、アクセスキー+シークレットキーを控えておいてください

独自ドメイン取得済み

お名前.comでも、VALUE DOMAINでも、Route53でもどこで取ってもOK

独自ドメインのサーバ証明書をACM(AWS Certificate Manager)で作成

TerraformでACMの構成管理は出来ないようなので、証明書の作成はコンソールでポチポチと実施
admin@<独自ドメイン>等、管理者メールアドレス受信確認できること!

EC2のキーペア作成済み

这次的目标

cloudcraft - WP-REST-API-SPA.png

演员

    • public user: Webサイトにアクセスする一般ユーザー

 

    admin user: WordPressから記事を投稿するユーザー

AWS各服务的位置

    • EC2: WordPress環境

 

    • RDS: WordPressで利用するDB(MySQL)

 

    • S3: フロントエンド側のコンテンツ配信用

EC2で設置したWordPressからREST APIでデータ取得して、Riot.jsやらReactやら何やら使ってSPA実装して、このS3へデプロイする想定

CloudFront: キャッシュサーバ

ACMで作成した証明書を導入しhttps化

Route53: 独自ドメイン管理

环境的建设步骤

以下全都基于自己的开发环境进行实施。
在我自己的情况下,使用的是OS X El Capitan操作系统。

1. 仓库克隆

这次的terraform源代码我已经准备在这里了。
https://github.com/K1-Style/aws-terraform-wp-front

git clone https://github.com/K1-Style/aws-terraform-wp-front.git
cd ./terraform

2. 创建环境变量文件(terraform.tfvars)

cp terraform.tfvars.sample terraform.tfvars

请在terraform.tfvars文件中,根据您自己的环境填入以下数值。

    • aws_access_key: 前提で作成したIAMのアクセスキーID

 

    • aws_secret_key: 前提で作成したIAMのシークレットキー

 

    • aws_db_username: RDS rootユーザー名(任意)

 

    • aws_db_password: RDS rootパスワード(任意)

 

    • aws_db_wp: WordPress用のDB名(任意)

 

    • aws_db_wp_username: WordPress用のDBユーザー名(任意)

 

    • aws_key_name: 前提で作成したEC2のキーペア名

 

    • ssh_key_file: 前提で作成したEC2のキーペアファイル名(例:**.pem など)

 

    • bucket_name: S3のバケット名(前提で設定した独自ドメイン名にする)(任意)

 

    • index: S3のindexファイル名(任意)

 

    acm_certificate_arn: 前提で作成したACM証明書のARN

请为以下内容定义任意名称:

    • aws_vpc_name

 

    • aws_subnet_public_name

 

    • aws_subnet_private_db1

 

    • aws_subnet_private_db2

 

    • aws_internet_gateway_name

 

    • aws_route_table_name

 

    • aws_security_group_web_name

 

    • aws_security_group_db_name

 

    • aws_db_subnet_group_name

 

    • aws_db_instance_identifer

 

    aws_instance_name

3. terraform.tfstate的配置是共享的。

当使用Terraform进行环境搭建时,会生成一个名为terraform.tfstate的状态管理文件。默认情况下,该文件会在本地创建,但Terraform还具备在Amazon S3中进行管理的功能。

这个状态管理文件中包含了很多不能随意公开的信息,而且不仅要自己进行配置管理,还可以将配置管理交给其他开发人员或CI管理,为此建议将其共享到S3上。

请提前在S3上创建用于管理tfstate文件的存储桶。
然后执行以下命令。

terraform remote config -backend=S3 -backend-config="bucket=<tfstate共有用に作成したS3バケット名>" -backend-config="key=tf" -backend-config="region=<リージョン名>"

※地区名称为ap-northeast-1时代表东京。

3. terraform plan(预览执行)

terraform plan

在这个时间点上,尚未在AWS上反映出来。
预期的执行结果会在控制台上逐个显示。

计划执行时需要注意!

在这种情况下,我们正在EC2上进行WordPress的配置预配。但是,plan命令无法确认预配结果。这次我们使用Terraform统一进行EC2内的中间件配置,但我认为使用Ansible之类的工具可能更易于进行测试确认。

执行terrafor apply!

如果terraform的计划没有问题,那就执行以下操作!

terraform apply

申请时的注意事项!

如果在执行apply时出现错误,
根据terraform的规定,不会进行回滚操作。
此时已经创建的环境将保持不变,请注意。

当再次执行apply操作时,只会进行差异性的追加/修改。

5. 确认在AWS控制台上是否可以实际执行

首先,在EC2上检查WP。
访问http://<EC2公共DNS>/wordpress/。确认出现提示WP设置的页面。

接下来,检查S3+CloudFront的前端部分。
将index.html文件放置在使用Terraform创建的S3存储桶的根目录中。
通过预先准备的自定义域名进行https访问,以确保index.html的内容被正确反映。

那个感受

在学习Terraform时花费了一些时间,但是一旦定义好了,以后管理AWS环境就变得很容易修改,很不错呢。

未来的挑战(想做的事情,未完成的事情)

    • EC2上のWPを利用する人は限られているし、管理画面しか使用しないので、

 

    • IP制限等セキュリティ設定ちゃんとしといたほうが良いかと

 

    • CI使ってplanのテストやapplyの導入を自動化したい

 

    • EC2は、PackerやAnsibleでAMIを作ってからインスタンス作るべきだったか。。

 

    • [参考][初心者歓迎] Packer + Ansible + TerraformでWordPressを構築

環境整えたは良いけど、肝心のフロント側を実装せねば。。

我参考了一下

    • TerraformだけでAWS環境にWordPressを構築する

 

    • 【速報】TerraformがCloudFrontに対応しました

 

    Amazon S3 で Terraform の状態管理ファイル terraform.tfstate を管理 / 共有する
广告
将在 10 秒后关闭
bannerAds