Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >k8s中通过aws sdk访问s3遇到的坑

k8s中通过aws sdk访问s3遇到的坑

作者头像
一笠风雨任生平
发布于 2022-01-06 06:17:27
发布于 2022-01-06 06:17:27
2.1K00
代码可运行
举报
文章被收录于专栏:服务化进程服务化进程
运行总次数:0
代码可运行

背景

公司有一套基于k8s的paas系统,现在pod中安装了aws 命令行工具

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RUN apk add py-pip && pip install awscli

可以使用命令直接get、put文件,如下:

由于java使用命令行时可能会出现卡死现象,所以这里想使用aws提供的sdk来直接上传下载文件。 默认有两种方式,一种是程序中配置key:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, awsSecretKey);
            s3 = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(awsCredentials)).withRegion(Regions.DEFAULT_REGION).build();

另外一种如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
s3 = AmazonS3ClientBuilder.standard().withCredentials(new ProfileCredentialsProvider()).withRegion(Regions.DEFAULT_REGION).build();

报错

报错一:java.lang.IllegalArgumentException: profile file cannot be null

原因:这里是没找到配置文件,~/.aws/credentials 解决方案: 在dorker中需要直接使用下面方式来初始化s3client

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
AmazonS3 s3Client = new AmazonS3Client();
或者
AmazonS3 s3Client = new AmazonS3Client(DefaultAWSCredentialsProviderChain.getInstance());

最终初始化代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
s3 = AmazonS3ClientBuilder.standard().withCredentials(DefaultAWSCredentialsProviderChain.getInstance()).withRegion(Regions.DEFAULT_REGION).build();

参考链接: https://stackoverflow.com/questions/41796355/aws-error-downloading-object-from-s3-profile-file-cannot-be-null

报错二:Amazon S3 exception: “The specified key does not exist”

详细报错:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
com.amazonaws.services.s3.model.AmazonS3Exception: 
The specified key does not exist.
 (Service: Amazon S3; Status Code: 404; Error Code: NoSuchKey;

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 public static void downloadFile(String fileName,String savePath) {
        S3Object s3Object = s3.getObject(bucketName, fileName);
        FileOutputStream fos = null;
        try (S3ObjectInputStream s3input = s3Object.getObjectContent()){
            fos = new FileOutputStream(new File(savePath));
            byte[] read_buf = new byte[1024];
            int read_len = 0;
            while ((read_len = s3input.read(read_buf)) > 0) {
                fos.write(read_buf, 0, read_len);
            }
            s3Object.close();
            fos.close();
        } catch (Exception e) {
            log.warn("获取文件异常:fileName={},savePath={}",fileName,savePath,e);
            throw new AppException("获取文件异常:fileName="+fileName+",savePath="+savePath);
        } finally {
            try{
                if(fos!=null) {
                    fos.close();
                }
            }catch (IOException e){
                log.warn("关闭文件流异常:fileName={},savePath={}",fileName,savePath,e);
            }
        }
    }

原因:这里是只找不到文件 解决方案:检查s3上的文件路径是否正确, 举个例子:s3://bucket_name/aa/bb/mm.csv 这里的fileName参数应该传“aa/bb/mm.csv”;

报错三:/data/xx/xx/aa.csv not exists

这个原因比较明显,是目标文件找不到,请先确认号父目录是否创建

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/06/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
AWS S3 学习小结
1.首先,这个是AWS的开发资源使用文档:AWS开发文档,AWS官网 – S3教程
全栈程序员站长
2022/11/03
1.8K0
s3 aws 临时授权
https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/AuthUsingTempSessionToken.html
周杰伦本人
2022/10/25
1.3K0
通过S3协议实现通用的文件存储服务中间件
在日常开发文件上传相关服务时,通常都会选择腾讯云,阿里云,七牛云等提供的oss服务作为文件存储系统,如果需要自行搭建文件存储系统,通常则会采用minio等开源项目。
大忽悠爱学习
2022/09/28
5.7K0
通过S3协议实现通用的文件存储服务中间件
Hadoop文件系统支持释疑之S3
  Hadoop版本提供了对多种文件系统的支持,但是这些文件系统是以何种方式实现的,其实现原理是什么以前并没有深究过。今天正好有人咨询我这个问题:Hadoop对S3的支持原理是什么?特此总结一下。Hadoop支持的文件系统包括:  
数据饕餮
2019/01/14
1.2K0
AI实现代码转换,Python转Java,Java转Go不再困难?
今天看到个有趣的网站,给大家分享一下。 该网站的功能很神奇,可以实现编程语言的转化。 感觉在一些场景之下还是有点作用的,比如你原来跟我一样是做Java的,因为工作需要突然转Go。这个时候用你Java的经验 + 这个工具,或许可以起到一定的帮助作用。 工具的使用很简单,只需要在左侧黏贴你想转换的原始代码,然后点击CONVERT CODE,右侧输入框就会转换成目标代码: 是不是很神奇?关注公众号“程序猿DD”,回复“代码转换”获取网站地址,一起来试试看吧! 也许你跟我一样,觉得只能实现这样简单的代码转换
程序猿DD
2023/04/24
6130
AI实现代码转换,Python转Java,Java转Go不再困难?
spring整合s3实现文件上传下载
pom依赖 <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-s3 --> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-s3</artifactId> <version>1.11.803</version> </
高大北
2022/10/31
1.9K0
如何使用亚马逊对象存储AWS S3 SDK访问腾讯云存储COS
COS 提供了 AWS S3 兼容的 API,因此当您的数据从 S3 迁移到 COS 之后,只需要进行简单的配置修改,即可让您的客户端应用轻松兼容 COS 服务。本文主要介绍不同开发平台的 S3 SDK 的适配步骤。在完成添加适配步骤后,您就可以使用 S3 SDK 的接口来访问 COS 上的文件了。
云存储
2020/05/26
4.5K0
这才是企业级的oss-spring-boot-starter,开箱即用!
本文主要讲解企业级OSS对象存储服务Spring Boot Starter制作,开箱即用,为项目进行赋能。基于AmazonS3协议,适配市面上的对象存储服务如:阿里云OSS、腾讯COS、七牛云OSS、MInio等等 什么是OSS? OSS(Object Storage Service),对象存储服务,对象存储服务是一种使用HTTP API存储和检索对象的工具。就是将系统所要用的文件上传到云硬盘上,该云硬盘提供了文件下载、上传、预览等一系列服务,具备版本,权限控制能力,具备数据生命周期管理能力这样的服务以及技术可以统称为OSS OSS在项目中的使用 OSS对象存储在目前大部分项目中必不可少的存在,如下图所示。
民工哥
2024/04/02
4630
这才是企业级的oss-spring-boot-starter,开箱即用!
AWS-SDK-CPP遇到的问题
程序在启动加载时非常慢,后来排查到时这行代码有问题Aws::S3::S3Client client
无敌清风蓝
2024/06/04
2660
实现标准S3协议的附件上传
S3是Simple Storage Service的缩写,即简单存储服务。亚马逊的名词缩写也都遵循这个习惯,例如Elastic Compute Cloud缩写为EC2等等。
西门呀在吹雪
2021/10/30
2.9K0
实现标准S3协议的附件上传
SpringBoot开发符合S3协议的文件存储服务
公司最近的业务大量涉及安可项目,要求避免使用第三方组件,原有开发框架支持本地文件存储/Minio/各类云存储,现在要求文件独立存储且文件服务需要自研,经调研评估后决定基于SpringBoot开发文件存储服务,使用s3协议标准,这样可以直接使用aws-sdk接入无需再开发客户端,且安全安全性方面可以得到足够的保证(签名验证部分参考我的博文《Java实现AWS S3 V4 Authorization自定义验证》)
code2roc
2023/07/23
9220
如何使用S3cret Scanner搜索公共S3 Bucket中的敏感信息
S3cret Scanner是一款针对S3 Bucket的安全扫描工具,在该工具的帮助下,广大研究人员可以轻松扫描上传到公共S3 Bucket中的敏感信息。
FB客服
2023/02/10
8750
如何使用S3cret Scanner搜索公共S3 Bucket中的敏感信息
S3对象存储获取预签名URL | Golang
最近学习使用对象存储,自然要学习一下 Amazon S3,同时最近学了一下Golang,简单记录一下学习使用 AWS SDK for Go V2 生成文件预签名URL,
ZGGSONG
2022/09/09
2.4K1
AWS CPP S3访问COS
COS是完全兼容AWS S3的,项目中经常遇到客户直接使用AWS S3的相关SDK,来访问COS。
ictfox
2021/12/16
1.1K0
S3对象存储获取预签名URL | Golang
最近学习使用对象存储,自然要学习一下 Amazon S3,同时最近学了一下Golang,简单记录一下学习使用 AWS SDK for Go V2 生成文件预签名URL,
ZGGSONG
2022/07/21
3.3K0
Cloud-Security-Audit:一款基于Go的AWS命令行安全审计工具
cloud-security-audit是一款适用于AWS的命令行安全审计工具。它可以帮助你扫描AWS账户中的漏洞,你将能够快速识别基础架构中不安全的部分,并执行对AWS账户的审计工作。
FB客服
2019/07/22
1.2K0
S3上传代码用例-golang
S3上传用例-golang 使用AWS-SDk-golang实现文件上传,支持大文件并发,注意只支持AWS4签名,因此ceph的jewel以上版本才可以用。 package main import ( "fmt" "os" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/service/s3/s3manager"
用户1260683
2018/03/26
6.9K0
laravel使用aws笔记
一、引入composer "aws/aws-sdk-php": "^3.137", "league/flysystem-aws-s3-v3": "^1.0" 二、添加配置 's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), #key 'secret' => env('AWS_SECRET_ACCESS_KEY'), #秘钥 're
苦咖啡
2020/05/12
1.3K0
ceph对象存储折腾记 原
###前言 一直想弄对象存储,以前弄过一次,不是很理解region是个什么东西,后来时间和工作上的原因没有再折腾,这两天闲了下来,再次折腾了一次。我是参考的ceph的中文翻译文挡进行的部署和测试。传送门,文档里面介绍的和ceph本身的版本存在脱节的现象,可能初次接触的人会因为服务启动的问题摸不着头脑。 ###关于部署 安装ceph必要的软件包,配置好公共密钥和ceph mon的配置,这里我不再谈了。 对象存储额外需要安装的包是:ceph-radosgw和ceph-common 安装完毕你的系统上应该至少存在三个命令:rados 、 radosgw 、 radosgw-admin 其中整个对象网关服务就是由radosgw来启动的,radosgw-admin负责管理对象资源(用户,权限,bucket),rados基本算一个比较简单的s3客户端(?我这里可能理解不是很精确) ####配置 ceph.conf
domain0
2018/08/02
6460
golang 源码分析:mc,minio-go
对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。Minio 除了直接作为对象存储使用,还可以作为云上对象存储服务的网关层,无缝对接到 Amazon S3、MicroSoft Azure。 在学习minio的源码之前,先阅读下minio的客户端mc和golang sdk minio-go
golangLeetcode
2022/08/03
1.5K0
相关推荐
AWS S3 学习小结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验