【问题标题】:Google OAuth2.0 + Lambda + S3 Authorization - How to refer to a file from S3?Google OAuth2.0 + Lambda + S3 授权 - 如何从 S3 引用文件?
【发布时间】:2021-03-22 01:41:40
【问题描述】:

我正在尝试使用来自google 的身份验证,但是我对如何在该方法中使用存在疑问:

GoogleCredential credential = GoogleCredential.fromStream(new FileInputStream("MyProject-1234.json"))
    .createScoped(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN));

文件 MyProject-1234.json 存储在 S3 存储桶中,当前在 lambda 中运行,如何在身份验证中使用此文件?我不确定我是否应该发送路径以及如何发送,或者我是否应该做其他事情。

【问题讨论】:

    标签: java amazon-web-services amazon-s3 aws-lambda google-oauth-java-client


    【解决方案1】:

    您需要先使用 AWS SDK for Java 将文件从 S3 下载到 Lambda 函数的本地文件系统。您不能使用FileInputStream 打开 S3 对象,只能使用它打开本地文件系统对象。

    【讨论】:

      【解决方案2】:

      您可以通过以下方式从 S3 中提取文件并使用它。

      简而言之,getFileFromS3(...) 方法将返回一个File 对象,您可以使用该对象创建FileInputStream

      public class S3FileTest implements RequestStreamHandler {
      
          private LambdaLogger logger;
      
          @Override
          public void handleRequest(InputStream input, OutputStream output, Context context) throws IOException {
              logger = context.getLogger();
      
              String bucketName = "==== S3 BUCKET NAME ====";
              String fileName = "==== S3 FILE NAME ====";
      
              File localFile = getFileFromS3(context, bucketName, fileName);
      
              if(localFile == null) {
                  // handle error
                  // return ....
              }
      
              // use the file
              GoogleCredential credential = GoogleCredential.fromStream(new FileInputStream(localFile))
                      .createScoped(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN));
              
              // do more
              // ...
          }
      
          private File getFileFromS3(Context context, String bucketName, String fileName) {
              AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withRegion(Regions.US_EAST_1).build();
      
              // s3 client
              if (s3Client == null) {
                  logger.log("S3 Client is null - can't continue!");
                  return null;
              }
      
              // s3 bucket - make sure it exist
              if (!s3Client.doesBucketExistV2(bucketName)) {
                  logger.log("S3 Bucket does not exists - can't continue!");
                  return null;
              }
      
      
              File localFile = null;
      
              try {
                  localFile = File.createTempFile(fileName, "");
      
                  // get S3Object
                  S3Object s3Object = s3Client.getObject(bucketName, fileName);
      
                  // get stream from S3Object
                  InputStream inputStream = s3Object.getObjectContent();
      
                  // write S3Object stream into a temp file
                  Files.copy(inputStream, localFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
      
                  return localFile;
              } catch (Exception e) {
                  logger.log("Failed to get file from S3: " + e.toString());
                  return null;
              }
          }
      }
      

      【讨论】:

      • 非常感谢您的回答!这对我帮助很大!
      猜你喜欢
      • 2020-09-23
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      • 2019-10-20
      • 2018-11-17
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      相关资源
      最近更新 更多