Automate three-tier-architecture with Terraform & GitHub Actions

概述

这是为了记录我建这个项目的过程。它并非旨在提供所有信息。

源代码

源代码位于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”参数。

你可能感兴趣的:(Automate three-tier-architecture with Terraform & GitHub Actions)