0

AWS で小さな POC を行っています。S3 バケットから csv ファイルを読み取ろうとして、CloudWatch ログ ファイルに表示されます。すべてが順調に進んでいますが、ファイルにアクセスしているときに java.io.FileNotFoundException を取得しています

コーディング

public class LambdaFunctionHandler implements RequestHandler<S3Event, Report> {

Region AWS_REGION = Region.getRegion(Regions.US_EAST_1);

public Report handleRequest(S3Event s3event, Context context) {
    long startTime = System.currentTimeMillis();
    Report statusReport = new Report();
    LambdaLogger logger = context.getLogger();

    logger.log("Lambda Function Started");
    logger.log("I am inside lambda function");
    Helper helper = new Helper();

    try {
        logger.log("I am inside lambda function2");
        S3EventNotificationRecord record = s3event.getRecords().get(0);
        logger.log("I am inside lambda function3");
        String srcBucket = record.getS3().getBucket().getName();
        logger.log("I am inside lambda function4");
        // Object key may have spaces or unicode non-ASCII characters.
        String srcKey = record.getS3().getObject().getKey().replace('+', ' ');
        logger.log("I am inside lambda function5");
        srcKey = URLDecoder.decode(srcKey, "UTF-8");
        logger.log("I am inside lambda function6");

        AmazonS3 s3Client = new AmazonS3Client();
        logger.log("I am inside lambda function7");
        S3Object s3Object = s3Client.getObject(new GetObjectRequest(srcBucket, srcKey));
        logger.log("I am inside lambda function8");
        statusReport.setFileSize(s3Object.getObjectMetadata().getContentLength());
        logger.log("I am inside lambda function9");

        logger.log("S3 Event Received: " + srcBucket + "/" + srcKey);
        logger.log("I am inside lambda function10");

        File file = new File(srcBucket+"/"+srcKey);
        try {
            Scanner readData =new Scanner(file);
            while(readData.hasNext()) {
                String data = readData.next();
                logger.log("I am inside lambda function data ;;got it");
                //System.out.println("data"+data);
            }
            readData.close();
        }catch(FileNotFoundException e){
            e.printStackTrace();
        }

CloudWatch ログ ファイルの出力

ここに画像の説明を入力

CloudWatch ログ エラー

私はラムダ関数の中にいます

私はラムダ関数2の中にいます

私はラムダ関数3の中にいます

私はラムダ関数4の中にいます

私はラムダ関数5の中にいます

私はラムダ関数6の中にいます

私はラムダ関数7の中にいます

私はラムダ関数8の中にいます

私はラムダ関数9の中にいます

受信した S3 イベント: readfilefromcsvfile/def_nhtsa_crash_test.csv

私はラムダ関数10の中にいます

java.io.FileNotFoundException:

readfilefromcsvfile/def_nhtsa_crash_test.csv (そのようなファイルまたはディレクトリはありません) java.io.FileNotFoundException: readfilefromcsvfile/def_nhtsa_crash_test.csv (そのようなファイルまたはディレクトリはありません) at java.io.FileInputStream.open0 (ネイティブ メソッド)

ログ出力を調べると、そのようなファイルはありませんが、S3 バケットに保存しています。JavaでS3ファイルにアクセスする方法を教えてもらえますか? または S3 バケット ファイルにアクセスする際に指定する必要があるパス名は何ですか?

4

1 に答える 1