本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
监控 CodeArtifact 事件
CodeArtifact 可与 Amazon EventBridge 集成,后者是一项可自动执行和响应事件(包括 CodeArtifact 存储库中的更改)的服务。您可以为事件创建规则并配置在事件匹配规则时会发生什么情况。EventBridge 以前称为 CloudWatch Events。
事件会触发以下操作:
-
调用 AWS Lambda 函数。
-
激活 AWS Step Functions 状态机。
-
通知 Amazon SNS 主题或 Amazon SQS 队列。
-
在 AWS CodePipeline 中启动管道。
当创建、修改或删除程序包版本时,CodeArtifact 会创建事件。以下是 CodeArtifact 事件的示例。
-
发布新的程序包版本(例如,通过运行
npm publish)。 -
向现有程序包版本添加新资产(例如,通过将新的 JAR 文件推送到现有 Maven 程序包)。
-
使用
copy-package-versions将程序包版本从一个存储库复制到另一个存储库。有关更多信息,请参阅 在存储库之间复制程序包。 -
使用
delete-package-versions删除程序包版本。有关更多信息,请参阅 删除程序包或程序包版本。 -
使用
delete-package删除程序包版本。为已删除程序包的每个版本发布一个事件。有关更多信息,请参阅 删除程序包或程序包版本。 -
如果程序包版本是从上游存储库获取,则在下游存储库中保留该版本。有关更多信息,请参阅 在中使用上游存储库 CodeArtifact。
-
将程序包版本从外部存储库摄取到 CodeArtifact 存储库。有关更多信息,请参阅 将 CodeArtifact 存储库连接到公有存储库。
事件会同时发送给拥有该域的账户和管理存储库的账户。例如,假设账户 111111111111 拥有域 my_domain。账户 222222222222 在 my_domain 中创建名为 repo2 的存储库。当新的程序包版本发布到 repo2 时,两个账户都会收到 EventBridge 事件。拥有域的账户 (111111111111) 会收到域中所有存储库的事件。如果一个账户同时拥有域及其中的存储库,则只会传送一个事件。
以下主题说明 CodeArtifact 事件格式。这些主题介绍了如何配置 CodeArtifact 事件,以及如何将事件与其他 AWS 服务一起使用。有关更多信息,请参阅 Amazon EventBridge 用户指南中的 Amazon EventBridge 入门。
CodeArtifact 事件格式和示例
以下是事件字段和描述以及 CodeArtifact 事件的示例。
CodeArtifact 事件格式
所有 CodeArtifact 事件都包括下列字段。
| 事件字段 | 描述 |
|---|---|
| version | 事件格式的版本。目前只有一个版本 0。 |
| id | 事件的唯一标识符。 |
| detail-type | 事件类型。这决定了 detail 对象中的字段。目前支持的一个 detail-type 是 CodeArtifact Package Version State Change。 |
| 源 | 事件的源。对于 CodeArtifact 来说,源是 aws.codeartifact。 |
| account | 接收事件的账户的 AWS 账户 ID。 |
| 时间 | 触发事件的确切时间。 |
| region | 触发了事件的区域。 |
| resources | 一个列表,其中包含了已更改程序包的 ARN。该列表包含一个条目。有关程序包 ARN 格式的信息,请参阅授予对程序包的写入权限。 |
| domainName | 包含程序包的存储库所在的域。 |
| domainOwner | 域所有者的 AWS 账户 ID。 |
| repositoryName | 包含程序包的存储库。 |
| repositoryAdministrator | 存储库管理员的 AWS 账户 ID。 |
| packageFormat | 触发了事件的程序包的格式。 |
| packageNamespace | 触发了事件的程序包的命名空间。 |
| packageName | 触发了事件的程序包的名称。 |
| packageVersion | 触发了事件的程序包的版本。 |
| packageVersionState | 触发事件时程序包版本的状态。可能的值为 Unfinished、Published、Unlisted、Archived 和 Disposed。 |
| packageVersionRevision | 一个值,用于唯一地标识在触发事件时程序包版本的资产和元数据的状态。如果修改了程序包版本(例如,向 Maven 程序包添加另一个 JAR 文件),则 packageVersionRevision 会发生变化。 |
| changes.assetsAdded | 添加到触发了事件的程序包中的资产数量。资产的示例包括 Maven JAR 文件或 Python Wheel。 |
| changes.assetsRemoved | 从触发了事件的程序包中删除的资产数量。 |
| changes.assetsUpdated | 触发了事件的程序包中已修改的资产数量。 |
| changes.metadataUpdated | 一个布尔值,如果事件包括已修改的程序包级元数据,则设置为 true。例如,一个事件可能会修改 Maven pom.xml 文件。 |
| changes.statusChanged | 一个布尔值,如果修改了事件的 packageVersionStatus(例如,如果 packageVersionStatus 从 Unfinished 更改为 Published),则设置为 true。 |
| operationType | 描述程序包版本更改的概要类型。可能的值为 Created、Updated 和 Deleted。 |
| sequenceNumber | 一个整数,指定了程序包的事件编号。程序包中的每个事件都会使 sequenceNumber 递增,因此可以按顺序排列事件。事件可以使 sequenceNumber 按任意整数递增。注意 EventBridge 事件可能以乱序接收。 |
| eventDeduplicationId | 一个 ID,用于区分重复 EventBridge 事件。在极少数情况下,EventBridge 可能会对单个事件或在预定的时间多次触发同一个规则。或者,EventBridge 可能会为给定的触发规则多次调用同一个目标。 |
CodeArtifact 事件示例
下面是发布 npm 程序包时可能会触发 CodeArtifact 事件的一个示例。
{ "version":"0", "id":"73f03fec-a137-971e-6ac6-07c8ffffffff", "detail-type":"CodeArtifact Package Version State Change", "source":"aws.codeartifact", "account":"123456789012", "time":"2019-11-21T23:19:54Z", "region":"us-west-2", "resources":["arn:aws:codeartifact:us-west-2:111122223333:package/my_domain/myrepo/npm//mypackage"], "detail":{ "domainName":"my_domain", "domainOwner":"111122223333", "repositoryName":"myrepo", "repositoryAdministrator":"123456789012", "packageFormat":"npm", "packageNamespace":null, "packageName":"mypackage", "packageVersion":"1.0.0", "packageVersionState":"Published", "packageVersionRevision":"0E5DE26A4CD79FDF3EBC4924FFFFFFFF", "changes":{ "assetsAdded":1, "assetsRemoved":0, "metadataUpdated":true, "assetsUpdated":0, "statusChanged":true }, "operationType":"Created", "sequenceNumber":1, "eventDeduplicationId":"2mEO0A2Ke07rWUTBXk3CAiQhdTXF4N94LNaT/ffffff=" } }