跳转到主要内容

S3数据同步的命令行工具。

项目描述

Solgate

License Python version Latest release PyPI Quay.io

另一个数据同步管道作业运行器。

一个命令行实用工具,预期将通过容器原生工作流程引擎如 ArgoTekton 自动化。

安装

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_serveralerts_fromalerts_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_idaws_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清单的实现依赖于ArgoArgo Events,并以Kustomize格式组织。部署环境在manifests/overlays/ENV_NAME文件夹中指定。

每个环境都包含多个solgate工作流实例。配置config.ini文件和所选触发器在特定环境文件夹中的实例子文件夹中定义。

部署

环境部署预计将由Argo CDAI-CoE SRE中处理,但也可以手动完成。

本地先决条件

已部署的平台和运行中的服务

构建和部署清单

kustomize build --enable_alpha_plugins manifests/overlays/ENV_NAME | oc apply -f -

创建新实例

将在下一版本中通过脚手架处理!

先决条件

导入GPG密钥EFDB9AFBD18936D9AB6B2EECBD2C73FF891FBC7EA76372D361282028A99F9A47590B857E0288997C04DAFCD9470A962A2F272984E5EB0DA32F3372AC

gpg --keyserver keyserver.ubuntu.com --recv EFDB9AFBD18936D9AB6B2EECBD2C73FF891FBC7E A76372D361282028A99F9A47590B857E0288997C 04DAFCD9470A962A2F272984E5EB0DA32F3372AC
  1. 在所选环境叠加中创建以实例名称命名的文件夹(复制prod/TEMPLATE)。

  2. 在此新文件夹中创建一个kustomization.yaml文件,内容如下,将NAME更改为您的实例名称

    apiVersion: kustomize.config.k8s.io/v1beta1
    kind: Kustomization
    
    generators:
      - ./secret-generator.yaml
    
    commonLabels:
      app.kubernetes.io/name: NAME
    
    resources:
      - ./cronwf.yaml
    
  3. 在此新文件夹中创建一个secret-generator.yaml文件,内容如下

    apiVersion: viaduct.ai/v1
    kind: ksops
    metadata:
      name: secret-generator
    files:
      - secret.enc.yaml
    
  4. 在此文件夹中创建一个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条目。

  5. 创建包含以下内容的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
    
  6. 更新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 进行发布。新版本创建

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分发

solgate-3.5.5.tar.gz (46.8 kB 查看哈希值)

上传时间

构建分发

solgate-3.5.5-py3-none-any.whl (48.6 kB 查看哈希值)

上传时间 Python 3

支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面