S3数据同步的命令行工具。
项目描述
Solgate
另一个数据同步管道作业运行器。
一个命令行实用工具,预期将通过容器原生工作流程引擎如 Argo 或 Tekton 自动化。
安装
pip install solgate
配置
Solgate依赖于一个配置文件,该文件包含执行完全同步所需的所有信息。此配置文件应采用YAML格式,并应包含以下键
source
键。此键的值指定数据源。destinations
键。其值应为位置数组。它们的作用是定义同步目标。- 其他顶级键,用于通用配置,而不是针对单个位置的特定配置。
通用配置部分
本节中的所有配置 均为可选。如果您想修改默认行为,请使用此部分。默认值如下所示
alerts_smtp_server: smtp.corp.redhat.com
alerts_from: solgate-alerts@redhat.com
alerts_to: dev-null@redhat.com
timedelta: 1d
描述
alerts_smtp_server
、alerts_from
和alerts_to
仅用于电子邮件警报timedelta
定义一个时间窗口,在此时间窗口内,源存储桶中的对象必须已修改,才有资格进行存储桶列表。仅包括自现在起不超过timedelta
的修改文件。
源键
source:
aws_access_key_id: KEY_ID
aws_secret_access_key: SECRET
base_path: DH-PLAYPEN/storage/input # at least the bucket name is required, sub path within this bucket is optional
endpoint_url: https://s3.amazonaws.com # optional, defaults to s3.amazonaws.com
formatter: "{date}/{collection}.{ext}" # optional, defaults to None
如果未设置 formatter
,则预期不会发生重新分区,S3 对象键保持不变,与源存储桶中的(在 base_path
上下文中)相同。仅在源部分指定 formatter
,不会导致所有对象进行重新分区,只有那些也指定了此选项的目标才有资格进行对象键修改。
目标键
destinations:
- aws_access_key_id: KEY_ID
aws_secret_access_key: SECRET
base_path: DH-PLAYPEN/storage/output # at least the bucket name is required, sub path within this bucket is optional
endpoint_url: https://s3.upshift.redhat.com # optional, defaults to s3.upshift.redhat.com
formatter: "{date}/{collection}.{ext}" # optional, defaults to None
unpack: yes # optional, defaults to False/no
与源部分相比,目标部分的 endpoint_url
默认值为不同。这是由于通常的数据来源和安全的宿主。
如果未设置 formatter
,则预期不会发生重新分区,S3 对象键保持不变,与源存储桶中的(在 base_path
上下文中)相同。如果需要重新分区,必须在源部分定义格式化字符串;否则,无法正确解析源 S3 对象键中的对象名称。
unpack
选项指定在传输过程中是否解压缩经过 gzip 压缩的存档。无论是否启用重新分区,都会自动从结果对象键中删除 .gz
后缀。开启此选项会导致对象验证能力减弱,因为无法使用隐式元数据校验和大小检查来验证文件完整性。
将凭证分别存储在不同的文件中
如果您不想在配置文件中将 aws_access_key_id
和 aws_secret_access_key
以明文形式内联,可以将这些凭证分开存储在各自的文件中。如果配置中找不到(内联)凭证键,solgate 将尝试在配置文件夹中查找它们(与主配置文件相同的文件夹)。
凭证文件应包含以下内容
aws_access_key_id: KEY_ID
aws_secret_access_key: SECRET
对于源,期望的文件名是 source.creds.yaml
,对于目标 destination.X.creds.yaml
,其中 X
是主配置文件中 destinations
列表中的索引。对于目标,我们允许凭证共享,因此如果找不到 destination.X.creds.yaml
文件,solgate 将尝试加载 destination.creds.yaml
(未索引)。
完整示例
让我们看看这个文件结构在 /etc/solgate
$ tree /etc/solgate
/etc/solgate
├── config.yaml
├── destination.0.creds.yaml
├── destination.creds.yaml
└── source.creds.yaml
以及一个主配置文件 /etc/solgate/config.yaml
,看起来像这样
source:
base_path: DH-PLAYPEN/storage/input
destinations:
- base_path: DH-PLAYPEN/storage/output0 # idx=0
- base_path: DH-PLAYPEN/storage/output1 # idx=1
- base_path: DH-PLAYPEN/storage/output2 # idx=2
aws_access_key_id: KEY_ID
aws_secret_access_key: SECRET
Solgate 将使用这些凭证
- 对于源,读取
source.creds.yaml
,因为没有内联凭证 - 对于目标
idx=0
,使用destination.0.creds.yaml
,因为没有内联凭证 - 对于目标
idx=1
,使用destination.creds.yaml
,因为没有内联凭证,且没有destination.1.creds.yaml
文件 - 对于目标
idx=2
,使用内联凭证
解析优先级
类型 | 优先级 |
---|---|
源 | 内联 > source.creds.yaml |
目标 | 内联 > destination.INDEX.creds.yaml > destination.creds.yaml |
示例配置文件
以下是一个完整的配置文件示例,全部一起。
alerts_smtp_server: smtp.corp.redhat.com
alerts_from: solgate-alerts@redhat.com
alerts_to: dev-null@redhat.com
timedelta: 1d
source:
aws_access_key_id: KEY_ID
aws_secret_access_key: SECRET
endpoint_url: https://s3.upshift.redhat.com
formatter: "{date}/{collection}.{ext}"
base_path: DH-PLAYPEN/storage/input
destinations:
- aws_access_key_id: KEY_ID
aws_secret_access_key: SECRET
endpoint_url: https://s3.upshift.redhat.com
formatter: "{collection}/historic/{date}-{collection}.{ext}"
base_path: DH-PLAYPEN/storage/output
- aws_access_key_id: KEY_ID
aws_secret_access_key: SECRET
endpoint_url: https://s3.upshift.redhat.com
formatter: "{collection}/latest/full_data.csv"
base_path: DH-PLAYPEN/storage/output
unpack: yes
用法
Solgate 主要用于在 Argo Workflows 中进行自动化。然而,它也可以作为独立的 CLI 工具用于手动传输,并通过扩展用于(待定)清单生成和(待定)已部署实例监控。
列出待传输的文件所在的存储桶
在运行实际的同步之前,需要
solgate list
CLI 选项 |
配置文件条目 | 描述 |
---|---|---|
-o |
输出到文件而不是 stdout。创建一个列表文件。 | |
timedelta |
定义查找限制。仅报告比此值新的文件。默认为 1 天。 |
同步对象
solgate send KEY
CLI 选项 |
描述 |
---|---|
-l ,--listing-file |
此命令处理的列表文件。格式应与 solgate list 输出相同。如果设置,则忽略 KEY 参数。 |
通知服务
从Argo环境通过电子邮件发送工作流状态警报。
命令期望传递与描述的Argo变量格式匹配的值,具体请参阅此处。
solgate report
选项可以通过CLI参数或环境变量设置
-
映射到Argo工作流变量的选项
CLI选项 环境变量名称 值应映射到Argo工作流变量 描述 --failures
WORKFLOW_FAILURES
{{workflow.failures}}
JSON序列化为字符串,列出所有失败的工作流节点 -n
,--name
WORKFLOW_NAME
{{workflow.name}}
工作流实例名称。 --namespace
WORKFLOW_NAMESPACE
{{workflow.namespace}}
工作流执行的项目命名空间。 -s
,--status
WORKFLOW_STATUS
{{workflow.status}}
工作流执行的当前状态。 -t
,--timestamp
WORKFLOW_TIMESTAMP
{{workflow.creationTimestamp}}
工作流执行的时间戳。 -
映射到配置文件条目的选项。优先顺序
CLI option > Environment variable > Config file entry > Default value
CLI 选项 环境变量名称 配置文件条目 描述 --from
ALERT_SENDER
alerts_from
电子邮件警报发送者地址。默认为solgate-alerts@redhat.com。 --to
ALERT_RECIPIENT
alerts_to
电子邮件警报接收者地址。默认为data-hub-alerts@redhat.com。 --smtp
SMTP_SERVER
alerts_smtp_server
SMTP服务器URL。默认为smtp.corp.redhat.com。 -
其他
CLI选项 环境变量名称 描述 --host
ARGO_UI_HOST
Argo UI对外主机名。
工作流清单
除了solgate
包之外,此存储库还包括在manifests
文件夹中的部署清单。当前Kubernetes清单的实现依赖于Argo,Argo Events,并以Kustomize格式组织。部署环境在manifests/overlays/ENV_NAME
文件夹中指定。
每个环境都包含多个solgate工作流实例。配置config.ini
文件和所选触发器在特定环境文件夹中的实例子文件夹中定义。
部署
环境部署预计将由Argo CD在AI-CoE SRE中处理,但也可以手动完成。
本地先决条件
已部署的平台和运行中的服务
构建和部署清单
kustomize build --enable_alpha_plugins manifests/overlays/ENV_NAME | oc apply -f -
创建新实例
将在下一版本中通过脚手架处理!
先决条件
导入GPG密钥EFDB9AFBD18936D9AB6B2EECBD2C73FF891FBC7E
,A76372D361282028A99F9A47590B857E0288997C
,04DAFCD9470A962A2F272984E5EB0DA32F3372AC
gpg --keyserver keyserver.ubuntu.com --recv EFDB9AFBD18936D9AB6B2EECBD2C73FF891FBC7E A76372D361282028A99F9A47590B857E0288997C 04DAFCD9470A962A2F272984E5EB0DA32F3372AC
-
在所选环境叠加中创建以实例名称命名的文件夹(复制
prod/TEMPLATE
)。 -
在此新文件夹中创建一个
kustomization.yaml
文件,内容如下,将NAME
更改为您的实例名称apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization generators: - ./secret-generator.yaml commonLabels: app.kubernetes.io/name: NAME resources: - ./cronwf.yaml
-
在此新文件夹中创建一个
secret-generator.yaml
文件,内容如下apiVersion: viaduct.ai/v1 kind: ksops metadata: name: secret-generator files: - secret.enc.yaml
-
在此文件夹中创建一个
secret.enc.yaml
文件并使用sops对其进行加密apiVersion: v1 kind: Secret metadata: name: solgate-NAME stringData: source.creds.yaml: | aws_access_key_id: KEY_ID_FOR_SOURCE aws_secret_access_key: SECRET_FOR_SOURCE destination.creds.yaml: | aws_access_key_id: DEFAULT_KEY_ID_FOR_DESTINATIONS aws_secret_access_key: DEFAULT_SECRET_FOR_DESTINATIONS destination.2.creds.yaml: | aws_access_key_id: KEY_ID_FOR_DESTINATION_ON_INDEX_2 aws_secret_access_key: SECRET_FOR_DESTINATION_ON_INDEX_2 config.yaml: | alerts_smtp_server: smtp.corp.redhat.com alerts_from: solgate-alerts@redhat.com alerts_to: dev-null@redhat.com timedelta: 5h source: endpoint_url: https://s3.upshift.redhat.com formatter: "{date}/{collection}.{ext}" base_path: DH-PLAYPEN/storage/input destinations: - endpoint_url: https://s3.upshift.redhat.com formatter: "{collection}/historic/{date}-{collection}.{ext}" base_path: DH-PLAYPEN/storage/output unpack: yes - endpoint_url: https://s3.upshift.redhat.com formatter: "{collection}/latest/full_data.csv" base_path: DH-PLAYPEN/storage/output unpack: yes - endpoint_url: https://s3.upshift.redhat.com base_path: DH-PLAYPEN/storage/output
sops -e -i overlays/ENV_NAME/NEW_INSTANCE_NAME/INSTANCE_NAME.env.yaml
请确保在密钥中加密
*.creds.yaml
条目。 -
创建包含以下内容的
cronwf.yaml
,请更改名称和配置变量值以匹配上面的密钥apiVersion: argoproj.io/v1alpha1 kind: CronWorkflow metadata: generateName: solgate-NAME name: solgate-NAME spec: schedule: concurrencyPolicy: "Replace" workflowSpec: arguments: parameters: - name: config value: solgate-NAME workflowTemplateRef: name: solgate
-
更新
overlays/ENV_NAME/kustomization.yaml
中的资源和修补程序列表resources: - ... - ./NEW_INSTANCE_NAME
回填
回填作业确保处理源存储桶中的所有对象。此作业假定没有任何对象之前已处理,并同步所有内容,可能覆盖目标存储桶中的任何更改。
有一个可以直接提交的 backfill.yaml
文件。请在提交前指定配置参数。值必须匹配目标管道的 Secret
配置资源的名称。
argo submit -p config=solgate-NAME manifests/backfill.yaml
工作流程参数
为每个管道实例定义的 CronWorkflow
资源允许您定义 3 个参数
参数 | 值 | 必需 | 描述 |
---|---|---|---|
config |
字符串 | 是 | 定义要挂载到 pods 并传递给 solgate 运行时的配置 secret |
is-backfil |
字符串(引号中的布尔值) | 否 | 如果设置为 true ,则同步源 bucket 中的所有数据。默认为 false |
split |
字符串(引号中的整数) | 否 | 定义单个同步 pod 处理的文件数量。如果还有更多文件要同步,管道将启动额外的 pods。默认为 5000 |
开发者设置
本地设置
安装 pipenv
并设置环境
pipenv sync -d
为该项目安装/启用 pre-commit
pip install -g pre-commit
pre-commit install
运行测试
在本地环境设置完毕后,您可以通过以下方式在本地运行测试
pipenv run pytest . --cov solgate
构建清单
为 kustomize
清单安装本地先决条件
使用 kustomize build --enable_aplha_plugins ...
构建清单。
CI/CD
我们依赖 AICoE-CI GitHub 应用程序和机器人为我们提供 CI。所有配置均通过 .aicoe-ci.yaml
完成。
发布
如果您是维护者,请通过 GitHub issues 进行发布。新版本创建
- 在 GitHub 上创建一个
git
release tag。 - 将新镜像推送到 Quay.io thoth-station/solgate,标记为发布版本和
latest
。 - 发布到 PyPI solgate 项目。
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。