使用AWS Proton来管理多个开发环境
为了什么
我们正在使用Terraform进行基础设施即代码(IaC),AWS Proton提供了使用Terraform进行自我管理的自动配置(通过自己的Github Action进行配置),所以我们决定利用它。
由于Proton、Terraform和GitHub Action之间的协作相当复杂且官方说明仅限于概要级别,因此我已经整理成序列图。
请参考
自己管理型プロビジョニングについて
https://aws.amazon.com/jp/blogs/news/aws-proton-self-managed-provisioning/
サンプルコード
AWSのサービスがHCLで記載されたサンプルコード
https://github.com/aws-samples/aws-proton-terraform-sample-templates
自己管理型プロビジョニングとして実行するgithub actionのサンプルコード
https://github.com/aws-samples/aws-proton-terraform-github-actions-sample
構築したAWS環境で動作するサンプルアプリケーションコード
https://github.com/aws-samples/aws-proton-sample-services
关于Proton、Terraform和GitHub Action之间的协作(总体图)
- AWS公式で公開されている概要図はこちら
提前准备
为了让 aws-proton-terraform-github-actions-sample 正常运行,需要进行 GitHub 认证和 S3 存储桶的配置。
由于可以使用 cloudformation 完成此配置,请参考 aws-proton-terraform-github-actions-sample 的 READMe。
https://github.com/aws-samples/aws-proton-terraform-github-actions-sample/blob/main/README.md
有关Proton、Terraform和GitHub Actions之间的协作(详情)。
在普罗顿中注册环境模板和服务模板。
-
- 複数のサービスが含まれるテンプレートリポジトリの場合はディレクトリ名と一致させる必要がある。
参考https://qiita.com/techiohanina/items/4571de942ad46c765c0d
ディレクトリ名に誤りがあるとリポジトリ同期の際にエラーとなる。
同期させておくとテンプレートリポジトリを更新した際にproton側でもバージョンアップしてくれる。
从环境模板中进行环境提供
3. 从服务模板中部署服务实例。
-
- サービスインスタンスの構築フローも環境構築時と同様。PR作成時にterraformの変数ファイルが自動作成され、PRが作成される。mergeすることでapplyが実施される。
-
- protonのサービスとはサービスインスタンスとパイプラインをまとめた名称となっているため、この段階ではパイプラインは構築されずサービスインスタンスのみ作成される。ECSなどもここで構築されるが、nginxのpublicイメージが呼び出されており、welcome画面が表示される状態となる。
- サービスインスタンスの構築が完了すると自動的にproton側からパイプラインの構築がスタートする。
4-前半:在服务模板中为管道进行部署。
-
- パイプラインの構築も先述と同様PR作成時にterraformの変数ファイルが自動作成され、PRが作成される。
- コードシリーズの構築の場合、コードパイプラインが作成され、予め選択していたアプリケーションリポジトリからソースを同期する。
4-下半部分:将应用程序更新为最终版本。
-
- コードシリーズは構築後初回のパイプラインが実行され、コードデプロイの最終処理でprotonのAPIが実行される。そこで具体的なアプリケーションのイメージタグでproton.service_instance.variables.tfが更新され再度PRが作成される。
- コードデプロイから呼び出されたproton APIはwait処理を実行するためPRがmerge/applyされるまでinprogressとなる。
总结
我整理了使用AWS Proton和Terraform进行环境构建的流程。
由于省略了一些内容,我会随时进行更新。
最终,我在我所管理的环境中创建了一个使用GitHub Actions完成的工作流程,而不是使用AWS CodeSeries。(利用Proton API进行)下次将详述有关使用GitHub Actions创建的工作流程。