我在一个 AWS 账户中创建了一个 AWS Systems Manager Distributor 程序包,该程序包将在 Windows、Ubuntu、Amazon Linux 或 Redhat 上安装应用程序。清单和相关程序包存储在同一个账户拥有的 S3 存储桶中。我修改了存储桶的权限以允许从我的其他 AWS 账户进行读取访问。
我使用分销商包登录到具有 EC2 实例的辅助 AWS 帐户,我想在该帐户上安装应用程序。我通过将分销商包指向另一个帐户中的 S3 存储桶来创建了一个新的分销商包。在我测试期间,包已创建,并且软件已成功安装在上述所有 4 种实例类型上。
现在,问题来了。我重新登录到具有原始分发器包的 AWS 账户,并将其与具有 EC2 实例的其他 AWS 账户共享。我重新登录到具有 EC2 实例的其他 AWS 账户,找到共享的分发器包,然后再次在某些实例上运行它。这一次,它适用于除 Amazon Linux 系统之外的所有实例类型。现在,我得到了
无法找到平台:未找到平台清单:amazon,版本 2,架构 x86_64。
但是,上面我已经使用了完全相同的清单/包进行安装。唯一的区别是它现在是从另一个帐户共享的,而不是直接在帐户中创建。
为什么当我将分销商包直接添加到另一个 AWS 账户时,它可以工作,但当我在多个账户之间共享它时,它却仅在 Amazon Linux 实例上无法工作?
这是我的清单:
{
"schemaVersion": "2.0",
"version": "Auto-Generated-1639173022560",
"packages": {
"windows": {
"_any": {
"_any": {
"file": "redcloak-2.8.4.0.msi.zip"
}
}
},
"ubuntu": {
"_any": {
"_any": {
"file": "redcloak-1.2.15.0.deb.zip"
}
}
},
"redhat": {
"_any": {
"_any": {
"file": "redcloak-1.2.15.0-0.x86_64.rpm.zip"
}
}
},
"amazon": {
"_any": {
"_any": {
"file": "redcloak-1.2.15.0-0.x86_64.rpm.zip"
}
}
}
},
"files": {
"redcloak-2.8.4.0.msi.zip": {
"checksums": {
"sha256": "90d6c7e2a37be8da08010763a913644861d1e1e606fb31fad2f5cd3a73ec6d39"
}
},
"redcloak-1.2.15.0.deb.zip": {
"checksums": {
"sha256": "6cfbc2731116ae5c07221f2978c19b80829da7c8fa66cffbe1c9c466ece1e135"
}
},
"redcloak-1.2.15.0-0.x86_64.rpm.zip": {
"checksums": {
"sha256": "db01f0fcd624512c9c873893518b83238d1f56c4b948ad4e1bf901d6022fa0ef"
}
}
}
}
答案1
我意识到在源 AWS 账户中创建分销商包后,我手动更新了存储在 S3 中的包文件(包括清单)。
因此,当我直接从辅助 AWS 帐户中的 S3 存储桶添加包时,分销商包正在使用正确的清单和包文件。但是,从原始帐户共享的分销商包仍在使用较旧的清单/包文件。我只需向分销商包添加一个新版本,利用当前的清单/包文件,它就可以开始工作了。
我错误地认为,如果我直接在 S3 中修改文件,分发包下次运行时就会使用该修改。然而,事实似乎并非如此,在 S3 中更新文件后,分发包必须更新以纳入这些更改。