本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
管理资产
AWS DevOps 代理将代理空间的配置和参考资料存储为资产,客户管理的资源决定代理的知识和行为方式。技能、 AGENTS.md 文件和附件都是资产,您可以通过资产 API 以编程方式创建、读取、更新和删除它们。
要配置 AWS DevOps 代理知道的内容及其行为方式,请管理代理空间中的资产。本主题涵盖资产模型、IAM 权限和每种资产类型期望的元数据。使用 AWS CLI、Python AWS 开发工具包 (Boto3) 或端 AWS CloudFormation 到端管理资产。有关技能本身的概念性概述,请参阅DevOps 代理技能。有关非您自己创建的代理生成的知识,请参阅。学到的技能
何时使用资产 API
操作员 Web 应用程序是创作单项技能或以交互方式上传 AGENTS.md 文件的最快方式。Asset API 以编程方式公开了相同的操作,因此脚本和自动化无需通过 Web 应用程序即可管理资产。直接调用资产 API 的常见原因包括:
通过脚本、终端或笔记本而不是 Web 应用程序创作或更新资源。
Bulk-loading 新代理空间中的一组入门技能或 AGENTS.md 文件。
读取资源的内容以对其进行备份或比较版本。
资产 API 中的每项操作都通过 AWS CLI aws devops-agent <operation> 以及作为devops-agent客户端通过 AWS 软件开发工具包公开。
资产 API 操作
资产 API 公开了以下操作。每行都列出了调用该操作必须授予的 IAM 操作以及该操作适用的资源。每个操作都存在于aidevops:命名空间中,除外ListAssetTypes,均适用于表单的 Agent Space 资源arn:aws:aidevops:<region>:<account-id>:agentspace/<agentSpaceId>。有关aidevops:权限的更广泛背景信息,请参阅DevOps 代理 IAM 权限。
| 操作 | 说明 | IAM 操作 | 资源 |
|---|---|---|---|
ListAssetTypes |
列出 AWS DevOps 代理支持的资产类型。 | aidevops:ListAssetTypes |
* |
CreateAsset |
在代理空间(技能、附件、自定义代理 AGENTS.md、内存存储、内存、测试配置文件或反馈)中创建新资产。 | aidevops:CreateAsset |
代理空间 |
GetAsset |
检索资产的元数据和版本信息。 | aidevops:GetAsset |
代理空间 |
UpdateAsset |
更新现有资产的元数据或内容。 | aidevops:UpdateAsset |
代理空间 |
DeleteAsset |
从代理空间中删除资产及其所有文件。 | aidevops:DeleteAsset |
代理空间 |
ListAssets |
列出代理空间中的资产,可选择按资产类型进行筛选。 | aidevops:ListAssets |
代理空间 |
ListAssetVersions |
列出资产的历史版本。 | aidevops:ListAssetVersions |
代理空间 |
GetAssetContent |
以 zip 包的形式下载资产的完整内容。 | aidevops:GetAssetContent |
代理空间 |
CreateAssetFile |
向现有资源添加新文件。 | aidevops:CreateAssetFile |
代理空间 |
GetAssetFile |
通过资源路径从资源中检索单个文件。 | aidevops:GetAssetFile |
代理空间 |
UpdateAssetFile |
替换资源中现有文件的内容或元数据。 | aidevops:UpdateAssetFile |
代理空间 |
DeleteAssetFile |
从资源中移除单个文件。 | aidevops:DeleteAssetFile |
代理空间 |
ListAssetFiles |
列出资产中的文件。 | aidevops:ListAssetFiles |
代理空间 |
示例 IAM policies
以下策略授予对单个代理空间中资产的完全管理访问权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "aidevops:CreateAsset", "aidevops:GetAsset", "aidevops:UpdateAsset", "aidevops:DeleteAsset", "aidevops:ListAssets", "aidevops:ListAssetVersions", "aidevops:GetAssetContent", "aidevops:CreateAssetFile", "aidevops:GetAssetFile", "aidevops:UpdateAssetFile", "aidevops:DeleteAssetFile", "aidevops:ListAssetFiles" ], "Resource": "arn:aws:aidevops:us-east-1:111122223333:agentspace/8f6187a7-0388-4926-8217-3a0fe32f757c" }, { "Effect": "Allow", "Action": "aidevops:ListAssetTypes", "Resource": "*" } ] }
以下策略授予对单个代理空间中资产的只读访问权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "aidevops:GetAsset", "aidevops:ListAssets", "aidevops:ListAssetVersions", "aidevops:GetAssetContent", "aidevops:GetAssetFile", "aidevops:ListAssetFiles" ], "Resource": "arn:aws:aidevops:us-east-1:111122223333:agentspace/8f6187a7-0388-4926-8217-3a0fe32f757c" }, { "Effect": "Allow", "Action": "aidevops:ListAssetTypes", "Resource": "*" } ] }
资产类型
每个资产都有一个用于标识它是什么资源的assetType字符串。您可以通过资产 API 创建八种资产类型:skillagents_md、attachment、custom_agent、memory_store、memory、test_profile、和feedback。以下各节描述了每种类型。您也可以在运行时调用ListAssetTypes以检索类型标识符。
每个资产都带有描述资源的自由格式 metadata JSON 对象。里面的密钥metadata使用 snake_case(例如,,agent_types)。skill_type请求正文顶层外部metadata的密钥使用 camelCase(例如,、agentSpaceIdassetType、clientToken)。必需metadata密钥和可选密钥取决于资产类型,如以下各节所述。
当您调用UpdateAsset或时UpdateAssetFile,该服务将 PATCH 语义应用于metadata:您包含的密钥将被替换,而省略的密钥保留其存储值。创建资产assetType后,您无法对其进行更改。
技能
skill资产打包了相关时代理加载的指令和参考材料。简单技能是单个SKILL.md文件;复杂技能是包含SKILL.md文件和可选references/或assets/目录的压缩包。
必需的metadata属性:
名称(字符串)— 技能的唯一标识符。仅限小写字母、数字和连字符,1—64 个字符。不得以连字符开头或结尾。仅适用于简单技能。对于 zip 上传,该服务
name从SKILL.mdfrontmatter 读取,此处提供的任何值都将被忽略。描述(字符串)— 代理应何时使用该技能的 1—1024 个字符的解释。仅适用于简单技能。对于 zip 上传,该服务
description从SKILL.mdfrontmatter 读取,此处提供的任何值都将被忽略。agent_types(字符串数组)— 此技能适用的一种或多种代理类型。用于
["GENERIC"]向所有代理类型提供该技能。其他值包括CHAT、INCIDENT_TRIAGEINCIDENT_RCA、INCIDENT_MITIGATION、PREVENTION、RELEASE_READINESS_REVIEW、和RELEASE_TESTING。该GENERIC值不能与其他值组合。
可选metadata属性:
skill_type(字符串)— 默认为。
USER资产 API 仅允许客户创建的技能,因此唯一可接受的价值是USER。该服务拒绝设置skill_type为的请求LEARNED,该请求仅供代理本身生成的技能使用。状态(字符串)— 技能的激活状态。可接受的值为
ACTIVE和INACTIVE(仅限大写)。默认值为ACTIVE。非活动技能会保留在代理空间中,但在调查或聊天期间不会被代理加载。UpdateAsset与一起使用metadata.status可在不删除技能的情况下停用或重新激活该技能。技能是唯一支持激活的资产类型;所有其他资产类型都会忽略该status字段。有关有效示例,请参见激活和停用技能。enable_tools(字符串数组)— 代理加载此技能时可以调用的工具标识符列表。
示例metadata:
{ "name": "rds-performance-investigation", "description": "Investigation procedures for RDS performance issues including connection exhaustion, slow queries, replication lag, and storage capacity. Use this skill when investigating database latency, connection errors, or read/write performance degradation.", "agent_types": ["GENERIC"] }
限制:Zip 上传不得超过 6 MB。一个代理空间最多可以包含 200 个用户创建的技能。
agents_md
agents_md资产是包含特定代理类型的常设代理指令的降价文件。代理会在每项任务开始 AGENTS.md 时加载匹配项。有关代理说明的更多信息,请参阅代理说明。
必需的metadata属性:
代理类型(字符串)— AGENTS.md 文件适用的代理类型。有效值为
GENERIC、CHAT、INCIDENT_TRIAGEINCIDENT_RCA、INCIDENT_MITIGATION、PREVENTION、RELEASE_READINESS_REVIEW、和RELEASE_TESTING。
示例metadata:
{ "agent_type": "INCIDENT_TRIAGE" }
限制:每个代理空间最多可以包含一个 AGENTS.md agent_type。文件内容必须为 markdown (text/markdown) 且不得超过 25 KB。
连接
attachment资产存储二进制或文本文件,代理可以在调查期间参考这些文件,例如架构图、运行手册 PDF 或示例日志文件。
必需的metadata属性:
文件名(字符串)— 原始文件名,包括基本名称和任何扩展名(例如,
topology.png)。扩展名(字符串)— 不带前导点的文件扩展名(例如
png,、pdf、csv)。大小(数字)— 文件的大小(以字节为单位)。
示例metadata:
{ "filename": "topology.png", "extension": "png", "size": 184320 }
限制:代理空间中所有附件的总大小不能超过 10 GB。
custom_agent
custom_agent资产使用一组精选的工具和技能定义了专门的代理配置。使用自定义代理将代理限定为特定的工作流程或一组功能。
必需的metadata属性:
名称(字符串)— 自定义代理的唯一标识符。仅限小写字母、数字和连字符,1—64 个字符。不得以连字符开头或结尾。
可选metadata属性:
工具(字符串数组)-允许自定义代理使用的工具标识符。省略时默认为空列表。
技能(字符串数组)-自定义代理加载的技能标识符。省略时默认为空列表。
示例metadata:
{ "name": "rds-firefighter", "tools": ["cloudwatch:GetMetricData", "rds:DescribeDBInstances"], "skills": ["rds-performance-investigation"] }
memory_store
memory_store资产是对相关内存文件进行分组的容器。代理商读取商店的名称和描述,以决定是否将其打开并列出里面的存储空间。内存和内存存储支持代理内存。有关内存的更多信息,请参阅DevOps 特工回忆。
分两步创建回忆。首先,创建 memory_store。然后,按照内存中的说明在其中创建每个memory。
必需的metadata属性:
名称(字符串)— 内存存储的唯一标识符。仅限小写字母、数字和连字符,1—128 个字符。不得以连字符开头或结尾。
描述(字符串)— 对商店持有内容的 1—1024 个字符的描述。代理商用它来决定是否开店。
可选metadata属性:
agent_types(字符串数组)— 可以查看商店的牵头代理类型。用于
["GENERIC"]使商店对所有代理类型可见。
示例metadata:
{ "name": "incident-runbooks", "description": "Operational memories about past incidents and their resolutions.", "agent_types": ["GENERIC"] }
memory
memory资产是属于内存存储的单个内存文件。代理读取内存的名称和描述,以决定是否读取完整文件。memory_store首先创建父级,然后在内存memory_store_id上设置商店的资产 ID。
必需的metadata属性:
名称(字符串)— 内存标识符,以小写 kebab 大小写段的
/分隔路径编写,1—255 个字符(例如,)。databases/rds-failover描述(字符串)— 内存所含内容的 1—1024 个字符的描述。
memory_store_id(字符串)— 该内存所属内存存储的资产 ID。
可选metadata属性:
expires_at(数字)— 保留期限,以纪元秒为单位。设置后,该服务将在截止时间过后(通常在 48 小时内)自动删除内存。省略此属性以保留内存,直到将其删除。
示例metadata:
{ "name": "databases/rds-failover", "description": "Steps that resolved the RDS failover incident in June.", "memory_store_id": "a1b2c3d4-5678-90ab-cdef-example11111" }
测试档案
test_profile资产存储用于运行发布测试的可重复使用的配置,包括要执行的测试类型和目标端点。
必需的metadata属性:
test_agent_type(字符串)— 此配置文件执行的测试类型。有效值为
releaseUiTesting和releaseApiTesting。target_url(字符串)— 测试运行的目标网址。
可选metadata属性:
名称(字符串)— 测试配置文件的人类可读标识符。仅限小写字母、数字和连字符,1—128 个字符。不得以连字符开头或结尾。
描述(字符串)— 测试配置文件所涵盖内容的 1—1024 个字符的描述。
test_personas(字符串数组)— 测试运行期间要锻炼的角色。有效值为
guest和authenticated。api_spec(字符串)— 测试运行的 API 规范。与... 相关
releaseApiTesting。credentials_secret_arn(字符串)— 持有测试运行证书的 Secretials_secret_arn 密钥的 ARN。 AWS
示例metadata:
{ "name": "checkout-api-tests", "description": "Release API tests for the checkout service.", "test_agent_type": "releaseApiTesting", "target_url": "https://api.example.com", "test_personas": ["guest", "authenticated"], "api_spec": "openapi: 3.0.0", "credentials_secret_arn": "arn:aws:secretsmanager:us-east-1:111122223333:secret:checkout-creds" }
反馈
feedback资产记录了客户就单一代理执行提供的反馈。使用反馈资产捕获下游评估管道可以汇总的判断和注释。
必需的metadata属性:
agent_types(字符串数组)— 生成执行的代理类型。必须包含至少一个值(例如,
INCIDENT_TRIAGE)。
可选metadata属性:
execution_id(字符串)— 与该反馈相关的执行情况。将其设置为开启
CreateAsset;它不能由更改UpdateAsset。
示例metadata:
{ "execution_id": "b2c3d4e5-6789-01ab-cdef-example22222", "agent_types": ["INCIDENT_TRIAGE"] }
资产内容:文件或 zip
每个CreateAsset请求都包含一个保存资产存储字节的content对象。的形状content取决于您上传的是单个文件还是 zip 包:
单个文本文件 — 最多可
content.file.body.text携带 1.5 MB 的 UTF-8 文本。使用它来制作简单的技能和 AGENTS.md 文件。
json { "content": { "file": { "path": "SKILL.md", "body": { "text": "# Skill\n\nInstructions go here." } } } }
单个二进制文件 — 最多可
content.file.body.bytes携带 6 MB 的 base64 编码二进制内容。将其用于图像或 PDF 等附件。由于 blob 嵌套在content联合体中,因此请提前对文件进行 base64 编码,然后使用提交请求--cli-input-json(有关有效示例,请参阅从二进制文件#create-a-skill-from-a-binary-file创建技能)。
json { "content": { "file": { "path": "topology.png", "body": { "bytes": "<base64-encoded bytes>" } } } }
Zip 包 —
content.zip.zipFile包含最大 6 MB 的 base64 编码的 zip 存档。将此用于在references/或assets/目录中包含SKILL.md加上其他文件的技能。
json { "content": { "zip": { "zipFile": "<base64-encoded zip bytes>" } } }
要在不重新上传整个包的情况下添加、替换或删除现有资源中的单个文件,请使用CreateAssetFileUpdateAssetFile、和DeleteAssetFile。
端到端管理技能
接下来的演练通过三种不同的方式(从单个文本文件、二进制文件和压缩包)创建技能,然后练习读取、更新和删除操作。8f6187a7-0388-4926-8217-3a0fe32f757c替换为您的代理空间 ID。
从单个文本文件创建技能
这是最简单的路径:内联上传的单个SKILL.md文件。由于上传内容仅包含一个文本文件,因此您必须提供name并输description入metadata。
AWS CLI:
aws devops-agent create-asset \ --agent-space-id 8f6187a7-0388-4926-8217-3a0fe32f757c \ --asset-type skill \ --metadata '{ "name": "rds-performance-investigation", "description": "Investigation procedures for RDS performance issues. Use when investigating database latency, connection errors, or query timeouts.", "agent_types": ["GENERIC"] }' \ --content '{ "file": { "path": "SKILL.md", "body": { "text": "# RDS Performance Investigation\n\nUse this skill when customers report database latency, connection errors, query timeouts, or read/write performance degradation." } } }'
Python(Boto3):
import boto3 client = boto3.client("devops-agent") response = client.create_asset( agentSpaceId="8f6187a7-0388-4926-8217-3a0fe32f757c", assetType="skill", metadata={ "name": "rds-performance-investigation", "description": ( "Investigation procedures for RDS performance issues. " "Use when investigating database latency, connection errors, " "or query timeouts." ), "agent_types": ["GENERIC"], }, content={ "file": { "path": "SKILL.md", "body": { "text": ( "# RDS Performance Investigation\n\n" "Use this skill when customers report database latency, " "connection errors, query timeouts, or read/write " "performance degradation." ) }, } }, ) asset_id = response["asset"]["assetId"]
使用二进制文件创建技能
当技能内容不是 UTF-8 文本时,使用二进制上传。以下示例将预先渲染的 PDF 作为技能正文上传。由于请求正文包含嵌套在content联合体内的 base64 编码的 bob,因此请提前提供来自 JSON 文件的请求,--cli-input-json并提前对 blob 进行 base64 编码。
下面的-w 0标志告诉 GNU base64 在一行中发出编码的 blob;如果没有它,默认的 76 个字符的换行会插入换行符,当将 blob 插入 heredoc 时,这些换行符会生成无效的 JSON。在 macOS 上,使用base64 -i ops-runbook.pdf(默认情况下 BSD base64 不打包)。
生成请求正文:
base64 -w 0 ops-runbook.pdf > ops-runbook.b64 cat > create-skill.json <<EOF { "agentSpaceId": "8f6187a7-0388-4926-8217-3a0fe32f757c", "assetType": "skill", "metadata": { "name": "ops-runbook", "description": "Operations runbook covering on-call escalation paths.", "agent_types": ["GENERIC"] }, "content": { "file": { "path": "SKILL.pdf", "body": { "bytes": "$(cat ops-runbook.b64)" } } } } EOF
AWS CLI:
aws devops-agent create-asset --cli-input-json file://create-skill.json
Python(Boto3):
with open("ops-runbook.pdf", "rb") as f: body_bytes = f.read() response = client.create_asset( agentSpaceId="8f6187a7-0388-4926-8217-3a0fe32f757c", assetType="skill", metadata={ "name": "ops-runbook", "description": "Operations runbook covering on-call escalation paths.", "agent_types": ["GENERIC"], }, content={ "file": { "path": "SKILL.pdf", "body": {"bytes": body_bytes}, } }, )
使用 zip 包创建技能
当技能包含多个文件(例如SKILL.md加号参考资料和资产)时,使用 zip 上传。对于 zip 上传,该服务会description从SKILL.md前端读取name和读取,因此请勿将其包含在内。metadata
zip 布局如下所示:
rds-performance-investigation.zip ├── SKILL.md ├── references/ │ └── rds-metrics-reference.md └── assets/ └── rds-investigation-flowchart.png
SKILL.md必须包含 frontmatter,这样服务才能提取名称和描述:
--- name: rds-performance-investigation description: Investigation procedures for RDS performance issues including connection exhaustion, slow queries, replication lag, and storage capacity. Use this skill when investigating database latency, connection errors, or read/write performance degradation. --- # RDS Performance Investigation ...
生成请求正文:
base64 -w 0 rds-performance-investigation.zip > skill.zip.b64 cat > create-skill.json <<EOF { "agentSpaceId": "8f6187a7-0388-4926-8217-3a0fe32f757c", "assetType": "skill", "metadata": { "agent_types": ["GENERIC"] }, "content": { "zip": { "zipFile": "$(cat skill.zip.b64)" } } } EOF
AWS CLI:
aws devops-agent create-asset --cli-input-json file://create-skill.json
Python(Boto3):
with open("rds-performance-investigation.zip", "rb") as f: zip_bytes = f.read() response = client.create_asset( agentSpaceId="8f6187a7-0388-4926-8217-3a0fe32f757c", assetType="skill", metadata={"agent_types": ["GENERIC"]}, content={"zip": {"zipFile": zip_bytes}}, )
从存储库导入技能
您可以通过直接从 GitHub 存储库目录导入技能来创建技能。 AWS DevOps 代理获取技能内容,从 SKILL.md 头部提取名称和描述,然后在您的代理空间中创建技能。这使您可以管理版本控制方面的技能,并以编程方式导入或同步它们。
先决条件:
您的代理空间必须关联一个 GitHub 帐户。请参阅正在连接 GitHub。
存储库目录必须包含 frontmatter 的有效 SKILL.md 文件。
AWS CLI:
aws devops-agent create-asset \ --agent-space-id 8f6187a7-0388-4926-8217-3a0fe32f757c \ --asset-type skill \ --metadata '{ "agent_types": ["GENERIC"] }' \ --content '{"sourceUrl": {"url": "https://github.com/my-org/my-repo/tree/main/skills/rds-investigation"}}'
Python(Boto3):
response = client.create_asset( agentSpaceId="8f6187a7-0388-4926-8217-3a0fe32f757c", assetType="skill", metadata={"agent_types": ["GENERIC"]}, content={ "sourceUrl": { "url": "https://github.com/my-org/my-repo/tree/main/skills/rds-investigation" } }, ) asset_id = response["asset"]["assetId"]
该服务获取目录内容,读取和 SKILL.md 的前端内容description,name然后导入所有文件。请勿包含name或包含description在内,metadata它们是自动从前端内容中提取的。
同步导入的技能:
要从存储库中提取最新更改,请调UpdateAsset用content.sourceUrl:
aws devops-agent update-asset \ --agent-space-id 8f6187a7-0388-4926-8217-3a0fe32f757c \ --asset-id <assetId> \ --content '{"sourceUrl": {"url": "https://github.com/my-org/my-repo/tree/main/skills/rds-investigation"}}'
response = client.update_asset( agentSpaceId="8f6187a7-0388-4926-8217-3a0fe32f757c", assetId="<assetId>", content={ "sourceUrl": { "url": "https://github.com/my-org/my-repo/tree/main/skills/rds-investigation" } }, )
同步将技能内容完全替换为存储库目录的当前状态。保留可编辑字段(状态、代理类型)。
查看导入源:
GetAsset返回存储库导入技能metadata.source的源信息:
{ "metadata": { "name": "rds-performance-investigation", "description": "Investigation procedures for RDS performance issues...", "source": { "url": "https://github.com/my-org/my-repo/tree/main/skills/rds-investigation", "lastSyncedAt": 1718467200 }, "agent_types": ["GENERIC"], "skill_type": "USER", "status": "ACTIVE" } }
约束:
只接受 GitHub URL。您可以指向包含 SKILL.md (例如
https://github.com/org/repo/tree/main/skills/my-skill)的目录,该目录导入包括参考文件在内的整个目录。如果 SKILL.md 位于存储库的根目录,则您也可以直接链接到该文件(例如https://github.com/org/repo/blob/main/SKILL.md),该文件仅导入 SKILL.md。该目录必须包含 SKILL.md 带有有效前言的。
目录总大小不得超过 6 MB,最多 100 个文件。
content.sourceUrl与content.file和互不相容content.zip— 您不能将它们合并到同一个请求中。仅限元数据的更新(没有
content)会保留现有的导入源,不会从存储库中重新获取。
获取、列出、更新和删除
GetAsset用于按 ID 检索单个资产:
aws devops-agent get-asset \ --agent-space-id 8f6187a7-0388-4926-8217-3a0fe32f757c \ --asset-id <assetId>
ListAssets用于浏览代理空间中的所有资产:
aws devops-agent list-assets \ --agent-space-id 8f6187a7-0388-4926-8217-3a0fe32f757c \ --max-results 50 aws devops-agent list-assets \ --agent-space-id 8f6187a7-0388-4926-8217-3a0fe32f757c \ --max-results 50 \ --next-token <token>
用于UpdateAsset更改一个或多个metadata字段,无需重新上传内容。您省略的密钥会保留其现有值:
aws devops-agent update-asset \ --agent-space-id 8f6187a7-0388-4926-8217-3a0fe32f757c \ --asset-id <assetId> \ --metadata '{ "agent_types": ["INCIDENT_TRIAGE", "INCIDENT_RCA"] }'
ListAssetVersions用于检查资产的版本历史记录。每次成功UpdateAsset或UpdateAssetFile调用都会提前 asset 的版本号:
aws devops-agent list-asset-versions \ --agent-space-id 8f6187a7-0388-4926-8217-3a0fe32f757c \ --asset-id <assetId>
用于DeleteAsset移除资源及其所有文件:
aws devops-agent delete-asset \ --agent-space-id 8f6187a7-0388-4926-8217-3a0fe32f757c \ --asset-id <assetId>
向现有技能添加单个文件
如果您已经从 zip 包中创建了技能并想添加一个新的参考文件,则无需重新上传整个套装。使用 CreateAssetFile:
aws devops-agent create-asset-file \ --agent-space-id 8f6187a7-0388-4926-8217-3a0fe32f757c \ --asset-id <assetId> \ --path references/troubleshooting.md \ --content '{ "text": "# Troubleshooting\n\nAdditional notes." }'
要就地替换文件,请update-asset-file使用相同的参数。要将其删除,请使用delete-asset-file。
激活和停用技能
技能处于激活状态metadata.status。默认情况下,新技能ACTIVE由代理在调查和聊天期间加载。您可以停用某项技能以使其退出轮换,而不必将其删除,例如,在调查该技能产生意外结果的原因时,稍后再重新激活该技能。
通过在CreateAsset请求中添加以下内容来设置创建metadata.status时的初始状态:
aws devops-agent create-asset \ --agent-space-id 8f6187a7-0388-4926-8217-3a0fe32f757c \ --asset-type skill \ --metadata '{ "name": "rds-performance-investigation", "description": "Investigation procedures for RDS performance issues.", "agent_types": ["GENERIC"], "status": "INACTIVE" }' \ --content '{ "file": { "path": "SKILL.md", "body": { "text": "# RDS Performance Investigation" } } }'
使用停用现有技能。UpdateAsset因为metadata是作为部分更新进行的,所以发送只会status使所有其他字段保持不变:
aws devops-agent update-asset \ --agent-space-id 8f6187a7-0388-4926-8217-3a0fe32f757c \ --asset-id <assetId> \ --metadata '{ "status": "INACTIVE" }'
用同样的方法重新激活,方法是:"status": "ACTIVE"
aws devops-agent update-asset \ --agent-space-id 8f6187a7-0388-4926-8217-3a0fe32f757c \ --asset-id <assetId> \ --metadata '{ "status": "ACTIVE" }'
GetAsset并且ListAssets一定要包括当前statusmetadata的技能资产,这样你就可以随时读取实时激活状态。
该status字段区分大小写。仅接受ACTIVE和INACTIVE(大写)。任何其他值都无法使用ValidationException。激活仅适用于技能;任何其他资产类型的设置metadata.status均无效,该字段将从响应中删除。
使用以下方式管理资产 AWS CloudFormation
使用资产 API 进行交互式或脚本驱动的更改。要以声明方式管理资产,请在中将其建模为AWS::DevOpsAgent::Asset资源。 AWS CloudFormation使用这种方法,您可以将资产与其他基础架构一起进行版本控制,通过管道进行部署,并在代理空间中重现它们。 CloudFormation 将每个资产创建为父 Agent Space 的子资源,因此您在模板中定义的资产映射到CreateAsset调用生成的完全相同的资源。
您可以通过相同的AWS::DevOpsAgent::Asset资源管理每种资产类型。支持的类型是skill、agents_md、attachment、custom_agent、memory_storememory、test_profile、和feedback。只有AssetTypeMetadata、和内容因类型而异。以下示例使用资产类型中描述的元数据创建了一项技能和一个自定义代理;其他类型遵循相同的形状。
这些区域有: AWS::DevOpsAgent: 资产资源
资源属性直接映射到本主题前面描述的CreateAsset请求字段:
| CloudFormation 财产 | Type | 映射到 | 注意 |
|---|---|---|---|
AgentSpaceId |
字符串 | agentSpaceId |
必填项。 Create-only—更改它会取代资产。 |
AssetType |
字符串 | assetType |
必填项。 Create-only。资产类型标识符,例如或。skill custom_agent资产类型中的任何类型都有效。 |
Metadata |
JSON | metadata |
与 API 相同的元数据文档(对于技能:name、descriptionagent_types、和可选status)。已更新到位。 |
Files |
列表 | content.file |
行内文件,每个文件都带有 Path “ContentText或”ContentBytes,外加每个文件Metadata可选。与 Zip 互相排斥。 |
Zip |
字符串 | content.zip.zipFile |
Base64-encoded 压缩包。与 Files 互相排斥。 |
AssetId |
字符串 | asset.assetId |
Read-only。使用检索Fn::GetAtt。 |
Arn |
字符串 | asset.arn |
Read-only。资产 ARN,嵌套在父代理空间下。 |
Version |
整数 | asset.version |
Read-only。每次成功更新都会遇到麻烦。 |
CreatedAt / UpdatedAt |
字符串 | asset.createdAt / updatedAt |
Read-only 时间戳。 |
在编写模板之前,有两种行为值得一提:
AgentSpaceId并且仅AssetType限创建。更改任何一个都会取代资产。 CloudFormation 使用新的和创建新资产Arn,AssetId然后删除旧资产。内容和元数据更改会更新现有资源。CloudFormation 将资产作为一个整体进行管理,包括其元数据和完整的文件集。要更改技能,请编辑模板并更新堆栈。对部分资产起作用的业务不是资源的一部分,而是保留下来的 API-only。这包括每个文件的编辑 (
CreateAssetFile、UpdateAssetFile、DeleteAssetFile) 和版本历史记录 (ListAssetVersions)。它还包括内容下载 (GetAssetContent) 以及存储库导入和同步(sourceUrl内容类型)。对于这些用户,请使用本主题前面所示的 AWS CLI 或 SDK。
创建技能
以下模板创建了 AWS CLI 演练中使用的单文件rds-performance-investigation技能。它以父代理空间 ID 作为参数,并导出新资产的 ID 和 ARN。
AWSTemplateFormatVersion: '2010-09-09' Description: A DevOps Agent skill managed as an AWS::DevOpsAgent::Asset resource. Parameters: AgentSpaceId: Type: String Description: The ID of the Agent Space that owns the skill. Resources: RdsPerformanceSkill: Type: AWS::DevOpsAgent::Asset Properties: AgentSpaceId: !Ref AgentSpaceId AssetType: skill Metadata: name: rds-performance-investigation description: Investigation procedures for RDS performance issues. agent_types: - GENERIC Files: - Path: SKILL.md ContentText: | # RDS Performance Investigation Use this skill when customers report database latency, connection errors, query timeouts, or read/write performance degradation. Outputs: SkillAssetId: Value: !GetAtt RdsPerformanceSkill.AssetId SkillArn: Value: !GetAtt RdsPerformanceSkill.Arn
使用 AWS CLI 进行部署,传递您的代理空间 ID:
aws cloudformation deploy \ --template-file skill.yaml \ --stack-name DevOpsAgentSkillStack \ --parameter-overrides AgentSpaceId=8f6187a7-0388-4926-8217-3a0fe32f757c \ --region <REGION>
传送多个文件的技能(例如SKILL.md加上参考文档)会将更多条目添加到:Files
Files: - Path: SKILL.md ContentText: | # RDS Performance Investigation Investigation entry point. - Path: references/rds-metrics-reference.md ContentText: | # RDS metrics reference Key CloudWatch metrics to check.
要创建已停用的技能或稍后将其停用,请设置 statusMetadata(参见激活和停用技能)并更新堆栈:
Metadata: name: rds-performance-investigation description: Investigation procedures for RDS performance issues. agent_types: - GENERIC status: INACTIVE
创建自定义代理
自定义代理是具有不同的AssetTypeMetadata、和内容的相同资源。以下资源创建了一项custom_agent资源,用于管理一组工具和技能。该skills列表通过其name元数据引用技能,因此您可以引用之前创建的技能。
RdsFirefighter: Type: AWS::DevOpsAgent::Asset Properties: AgentSpaceId: !Ref AgentSpaceId AssetType: custom_agent Metadata: name: rds-firefighter tools: - cloudwatch:GetMetricData - rds:DescribeDBInstances skills: - rds-performance-investigation Files: - Path: AGENT.md ContentText: | # RDS Firefighter Custom agent for RDS incidents.
其他资产类型的工作方式相同——设置AssetType和提供键入所需的Metadata密钥(请参阅资产类型)。例如,agents_md资产集AssetType: agents_md合了Metadata包含agent_type: INCIDENT_TRIAGE和AGENTS.md文件。
使用触发器调度自定义代理
要自动运行自定义代理,请添加AWS::DevOpsAgent::Trigger资源。触发器是代理空间的子节点。它的操作引用自定义代理以表单形式按资产 ID 运行custom:<assetId>。用于Fn::GetAtt传递自定义代理,AssetId以便将两个资源 CloudFormation 连接在一起并下令创建它们。
以下触发器每天运行一次rds-firefighter自定义代理:
DailyRdsCheck: Type: AWS::DevOpsAgent::Trigger Properties: AgentSpaceId: !Ref AgentSpaceId Type: TIME_BASED Condition: Schedule: Expression: rate(1 day) Action: actionType: create:task task: agent: !Sub - custom:${AssetId} - AssetId: !GetAtt RdsFirefighter.AssetId Status: Active
AgentSpaceId、TypeCondition、和Action属性仅供创建。更改其中任何一个都会取代触发器。该Status属性接受Active或Inactive可以就地更新。将其设置为可在Inactive不删除触发器的情况下暂停触发器。有关计划表达式语法的更多信息,请参阅执行自定义代理。
AWS::DevOpsAgent::AssetAWS::DevOpsAgent::Trigger并且在提供 AWS DevOps 代理的 AWS 地区可用。有关支持的 AWS 区域的更多信息,请参阅支持的区域:。要将父代理空间、IAM 角色和运营商应用程序作为基础设施即代码部署,请参阅开始使用 AWS DevOps 代理使用 AWS CloudFormation。
其他资产类型的示例
上述技能演练适用于所有其他资产类型。唯一的区别是metadata区别,对于附件,二进制内容的选择。以下最少的CreateAsset调用说明了每种类型。
内存存储和存储器使用相同的CreateAsset操作。首先创建存储,然后创建内存。有关其元数据的更多信息,请参阅 m emory_store 和内存。#memory
创建一个 AGENTS.md:
aws devops-agent create-asset \ --agent-space-id 8f6187a7-0388-4926-8217-3a0fe32f757c \ --asset-type agents_md \ --metadata '{ "agent_type": "INCIDENT_TRIAGE" }' \ --content '{ "file": { "path": "AGENTS.md", "body": { "text": "# Triage Instructions\n\nFollow these steps for new incidents." } } }'
创建附件(二进制内容;从 JSON 文件生成请求,如从二进制文件创建技能中所示):
base64 -w 0 topology.png > topology.png.b64 cat > create-attachment.json <<EOF { "agentSpaceId": "8f6187a7-0388-4926-8217-3a0fe32f757c", "assetType": "attachment", "metadata": { "filename": "topology.png", "extension": "png", "size": 184320 }, "content": { "file": { "path": "topology.png", "body": { "bytes": "$(cat topology.png.b64)" } } } } EOF aws devops-agent create-asset --cli-input-json file://create-attachment.json
创建自定义代理:
aws devops-agent create-asset \ --agent-space-id 8f6187a7-0388-4926-8217-3a0fe32f757c \ --asset-type custom_agent \ --metadata '{ "name": "rds-firefighter", "tools": ["cloudwatch:GetMetricData", "rds:DescribeDBInstances"], "skills": ["rds-performance-investigation"] }' \ --content '{ "file": { "path": "AGENT.md", "body": { "text": "# RDS Firefighter\n\nCustom agent for RDS incidents." } } }'
创建测试配置文件:
aws devops-agent create-asset \ --agent-space-id 8f6187a7-0388-4926-8217-3a0fe32f757c \ --asset-type test_profile \ --metadata '{ "name": "checkout-api-tests", "test_agent_type": "releaseApiTesting", "target_url": "https://api.example.com", "test_personas": ["guest", "authenticated"] }' \ --content '{ "file": { "path": "PROFILE.md", "body": { "text": "# Checkout API test profile" } } }'
创建反馈资产:
aws devops-agent create-asset \ --agent-space-id 8f6187a7-0388-4926-8217-3a0fe32f757c \ --asset-type feedback \ --metadata '{ "execution_id": "b2c3d4e5-6789-01ab-cdef-example22222", "agent_types": ["INCIDENT_TRIAGE"] }' \ --content '{ "file": { "path": "FEEDBACK.md", "body": { "text": "{\"verdict\":\"correct\"}" } } }'
列出支持的资产类型:
aws devops-agent list-asset-types