jenkins 如何使用curl从minio s3存储桶下载文件

bwntbbo3  于 2023-04-29  发布在  Jenkins
关注(0)|答案(3)|浏览(931)

我正在尝试从minio s3存储桶下载文件夹的内容。
我正在使用以下命令。
我可以使用下载特定文件

# aws --endpoint-url http://s3:9000 s3 cp s3://mlflow/3/050d4b07b6334997b214713201e41012/artifacts/model/requirements.txt .

但是下面的提示会抛出一个错误,如果它试图下载文件夹的所有内容

# aws --endpoint-url http://s3:9000 s3 cp s3://mlflow/3/050d4b07b6334997b214713201e41012/artifacts/model/* . 
fatal error: An error occurred (404) when calling the HeadObject operation: Key "3/050d4b07b6334997b214713201e41012/artifacts/model/*" does not exist

任何帮助将不胜感激

mutmk8jj

mutmk8jj1#

我终于能够通过跑步得到它

aws --endpoint-url http://s3:9000 s3 cp s3://mlflow/3/050d4b07b6334997b214713201e41012/artifacts/model . --recursive

我遇到的一个问题是我必须使用aws-cli使用pip install,因为这是我可以使用--recursive选项的唯一方法。

yx2lnoni

yx2lnoni2#

您还可以使用minio client并在minio命令上设置别名。下面是一个来自官方documentation的例子,展示了如何使用minio client的docker版本实现这一点:

docker pull minio/mc:edge
docker run -it --entrypoint=/bin/sh minio/mc
mc alias set <ALIAS> <YOUR-S3-ENDPOINT> [YOUR-ACCESS-KEY] [YOUR-SECRET-KEY] [--api API-SIGNATURE]

您可以在任何操作系统上安装客户端。
完成后,要从s3复制内容,您只需这样做:

{minio_alias} cp {minio_s3_source} {destination}
pdsfdshx

pdsfdshx3#

下面是使用cURLopenssl从MinIO服务器下载文件的脚本文件
使用方法:

./download_minio.sh <HOST> <KEY> <SECRET> <BUCKET> <FILE ON MINIO> <OUTPUT PATH>
# Example: 
./download_minio.sh example.url.com mykey mysecret bucket-name minio/path/to/file.txt.zst /download/path/to/file.txt.zst

脚本内容download_minio.sh

#!/usr/bin/env sh

# Example: ./download_minio.sh example.url.com username password bucket-name minio/path/to/file.txt.zst /download/path/to/file.txt.zst

if [ -z $1 ]; then
  echo "You have NOT specified a MINIO URL!"
  exit 1
fi

if [ -z $2 ]; then
  echo "You have NOT specified a USERNAME!"
  exit 1
fi

if [ -z $3 ]; then
  echo "You have NOT specified a PASSWORD!"
  exit 1
fi

if [ -z $4 ]; then
  echo "You have NOT specified a BUCKET!"
  exit 1
fi

if [ -z $5 ]; then
  echo "You have NOT specified a MINIO FILE PATH!"
  exit 1
fi

if [ -z $6 ]; then
  echo "You have NOT specified a DOWNLOAD PATH!"
  exit 1
fi

# User Minio Vars
URL=$1
USERNAME=$2
PASSWORD=$3
BUCKET=$4
MINIO_PATH="/${BUCKET}/$5"
OUT_FILE=$6

# Static Vars
DATE=$(date -R --utc)
CONTENT_TYPE='application/zstd'
SIG_STRING="GET\n\n${CONTENT_TYPE}\n${DATE}\n${MINIO_PATH}"
SIGNATURE=`echo -en ${SIG_STRING} | openssl sha1 -hmac ${PASSWORD} -binary | base64`
PROTOCOL="https"

curl -o "${OUT_FILE}" \
    -H "Host: $URL" \
    -H "Date: ${DATE}" \
    -H "Content-Type: ${CONTENT_TYPE}" \
    -H "Authorization: AWS ${USERNAME}:${SIGNATURE}" \
    ${PROTOCOL}://$URL${MINIO_PATH}

Originaly created by JustinTimperio on Github

相关问题