概述
这是为了记录我建这个项目的过程。它并非旨在提供所有信息。
源代码
源代码位于GitHub。
源代码主要是Terraform HCL代码,用于定义三层架构应用程序的资源。
建造过程
在GitHub中创建一个新的repo
存储库名称:automated-three-tier-architecture-with-terraform-and-GitHub-actions
选择“Terraform”作为.gitignore模板
选择“Add a README file”
为AWS和Terraform Cloud的密钥创建环境变量
单击“Settings”选项卡,然后选择“Secrets->Actions->New repository secret”,创建以下三个环境变量:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
TF_API_TOKEN
部署时,系统使用这些密钥访问AWS和Terraform Cloud
创建一个workflow
创建repo后,单击“Actions”选项卡,然后找到“Terraform”并选择“Configure”,打开一个名为 .github/workflows/terraform.yml 的 yaml 文件。
编辑文件并删除文件前面的所有指令注释,插入以下代码:
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
最后提交这个文件。
在linux终端上,通过clone存储库来获取源代码
使用以下命令clone代码(此操作前您需要创建一个ssh密钥并将公钥文件上传到您的GitHub帐户):
$ git clone [email protected]:alunwang/automate-three-tier-architecture-with-terraform-and-GitHub-actions.git
$ cd automate-three-tier-architecture-with-terraform-and-GitHub-actions
为您的开发创建一个新分支
使用以下命令创建一个名为“feature”的新分支:
$ git branch
* main
$ git checkout -b feature
$ git branch
* feature
main
现在您可以在“feature”分支上进行开发。
将新的“feature”分支推送到GitHub
当您仍在“feature”分支上时,可以使用以下命令将此新分支推送到远程:
$ git push origin feature
如果“feature”分支有任何变化,该推送会提醒您创建一个“Pull request”到“main”分支。
创建一个“Pull request”,然后将请求合并到“main”分支
转到GitHub中的automate-three-tier-architecture-with-terraform-and-GitHub-actions存储库。
问题与解决方案
Error #1: No valid credentials
Issue error message:
错误信息:
Error: error configuring Terraform AWS Provider: no valid credential sources for Terraform AWS Provider found.
解决方案:
首先在GitHub中为仓库创建环境变量。
然后将代码添加到工作流 yaml 文件中。
Error #2: terraform fmt -check failure
Issue error message:
错误信息:
Run terraform fmt -check
/home/runner/work/_temp/8fb1e7c7-b30f-4ee9-bf91-e00e2332c16f/terraform-bin fmt -check
aws.tf
Error: Terraform exited with code 3.
解决方案:
即使在Linux终端上运行“terraform fmt -check”,它似乎是成功的,没有任何错误信息,但是,如果我们使用以下命令检查返回码,我们可以看到它返回非零码3:
$ echo $?
3
但是对于workflow,这个非零代码会导致失败。
我的案例的问题是由于使用Windows编辑器引起的,该编辑器在代码中引入了“^M”。
解决方案一是从源代码中删除所有“^M”。
解决方案二是“terraform fmt”中的“-check”参数。