本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Terraform 開始使用 AWS DevOps 代理程式
概觀
本指南說明如何使用 Terraform 來建立和部署 AWS DevOps 代理程式資源。Terraform 組態會自動建立代理程式空間、IAM 角色、運算子應用程式和 AWS 帳戶關聯。
Terraform 方法透過將所有必要資源定義為基礎設施作為程式碼,自動執行 CLI 入門指南中所述的手動步驟。
AWS DevOps 代理程式可在下列 6 AWS 區域使用:美國東部 (維吉尼亞北部)、美國西部 (奧勒岡)、亞太區域 (雪梨)、亞太區域 (東京)、歐洲 (法蘭克福) 和歐洲 (愛爾蘭)。如需支援區域的詳細資訊,請參閱 支援的區域。
先決條件
開始前,請確定您具有下列項目:
Terraform >= 已安裝 1.0
AWS CLI 已安裝並使用適當的登入資料設定
一個 AWS 帳戶用於監控 (主要) 帳戶
(選用) 如果您想要設定跨 AWS 帳戶監控的第二個帳戶
(適用於第 4 部分)
awscc提供者版本 1.98.0 或更新版本。awscc_devopsagent_trigger已在該版本中新增awscc_devopsagent_asset和資源。若要檢查組態中的版本,請執行terraform providers。
本指南涵蓋的內容
本指南分為四個部分:
第 1 部分 — 使用 運算子應用程式和監控帳戶中的 AWS 關聯部署代理程式空間。完成此部分後,客服人員可以監控該帳戶中的問題。
第 2 部分 (選用) — 新增服務帳戶的來源 AWS 關聯,並將跨帳戶 IAM 角色加上 echo Lambda 部署至該帳戶。這可讓客服人員空間跨帳戶監控資源。
第 3 部分 (選用) — 註冊第三方服務 (Dynatrace、ServiceNow、Splunk、New Relic、GitLab、PagerDuty),並將其與代理程式空間建立關聯。
第 4 部分 (選用) — 將技能、自訂代理程式和排程觸發新增至代理程式空間,因此代理程式具有自訂知識,且排程觸發程式會自動執行該自訂代理程式。
已建立資源
第 1 部分:監控帳戶
IAM 角色 (
DevOpsAgentRole-AgentSpace-*) — 由 DevOps Agent 服務擔任以監控帳戶。包括AIDevOpsAgentAccessPolicy受管政策和允許建立 Resource Explorer 服務連結角色的內嵌政策。僅在existing_agentspace_role_arn未設定 時建立。IAM 角色 (
DevOpsAgentRole-WebappAdmin-*) — 具有客服人員操作AIDevOpsOperatorAppAccessPolicy受管政策的操作員應用程式角色。僅在existing_operator_role_arn未設定 時建立。客服人員空間 (可設定的名稱) — 使用
awscc_devopsagent_agent_space資源建立的中央客服人員空間。包括運算子應用程式組態。關聯 (AWS 監視器) — 使用
awscc_devopsagent_association資源將監控帳戶連結至客服人員空間。關聯 (AWS 來源) — (選用) 將服務帳戶連結到代理程式空間以進行跨帳戶監控。
第 2 部分:服務帳戶 (選用)
IAM 角色 (
DevOpsAgentRole-SecondaryAccount-TF) — 具有固定名稱的跨帳戶角色。受監控帳戶中的代理程式空間信任。包括AIDevOpsAgentAccessPolicy受管政策和允許建立 Resource Explorer 服務連結角色的內嵌政策。Lambda 函數 (
echo-service-tf) — 回應輸入事件的簡單範例服務。
第 4 部分:資產和觸發條件 (選用)
此組態會建立下列資源:
技能 (
rds-performance-investigation) — 代理程式在相關時載入的技能,使用awscc_devopsagent_asset資源搭配asset_type的 建立skill。自訂代理程式 (
rds-firefighter) — 將代理程式範圍限定為具有連接技能的特定工作流程,使用具有asset_type的awscc_devopsagent_asset資源建立custom_agent。Trigger (
TIME_BASED) — 依排程執行自訂代理程式,使用awscc_devopsagent_trigger資源建立。
設定
步驟 1:複製範例儲存庫
git clone https://github.com/aws-samples/sample-aws-devops-agent-terraform.git cd sample-aws-devops-agent-terraform
步驟 2:設定變數
複製範例變數檔案,並針對您的環境進行自訂:
cp terraform.tfvars.example terraform.tfvars
terraform.tfvars 使用您的客服人員空間名稱和描述進行編輯:
agent_space_name = "MyCompanyAgentSpace" agent_space_description = "DevOps Agent Space for monitoring production workloads"
第 1 部分:部署代理程式空間
在本節中,您會在監控帳戶中建立代理程式空間、IAM 角色、運算子應用程式和 AWS 關聯。
步驟 1:使用自動化部署 (建議)
使用提供的部署指令碼進行簡化設定:
./deploy.sh
此指令碼會自動:
檢查先決條件 (Terraform、 AWS CLI、登入資料)
視需要
terraform.tfvars從範例建立初始化、驗證、規劃和套用 Terraform
或者,如果您偏好手動控制:
terraform init terraform plan terraform apply
出現提示yes時輸入 以確認部署。
步驟 2:記錄輸出
部署完成後,Terraform 會列印輸出。記錄這些值以供日後使用:
Outputs: agent_space_id = "abc123" agent_space_arn = "arn:aws:aidevops:<REGION>:<MONITORING_ACCOUNT_ID>:agentspace/abc123" agent_space_name = "MyCompanyAgentSpace" devops_agentspace_role_arn = "arn:aws:iam::<MONITORING_ACCOUNT_ID>:role/DevOpsAgentRole-AgentSpace-a1b2c3d4" devops_operator_role_arn = "arn:aws:iam::<MONITORING_ACCOUNT_ID>:role/DevOpsAgentRole-WebappAdmin-a1b2c3d4" primary_account_id = "<MONITORING_ACCOUNT_ID>" primary_account_association_id = "assoc-xyz"
如果您打算完成第 2 部分,請儲存該agent_space_arn值。您需要它來設定服務帳戶資源。
步驟 3:驗證部署
執行部署後驗證指令碼:
./post-deploy.sh
或使用 AWS CLI 來驗證已成功建立代理程式空間:
aws devops-agent get-agent-space \ --agent-space-id <AGENT_SPACE_ID> \ --region <REGION>
此時,您的代理程式空間會在啟用 運算子應用程式且您的監控帳戶相關聯的情況下部署。代理程式可以監控此帳戶中的問題。
第 2 部分 (選用):新增跨帳戶監控
在本節中,您會擴展設定,讓客服人員空間可以監控第二個 AWS 帳戶 (服務帳戶) 中的資源。這涉及兩個動作:
新增指向服務帳戶的來源 AWS 關聯。
將跨帳戶 IAM 角色和 echo Lambda 函數部署至服務帳戶。
重要
您必須完成第 1 部分,才能繼續。服務帳戶資源需要agent_space_arn來自第 1 部分部署輸出的 。
步驟 1:設定服務帳戶 ID
在 中terraform.tfvars,設定您的服務帳戶 ID:
service_account_id = "<YOUR_SERVICE_ACCOUNT_ID>"
步驟 2:設定客服人員空間 ARN
從第 1 部分輸出複製 agent_space_arn值 (步驟 2),並在 中設定terraform.tfvars:
agent_space_arn = "arn:aws:aidevops:<REGION>:<MONITORING_ACCOUNT_ID>:agentspace/<SPACE_ID>"
服務帳戶資源使用此值來限制次要帳戶角色的信任政策範圍。只有在設定此值時,才會建立這些資源。
步驟 3:設定 `aws.service` 供應商
在 中main.tf,使用服務帳戶的登入資料設定aws.service提供者別名。您可以使用具名設定檔或擔任角色:
使用設定檔:
provider "aws" { alias = "service" region = var.aws_region profile = "your-service-account-profile" }
或使用擔任角色:
provider "aws" { alias = "service" region = var.aws_region assume_role { role_arn = "arn:aws:iam::<SERVICE_ACCOUNT_ID>:role/OrganizationAccountAccessRole" } }
步驟 4:部署
套用更新的組態:
terraform apply
這會在服務帳戶中建立下列資源:
信任監控帳戶中客服人員空間的 IAM 角色 (
DevOpsAgentRole-SecondaryAccount-TF)以 echo Lambda 函數 (
echo-service-tf) 做為範例服務
它也會在監控帳戶中建立來源 AWS 關聯,以連結服務帳戶。
步驟 5:驗證部署
測試 echo 服務以確認 Lambda 函數已成功部署:
aws lambda invoke \ --function-name echo-service-tf \ --payload '{"test": "hello world"}' \ --profile <your-service-account-profile> \ --region <REGION> \ response.json cat response.json
第 3 部分 (選用):註冊第三方整合
在本節中,您會向代理程式空間註冊外部服務 (Dynatrace、ServiceNow、Splunk、New Relic、GitLab、PagerDuty)。這些整合可讓 AWS DevOps 代理程式在調查期間存取遙測、事件資料和來源控制資訊。
與需要單獨的 IntegrationsStack 階段和代理程式空間 ID 手動配線的 AWS CDK 範例不同,這些資源會直接參考代理程式空間,並可部署在第 1 部分terraform apply相同的 中。
支援的整合
| 服務 | 服務類型 | 身分驗證 |
|---|---|---|
| Dynatrace | dynatrace |
OAuth 用戶端憑證 |
| ServiceNow | servicenow |
OAuth 用戶端憑證 |
| Splunk | mcpserversplunk |
承載字符 |
| New Relic | mcpservernewrelic |
API 金鑰 |
| GitLab | gitlab |
存取權杖 |
| PagerDuty | pagerduty |
OAuth 用戶端憑證 |
注意
資料狗不包含在 Terraform 組態中。連線 Datadog 需要互動式使用者 OAuth 授權 (瀏覽器登入和同意),如 中所述連接 DataDog,Terraform 無法自動化。透過 主控台的功能提供者頁面手動註冊 Datadog。
步驟 1:設定整合憑證
將 integrations區塊新增至 terraform.tfvars,僅填入您想要的服務。下列範例顯示 Dynatrace 整合:
integrations = { dynatrace = { account_urn = "<DYNATRACE_ACCOUNT_URN>" client_id = "<DYNATRACE_CLIENT_ID>" client_name = "<DYNATRACE_CLIENT_NAME>" client_secret = "<DYNATRACE_CLIENT_SECRET>" env_id = "<DYNATRACE_ENVIRONMENT_ID>" resources = ["<DYNATRACE_RESOURCE_1>"] } }
如需每個整合的完整形狀,請參閱範例儲存庫terraform.tfvars.example中的 。
ServiceNow 需求:一律instance_id明確設定為簡短執行個體名稱 (例如,"ven04972"— 而非完整 instance_url)。如果省略 instance_id ,則關聯會回復為 instance_url,DevOps Agent API 會使用 拒絕該關聯400 GeneralServiceException: instanceId '<url>' does not match the registered ServiceNow instance。
安全性:integrations變數會標記為 sensitive,因此其值會從計劃中修訂並套用輸出。請勿將實際登入資料遞交至 terraform.tfvars。對於生產,來自 AWS Secrets Manager 或 AWS Systems Manager 參數存放區的來源秘密 (例如,使用data來源),而不是純文字。
步驟 2:部署
套用組態:
terraform apply
這會為每個啟用的整合建立服務註冊和關聯。
步驟 3:檢閱輸出
部署完成後,整合輸出會將每個啟用的服務映射至其已註冊IDs:
integration_service_ids = { "dynatrace" = "service-abc123" } integration_association_ids = { "dynatrace" = "assoc-xyz789" }
如需為每個服務設定登入資料的詳細資訊,請參閱:
第 4 部分 (選用):新增技能、自訂代理程式和排程觸發
在本節中,您將三個資源新增至您在第 1 部分中建立的客服人員空間。您可以新增客服人員在相關時載入的技能,以及將客服人員範圍限定為特定工作流程的自訂客服人員。您也可以新增自動執行自訂代理程式的排程觸發。這些資源使用 awscc_devopsagent_asset和 awscc_devopsagent_trigger 資源。
這些資源可能會對您的帳戶產生額外費用 AWS 。若要在完成時將其移除,請遵循本指南結尾的清除區段。
此範例使用 skill和 custom_agent 資產類型。相同的awscc_devopsagent_asset資源會建立每個資產類型,例如 memory_store、 agents_md和 attachment。若要使用不同的類型,請變更 asset_type 引數,並提供 類型所需的中繼資料。如需資產類型的完整清單、其所需的中繼資料和屬性參考,請參閱 管理資產。
重要
您必須完成第 1 部分,才能繼續。這些資源需要第 1 部分部署的代理程式空間 ID。
步驟 1:新增組態
使用下列內容建立名為 assets.tf 的檔案。以時間為基礎的觸發動作會依資產 ID 參考自訂代理程式,格式為 custom:<assetId>。組態會自動從自訂代理程式的 asset_id 屬性進行路由。自訂代理程式的skills清單也會採用資產 IDs 而非名稱,因此會參考技能的asset_id屬性。這也會為 Terraform 提供隱含相依性,因此技能會在連接它的代理程式之前建立。
請注意, metadata和 action引數是以字串形式傳遞的 JSON 文件,因此此範例使用 jsonencode。
variable "agent_space_id" { type = string description = "The agent space ID from the Part 1 output" } # A skill the agent loads when relevant resource "awscc_devopsagent_asset" "example_skill" { agent_space_id = var.agent_space_id asset_type = "skill" metadata = jsonencode({ name = "rds-performance-investigation" description = "Investigation procedures for RDS performance issues." agent_types = ["GENERIC"] }) files = [{ path = "SKILL.md" content_text = <<-EOT # RDS Performance Investigation Use this skill when investigating database latency, connection errors, or query timeouts. EOT }] } # A custom agent with attached skills that a trigger can invoke resource "awscc_devopsagent_asset" "example_custom_agent" { agent_space_id = var.agent_space_id asset_type = "custom_agent" metadata = jsonencode({ name = "rds-firefighter" skills = [awscc_devopsagent_asset.example_skill.asset_id] }) files = [{ path = "AGENT.md" content_text = <<-EOT # RDS Firefighter Custom agent for RDS incidents. EOT }] } # A time-based trigger that runs the custom agent on a schedule resource "awscc_devopsagent_trigger" "daily" { agent_space_id = var.agent_space_id type = "TIME_BASED" condition = { schedule = { expression = "rate(1 day)" } } action = jsonencode({ actionType = "create:task" task = { agent = "custom:${awscc_devopsagent_asset.example_custom_agent.asset_id}" } }) status = "Active" } output "skill_asset_id" { description = "The skill asset ID" value = awscc_devopsagent_asset.example_skill.asset_id } output "custom_agent_asset_id" { description = "The custom agent asset ID" value = awscc_devopsagent_asset.example_custom_agent.asset_id } output "trigger_id" { description = "The trigger ID" value = awscc_devopsagent_trigger.daily.trigger_id }
如果您要將此項目新增至範例儲存庫,您可以直接參考客服人員空間資源,而不是宣告agent_space_id變數。
步驟 2:部署
使用第 1 部分輸出中的agent_space_id值terraform.tfvars,在 中設定代理程式空間 ID:
agent_space_id = "<AGENT_SPACE_ID>"
套用組態:
terraform apply
資產的 agent_space_id和 asset_type引數僅限建立,觸發器的 agent_space_id、condition、 type和 action引數也是如此。變更其中任何一個會取代 資源。您可以更新觸發的 status(Active 或 Inactive),將其設定為 Inactive以暫停觸發,而不將其刪除。
步驟 3:驗證部署
若要確認資產和觸發條件已建立,請執行下列 AWS CLI 命令:
aws devops-agent list-assets \ --agent-space-id <AGENT_SPACE_ID> \ --region <REGION> aws devops-agent list-triggers \ --agent-space-id <AGENT_SPACE_ID> \ --region <REGION>
使用現有的 IAM 角色 (選用)
根據預設,Terraform 組態會為代理程式空間和運算子應用程式建立新的 IAM 角色。如果您已有具有必要政策的 IAM 角色,您可以略過角色建立,並改為提供現有的角色 ARNs。
要求
現有角色必須符合下列要求:
客服人員空間角色
信任政策允許 使用
aidevops.amazonaws.com擔任角色sts:AssumeRole已連接
AIDevOpsAgentAccessPolicy受管政策(選用) 具有允許建立 Resource Explorer 服務連結角色的內嵌政策
Operator 應用程式角色
信任政策允許 使用
sts:AssumeRole和aidevops.amazonaws.com擔任角色sts:TagSession已連接
AIDevOpsOperatorAppAccessPolicy受管政策
組態
在 中terraform.tfvars,設定一個或兩個角色 ARNs:
existing_agentspace_role_arn = "arn:aws:iam::ACCOUNT_ID:role/YourAgentSpaceRole" existing_operator_role_arn = "arn:aws:iam::ACCOUNT_ID:role/YourOperatorRole"
設定這些值時,iam.tf會略過 中對應的角色資源。此方法完全回溯相容 — 具有空值 (預設值) 的現有組態會保留目前的角色建立行為。
疑難排解
IAM 傳播延遲
組態包含 IAM 角色建立與客服人員空間建立
time_sleep之間的 30 秒。DevOps Agent 服務會在建立 Agent Space 期間驗證運算子角色的信任政策,如果 IAM 尚未完全傳播,則可能會失敗。如果您仍然看到信任政策錯誤,請等待一分鐘,然後terraform apply再次執行 - IAM 角色將已存在,而套用將在停止的位置取得。
ServiceNow instanceId does not match錯誤
在
service_now整合區塊中instance_id明確設定為簡短執行個體名稱 (例如,"ven04972"),而非完整instance_url。請參閱上述第 3 部分中的備註。
Dynatrace 關聯 status: invalid
如果
terraform apply成功,但產生的關聯報告status = "invalid"(使用aws devops-agent get-association或 主控台可見),這表示 Dynatrace 拒絕 OAuth 用戶端登入資料。針對account_urnDynatraceclient_id帳戶重複檢查client_secret、 和 ,而不是 Terraform 組態問題。
許可錯誤
確認您的 AWS 登入資料具有建立角色和政策所需的 IAM 許可。
檢查信任政策條件是否符合您的帳戶 ID。
跨帳戶部署失敗
必須使用服務帳戶的登入資料來設定
aws.service提供者。使用具名設定檔或擔任角色區塊。確認該
agent_space_arn值符合來自第 1 部分輸出的 ARN。
找不到 Terraform 資源類型
確認您有
awscc提供者版本~> 1.0或更新版本。awscc_devopsagent_agent_space和資源awscc_devopsagent_association需要 AWS 雲端控制供應商。第 4 部分中使用的
awscc_devopsagent_triggerawscc_devopsagent_asset和資源需要awscc提供者版本 1.98.0 或更新版本。執行terraform providers以檢查您的版本,並在提高版本限制terraform init -upgrade之後執行 。
清除
如果您已完成第 4 部分,請先移除技能、自訂代理程式和觸發程序。與將這些資源放在個別堆疊中的 AWS CDK 指南不同, assets.tf是相同 Terraform 組態的一部分,因此純 會terraform destroy移除代理程式空間。刪除assets.tf並套用變更,以僅移除第 4 部分資源:
rm assets.tf terraform apply
若要保留檔案,請改為以三個資源為目標:
terraform destroy \ -target=awscc_devopsagent_trigger.daily \ -target=awscc_devopsagent_asset.example_custom_agent \ -target=awscc_devopsagent_asset.example_skill
僅移除這些資源會使代理程式空間保持不變。如果您將第 4 部分套用到您與他人共用的代理程式空間,或是您在第 1 部分中未建立的代理程式空間,請執行此操作。
若要移除所有其他項目,如果您部署了第 2 部分,請以相反順序銷毀:
./cleanup.sh
或手動:
terraform destroy
警告:這會永久刪除您的客服人員空間和所有相關聯的資料。在繼續之前,請確定您已備份任何重要資訊。
安全考量
Terraform 組態會建立具有信任政策的 IAM 角色,只允許
aidevops.amazonaws.com服務主體擔任這些角色。信任政策包含限制存取特定 AWS 帳戶和客服人員空間 ARN 的條件。
所有政策都遵循最低權限原則。根據組織的安全需求,檢閱和自訂 IAM 政策。
跨帳戶角色 (
DevOpsAgentRole-SecondaryAccount-TF) 使用固定名稱,範圍為特定的客服人員空間 ARN。
後續步驟
使用 Terraform 部署您的 AWS DevOps 代理程式之後:
請參閱 DevOps Agent AWS 使用者指南,了解 DevOps Agent 功能的完整範圍。
考慮將 Terraform 部署整合到您的 CI/CD 管道,以進行自動化基礎設施管理。
其他資源
Terraform 登錄檔中的 awscc_devopsagent_agent_space
資源 Terraform 登錄檔中的 awscc_devopsagent_association
資源 Terraform 登錄檔中的 awscc_devopsagent_private_connection
資源 Terraform 登錄檔中的 awscc_devopsagent_asset
資源 Terraform 登錄檔中的 awscc_devopsagent_trigger
資源