2017-08-16 6 views
0

私はHerokuアプリケーションで作業していたダイレクト-to-s3設定で突然問題が発生しています。私はこのチュートリアル(https://devcenter.heroku.com/articles/s3-upload-node)を使用し、バックエンドのために、このコードで作業し、すべてを持っていた:Direct-to-S3アップロードエラー

const AWS = require('aws-sdk'); 
const awsconfig = new AWS.Config({ 
    accessKeyId: process.env.AWS_KEY, 
    secretAccessKey: process.env.AWS_SECRET, 
    region: 'us-east-1' 
}); 
const s3 = new AWS.S3({ 
    params: { Bucket: process.env.S3_BUCKET } 
}); 

router.get('/sign-s3', function(req, res) { 
    const fileName = req.query['file-name']; 
    const fileType = req.query['file-type']; 
    const s3Params = { 
    Key: fileName, 
    Expires: 60, 
    ContentType: fileType, 
    ACL: 'public-read' 
    }; 

    s3.getSignedUrl('putObject', s3Params, function(err, data) { 
    if(err){ 
     console.log(err); 
     return res.end(); 
    } 
    const returnData = { 
     signedRequest: data, 
     url: `https://${process.env.S3_BUCKET}.s3.amazonaws.com/${fileName}` 
    }; 
    res.write(JSON.stringify(returnData)); 
    res.end(); 
    }); 
}); 

問題は、これは私が別のために同じ設定を使用してみましたまで、ユーザーのプロフィール画像をアップロードするために完璧に働いていましたさ応用。私はアプリケーションがデータを共有しているので、すべてアップロードのために同じバケットを使用する必要がある3つのHerokuアプリを実行しています。できるだけ早く私は(AWSキーとAWS秘密を再利用含む)同じ設定を使用してみましたBOTH私がアップロードしようとしたときにアプリがこのエラーを投げ始めた:

{ 
[CredentialsError: Missing credentials in config] 
    message: 'Missing credentials in config', 
    code: 'CredentialsError', 
    errno: 'ECONNREFUSED', 
    syscall: 'connect', 
    originalError: { 
    message: 'Could not load credentials from any providers', 
    code: 'CredentialsError', 
    errno: 'ECONNREFUSED', 
    originalError: { 
     code: 'ECONNREFUSED', 
     errno: 'ECONNREFUSED', 
     message: 'connect ECONNREFUSED *IP LISTED HERE*' 
    } 
    } 
} 

その結果、両方のフロントに未定義のJSONを返しますアプリの終わり。バケットのパーミッションをいくつかの異なる方法で再設定しようとしましたが、別のIAMユーザープロファイルを作成して2番目のアプリケーションで使用するようにしましたが、もう一度アップロードを受け入れることができません。誰かがこれを引き起こしているかもしれない考えを持っていますか?私の唯一の推測では、アプリケーションがAWSキーを共有できるようにすることによって、私はいくつかのパーミッションエラーを作成しましたが、それを修正する方法はわかりません。

いつもどんな助けもありがとうございます - ありがとう!

+0

間違いなく、ベストプラクティスではありませんが、複数のアプリケーションで同じ資格情報を使用すると、動作が停止するはずはありません。 'process.env.S3_BUCKET'が不正な値を返すように、あなたの環境を混乱させる可能性はありますか?表示されるIPアドレスは何ですか?あなたはそれを認識していますか? –

+0

@ Michael-sqlbot私はおそらく新しい設定でそれを見ることができましたが、最初のアプリは正常に動作していたので、全体の時間は変更されていないので、私は本当に混乱しています。別のアプリに同じ資格情報を追加すると、作業が停止しただけです。私は使用しているS3インスタンスのIPを見つけることができませんでしたので、それをチェックする方法はわかりませんが、バケット名を記録すると正しいと思われます。 – Chris

+0

@ Michael-sqlbot実際には分かりました。ちょうど私の運はいいですが、Herokuのチュートリアルは文字通りこのプロジェクトの途中で更新されたようです。どうやら、AWS KEYとSECRET変数はs3の初期化時に自動的にロードされるので、AWS.Configでそれらを定義しようとしています。助けてくれてありがとう! – Chris

答えて

0

古いバージョンのHerokuチュートリアルを使用していた人が抱えている問題については、アップデートされていて、AWS config varsが自動的にnew.aws.S3();にロードされるという問題がありました。私が上記したように、それらを定義する

const awsconfig = new AWS.Config({ 
    accessKeyId: process.env.AWS_KEY, 
    secretAccessKey: process.env.AWS_SECRET, 
    region: 'us-east-1' 
}); 

はエラーを投げていた - おそらくすでに設定されていたVARSを上書きします。これが誰かを助けることを願って!

関連する問題