ヘイ!
私は昨日からこの問題を抱えており、解決策を見つけるのに苦労しています。
S3バケットに何かを送信しようとしていますが、試してみるとこのメッセージがコンソールに表示されます:
{ [CredentialsError: Missing credentials in config]
message: 'Missing credentials in config',
code: 'CredentialsError',
errno: 'Unknown system errno 64',
syscall: 'connect',
time: Thu Oct 09 2014 14:03:56 GMT-0300 (BRT),
originalError:
{ message: 'Could not load credentials from any providers',
code: 'CredentialsError',
errno: 'Unknown system errno 64',
syscall: 'connect',
time: Thu Oct 09 2014 14:03:56 GMT-0300 (BRT),
originalError:
{ code: 'Unknown system errno 64',
errno: 'Unknown system errno 64',
syscall: 'connect',
message: 'connect Unknown system errno 64' } } }
そして、これは私のコードです:
var s3 = new AWS.S3();
AWS.config.loadFromPath('./AwsConfig.json');
s3.putObject(params, function(err) {
if(err) {
console.log(err);
}
else {
console.log("Succes");
}
});
資格情報は正しいです。誰が何ができるか知っていますか?私は検索しましたが、どこにも解決策が見つかりません。
私の資格情報(偽物):
{
"accessKeyId": "BLALBLALBLALLBLALB",
"secretAccessKey": "BLABLALBLALBLALBLLALBLALLBLALB",
"region": "sa-east-1",
"apiVersions": {
"s3": "2006-03-01",
"ses": "2010-12-01"
}
}
編集:
ヘルプについては、すべてのコード:
var fs = require('fs');
var AWS = require('aws-sdk');
var s3 = new AWS.S3();
AWS.config.loadFromPath('./MYPATH.json'); //this is my path to the aws credentials.
var params = {
Bucket: 'testing-dev-2222',
Key: file,
Body: fs.createReadStream(file)
};
s3.putObject(params, function(err) {
if(err) {
console.log(err);
}
else {
console.log("Success");
}
});
新しいエラー:
Error uploading data: { [PermanentRedirect: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.]
message: 'The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.',
code: 'PermanentRedirect',
time: Thu Oct 09 2014 14:50:02 GMT-0300 (BRT),
statusCode: 301,
retryable: false }
パラメータをハードコーディングして、エラーが再度表示されるかどうかを確認してください。
AWS.config.update({
accessKeyId: "YOURKEY",
secretAccessKey: "YOURSECRET",
"region": "sa-east-1" <- If you want send something to your bucket, you need take off this settings, because the S3 are global.
}); // for simplicity. In prod, use loadConfigFromFile, or env variables
var s3 = new AWS.S3();
var params = {
Bucket: 'makersquest',
Key: 'mykey.txt',
Body: "HelloWorld"
};
s3.putObject(params, function (err, res) {
if (perr) {
console.log("Error uploading data: ", err);
} else {
console.log("Successfully uploaded data to myBucket/myKey");
}
});
2行を逆にするまで、同じ問題がありました。
var s3 = new AWS.S3();
AWS.config.loadFromPath('./AwsConfig.json');
これに:
AWS.config.loadFromPath('./AwsConfig.json');
var s3 = new AWS.S3();
Aws configファイルのユーザーを特定のユーザーから[デフォルト]に変更してみてください。
$nano .aws/credentials
[default]
aws_access_key_id = xyz
aws_secret_access_key = xyz
このファイルがない場合は、作成してキーを取得するか、aws iamユーザーキーから新しいファイルを生成します。
同じエラーが発生していました。しかし、私は問題を見つけました。間違った環境変数名を使用していました。 NodeJSからS3まで、次の変数名を使用する必要があります。
process.env.AWS_ACCESS_KEY_ID = 'XXXXXXXXXXXXXXXXXXX';
process.env.AWS_SECRET_ACCESS_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXX';
process.env.AWS_REGION = 'us-east-1';
変数名を修正すると、正常に実行されました。よろしく、ディパンカー
私は上記のオプションを試しましたが、それでも動作しませんでしたので、新しい設定オブジェクトを作成し、以下のコードが動作しました
AWS.config = new AWS.Config();
AWS.config.accessKeyId = "AccessKey";
AWS.config.secretAccessKey = "SecretAccessKey";
これで私の問題は解決しました。
Cognito Consoleのサンプルコードを使用して、ドキュメントに追加しました。
IDプールでの認証されていないアクセスを有効にしました。
最も重要な
Cognitoサービスが役割を引き受けることができるように、unauth役割の信頼関係ポリシーを修正しました。
ファイルに資格情報をハードコーディングしないでください。
ルートディレクトリ以外の場所から設定ファイルをロードしようとしたときに、同様の問題が発生しました。
Jsonファイルをノードにネイティブにロードし、解析されたオブジェクトをAWS.config.update()
に渡すだけでした。
import AWS from 'aws-sdk'
import config from '../aws.json'
AWS.config.update(config);