我稍微深入研究了Terraform Cloud的Run Tasks
首先
大家好,我是热爱Terraform Cloud的@kuroseets。
今年剩下的时间只有不到1个星期了,时间过得真快。
这篇文章是terraform Advent Calendar 2021中的第21天的文章。
包括今天在内,还有5天才结束,希望在此之前大家能一直陪伴着。
现在,我要介绍一下我对最近在 Terraform Cloud 上实施的 Run Tasks 功能进行的一些调查,希望大家能够喜欢。
跑任务是什么?
目前仍处于Beta版阶段,但在今年九月份,Terraform Cloud团队与治理功能以及Terraform Cloud商业版已经发布。
简单来说,这个功能是在Terraform Cloud的Plan和Apply之间发送事件到外部系统,并接收其响应。
通过这个功能,可以在Terraform的Plan后通知第三方或自定义的部署工具,接收来自Terraform外部部署的结果,从而决定是否继续执行Apply。
设置和操作验证
设定步骤
由于在官方页面上已经详细写明,所以在本文中将省略这部分内容。
基本上,我们会通过屏幕上的点击来操作。
Run Tasks API已经被实现,但是Terraform Enterprise Provider尚未实现,所以说要等到它被正式发布吧……大概是这个意思吧。
真实的交流
为了窥探有什么样的请求,我决定构建一个简单的网络服务器,只需将收到的请求记录到日志中,并在上述步骤页面的第四步中将该服务器的端点URL指定为Endpoint URL。然后,在执行Apply时,在Plan和Apply之间暂停处理,并在服务器端收到以下请求:
{
"payload_version": "1",
"access_token": "examplePo3Bodw.atlasv1.URceefTMN9cyJcSMZtoz1cjy29ORl8BU7H1AnvoPTwMfxWFUExOD1nLBFtA8example",
"task_result_id": "taskrs-examplefXexample",
"task_result_enforcement_level": "advisory",
"task_result_callback_url": "https://app.terraform.io/api/v2/task-results/example3-6a0e-4645-aa10-30eb1example/callback",
"run_app_url": "https://app.terraform.io/app/ORGNAME/WORKSPACENAME/runs/run-exampleZUexample",
"run_id": "run-exampleZUexample",
"run_message": "test",
"run_created_at": "2021-mm-ddTHH:MM:SS.SSSZ",
"run_created_by": "kuroseets",
"workspace_id": "ws-exampletJexample",
"workspace_name": "WORKSPACENAME",
"workspace_app_url": "https://app.terraform.io/app/ORGNAME/WORKSPACENAME",
"organization_name": "ORGNAME",
"plan_json_api_url": "https://app.terraform.io/api/v2/plans/plan-exampleu3example/json-output",
"vcs_repo_url": "https://github.com/GITORG/REPOSITORY.git",
"vcs_branch": "main",
"vcs_pull_request_url": "",
"vcs_commit_url": "https://github.com/GITORG/REPOSITORY/-/commit/example3e1681e0e286ad0ad6f9caf56bexample"
}
我认为外部应用程序可以使用 run_id 和 plan_json_api_url 来通过REST API 引用计划,因此可以根据结果来判断如何继续处理。
使用 access_token 在 task_result_callback_url 上发送 PATCH 请求,以通知正在进行的 Terraform Apply。请求的请求体中的 data.type.attributes.status 值将表示处理的成功或失败(passed/failed)。通过从适当的位置发送 curl 请求,我认为 Terraform 会恢复处理。
curl \
-X PATCH \
--header "Authorization: Bearer examplePo3Bodw.atlasv1.URceefTMN9cyJcSMZtoz1cjy29ORl8BU7H1AnvoPTwMfxWFUExOD1nLBFtA8example" \
--header "Content-Type: application/vnd.api+json" \
-d '{
"data": {
"type": "task-results",
"attributes": {
"status": "passed",
"message": "messages here"
}
}
}' \
https://app.terraform.io/api/v2/task-results/example3-6a0e-4645-aa10-30eb1example/callback
最后,
最终,
终究,
最近.
我之前已经提到了 Run Tasks,但它仍然是在测试阶段,尚未正式发布。
这个功能的规格也可能会发生变化,而且第三方的扩展也将在以后进行。
尽管如此,我认为如果功能更全面,它肯定会很方便。
另外,Terraform Cloud还在不断进行各种功能扩展,所以明年如果有机会的话,我还想进行各种调查。
祝大家新年快乐!