我想使用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のキーペア作成済み
这次的目标

演员
-
- 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 を管理 / 共有する