package main
import (
"bufio"
"encoding/json"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
"io/ioutil"
"strconv"
type ListObjectsConfig struct {
AccessKey string `json:"accessKey"`
SecretKey string `json:"secretKey"`
Endpoint string `json:"endpoint"`
Bucket string `json:"bucket"`
Region string `json:"region"`
func listObjects() {
configFile := os.Args[1]
configStr, err := ioutil.ReadFile(configFile)
if err != nil {
panic(err)
config := &ListObjectsConfig{}
err = json.Unmarshal(configStr, config)
if err != nil {
panic(err)
outfile := os.Args[2]
creds := credentials.NewStaticCredentials(config.AccessKey, config.SecretKey, "")
_, err = creds.Get()
if err != nil {
panic(err)
awsConfig := &aws.Config{
Region: aws.String(config.Region),
Endpoint: aws.String(config.Endpoint),
DisableSSL: aws.Bool(false),
Credentials: creds,
client := s3.New(session.New(awsConfig))
f, err := os.OpenFile(outfile, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
if err != nil {
panic(err)
defer f.Close()
w := bufio.NewWriter(f)
isTruncated := true
var token *string
for isTruncated {
resp, err := client.ListObjectsV2(&s3.ListObjectsV2Input{
Bucket: aws.String(config.Bucket),
MaxKeys: aws.Int64(1000),
ContinuationToken: token,
if err != nil {
panic(err)
isTruncated = *resp.IsTruncated
token = resp.NextContinuationToken
for _, content := range resp.Contents {
_, err = w.WriteString(*content.Key + " " + strconv.FormatInt(*content.Size, 10) + "\n")
if err != nil {
panic(err)
w.Flush()
func main() {
if len(os.Args) != 3 {
fmt.Println("参数数量异常! ")
fmt.Println("./s3list CONFIG OUTFILE")
listObjects()
golang读取的配置文件
"accessKey": "",
"secretKey": "",
"endpoint": "http://s3.cn-north-1.jdcloud-oss.com",
"bucket": "",
"region": "cn-north-1"
使用创建.env文件
BUCKET_NAME= // AWS S3 bucket name
AWS_ACCESS_KEY= // AWS IAM user access_key
AWS_SECRET_ACCESS_KEY= // AWS IAM user secret_access_key
node index.js
var BucketList = require ( 'bucket-list' ) ;
var bucket = BucketList . connect ( {
key : 's3-key' ,
secret : 's3-secret'
bucket : 'name-of-the-s3-bucket'
} ) ;
// Stream bucket files
var bucketStream = bucket ( 'folder_name' ) ;
bucketStream . on ( 'data' , function ( fileNameWithPath ) {
console . log ( fileNameWithPath ) ;
S3_BUCKET_ACCESS_KEY_ID=value
S3_BUCKET_SECRET_ACCESS_KEY=value
S3_BUCKET_NAME=value
S3_BUCKET_REGION=value
// Don't forgot to import the function :smiling_face_with_smiling_eyes:
const {
updateCredentials ,
updateRegion ,
getAllBuckets ,
getUploadUrl ,
uploadFile ,
listFiles ,
deleteFiles ,
} = require ( 's3-bucket' ) ;
getAllBuckets()
是的! 就像您已经猜到的那样。 它会列出您的AWS账户中的所有
有一个内置的缓存层,用于加速连续的 API 调用,缓存基于可配置的响应。 您可以在我们的阅读有关它如何工作的更多。
到现在为止,我们委托给来为缓存层提供服务,因为它很快; 然而,当你有一定的尺寸时,它也很昂贵。
该服务服务,其中每个请求都创建一个缓存条目; 这意味着可以相对较快地耗尽空间。
我们想要一个满足以下前提的缓存层:
无限空间。
规模便宜。
知道我们想要什么,并记住响应负载是 JSON,我们发现Amazon S3存储桶是出色的存储。
$ npm install @keyv/core @aws-sdk/client-s3 keyv-s3 --save
首先,您需要创建一个 S3 存储桶以用作缓存层
您需要设置正确的存储桶名称才能通过 HTTP 进行访问。
为此,我们在存储桶名称上设置了 CNAME,在我们的例子中,我们
1. AWS S3对象存储
Amazon Simple Storage Service (Amazon S3) 是一种面向 Internet 的存储服务。您可以通过 Amazon S3 随时在 Web 上的任何位置存储和检索的任意大小的数据。
Amazon S3将数据作为对象存储在存储区中。一个对象由一个文件和可选的描述该文件的任何元数据组成。在S3里面实质上是没有目录和文件夹的概念,即目录概念实...
因此需要翻页遍历出所有的对象。
private LinkedList<S3ObjectSummary> allObjectList = new LinkedList<S3ObjectSummary>();
public void download(){
const dbcsv = require ( 'db-csv-s3' )
await dbcsv ( {
S3 , bucketname : "yourbucketname" , s3Prefix : 'db_backup' ,
Knex ,
tables , rows = 50000
S3 - S3 服务对象,包括accessKeyId 、 secretAccessKey 、 region 、 apiVersion 。 前任:
const S3 = new AWS . S3 ( {
accessKeyId : youraw
对象存储服务,简单来说,可以把它当成一个“网盘”,可以上传下载数据,也可以直接在这个“网盘”中对文件进行某些操作。
我之前所在部门收到的,涉及到第三方合作的数据分析项目,自从对象存储服务开始流行起来后,大多都使用了这些对象存储服务。这些项目在技术方面,内部几乎完全交给了我一个人,正好给了我学习这个东西的经验。
我为什么要写一篇这样的文章呢,背景是这样的
这3个对象存储服务,都是有各种开发环境sdk的,其他公司大多会选择使用java/python/.NET等来开发数据导出及同步的服务。而我所在部门,当时
存储的“目录”根据Key来指定,
1.2 OSS
帮助文档: https://help.aliyun.com/document_detail/31965.html?spm=a2c4g.11186623.2.12.10014c07Y1Dh9G
Go SDK : https://help.aliyun.com/document_detail/88639.html?spm=a2c4g.1118...
要在Logstash中连接S3,可以使用Logstash-input-s3插件。该插件可以从S3存储桶中读取数据并将其发送到Logstash管道中进行处理。
以下是一个示例配置文件,可以实现将S3存储桶中的CSV文件读取到Logstash中:
input {
access_key_id => "your_access_key"
secret_access_key => "your_secret_key"
bucket => "your_bucket_name"
region => "your_bucket_region"
prefix => "your_file_prefix"
sincedb_path => "/dev/null"
filter {
csv {
separator => ","
columns => ["column1", "column2", "column3"]
output {
stdout {
codec => rubydebug
在以上配置文件中,需要将access_key_id、secret_access_key、bucket、region和prefix替换为自己的S3存储桶信息。sincedb_path选项指定了sincedb数据库的路径,这里将其设置为/dev/null以禁用sincedb。
filter部分使用CSV插件将读取到的数据按照指定的分隔符和列名进行解析。
output部分将处理后的数据输出到控制台或其他目标位置。
使用以上配置文件可以实现将S3存储桶中的CSV文件读取到Logstash中进行处理。