创建大小小于1MiB的静态二进制文件,可以从S3或GCS下载文件

问题描述 投票:-1回答:1

我知道问题可能看起来太具体了,但我认为答案也可能对其他领域有用。

我遇到的真正问题:给定具有sh二进制文件的任意容器映像,请从Google Cloud Storage下载文件。

由于下载二进制文件不存在于用户映像中,所以我有一个想法将编码后的二进制文件放入命令行中(有点类似于python -c <code>之类的内联脚本)。但是,命令行大小(〜1MiB)受限制,因此二进制文件应小于此大小。

由于易于创建静态链接的二进制文件,并且人们报告GO二进制文件很小,因此我决定使用Go。

我已经编写了一个Go程序,该程序使用cloud.google.com/go/storage模块来创建客户端并读取Blob storage.NewClient().Bucket(bucket).Object(object).NewReader()

不幸的是,简单程序的二进制文件为15MiB。添加go build -ldflags=" -s -w"(如How to reduce compiled file size?中的建议)可将其减少到10MiB。仍然比我的预算大几个数量级。

我可以使用二进制优化或修剪技术吗?

如果我希望使用较小的二进制文件,是否应该使用其他语言(例如C ++)?

如果尝试使用一些通用的REST客户端库,我会好运吗? //看起来像没有-使用http.Get的剥离后的Go程序的大小为5MiB。

c++ go google-cloud-storage executable static-linking
1个回答
2
投票

我认为您无法将Go二进制文件的大小降低到1 MiB以下,特别是如果您必须使用功能齐全的第三方库(例如GCP存储绑定)。

很奇怪,您现在的年龄限制为1 MiB,但如果确实如此,我建议您这样做:

  1. 如果您的环境具有解释性语言运行时(如Python,Ruby等),请使用它,因为源代码的大小由您自己提供。
  2. 否则,您可能需要使用C ++。就是说,如果您的二进制文件必须访问云存储,并且您想使用软件包/库来做到这一点,那么除非您非常小心,否则1 MiB仍然会很困难。访问云存储涉及很多功能-安全性,HTTP / RPC客户端等。
© www.soinside.com 2019 - 2024. All rights reserved.