I have been trying to experiment with the AWS Rekognition but I have been encountering a really weird bug. I keep getting a validation error but I have no Idea why.
Here is my code:
const client = new RekognitionClient({
region: "us-east-2",
credentials: {
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
},
});
const image = await imageToBase64("../tests/photos/testImage.jpg");
// const image = fs.readFileSync("../tests/photos/testImage.jpg");
// console.log(image);
const params = {
Image: {
Bytes: image,
},
};
console.log(JSON.stringify(params));
const command = new RecognizeCelebritiesCommand(JSON.stringify(params));
console.log(command);
try {
const data = await client.send(command);
} catch (e) {
console.log(e.message);
}
Here is the console log of the command variable:
RecognizeCelebritiesCommand {
middlewareStack: {
add: [Function: add],
addRelativeTo: [Function: addRelativeTo],
clone: [Function: clone],
use: [Function: use],
remove: [Function: remove],
removeByTag: [Function: removeByTag],
concat: [Function: concat],
applyToStack: [Function: cloneTo],
identify: [Function: identify],
resolve: [Function: resolve]
},
input: '{"Image":{"Bytes":"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'... 26614 more characters
}
I am getting "validation error detected: Value null at 'image' failed to satisfy constraint: Member must not be null" when I run this code. I have tried passing the image in as a bitmap and base64 string to no avail. The image that I am using is less than 5Mbs and is a jpg file.
Thanks!
Look at the JS rekognition example in AWS Github. This shows you how to successfully pass an image to a rekognition operation using the AWS SDK for JavaScript version 3 API.
See:
https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javascriptv3/example_code/rekognition/estimate-age-example/src/estimate-age.js
Related
I came across a strange issue while using aws-sdk package in my app in android. We are using this in order to sign and upload pictures to S3. In iOS everything is working as expected but on android it return with this error
[MissingRequiredParameter: Missing required key 'Bucket' in params]
This is our setup
export const s3bucket = new S3({
accessKeyId: S3_ACCESS_KEY,
secretAccessKey: S3_SECRET_KEY,
Bucket: 'assets',
signatureVersion: 'v4',
});
Here we call the function
s3bucket.createBucket(e => {
// With this setup, each time the user uploads an image, will be overwritten
// To prevent this, use a different Key each time.
// This won't be needed if they're uploading their avatar, hence the filename, userAvatar.js.
const params = {
Bucket: 'assets',
Key: file.name, // type is not required
Body: base64Data,
ACL: 'public-read',
ContentEncoding: 'base64', // required
ContentType: contentType, // required. Notice the back ticks
};
s3bucket.upload(params, (err, data) => {
console.log(err, data);
if (err) {
alert('We are sorry there seem to be a problem. Please try again!');
}
if (currentIndex === -1) {
const newDocument = {
path: data.Location,
page: allDocumentPages.length + 1,
status: '',
id_type: allDocumentPages[0].id_type,
};
setAllDocumentPages([...allDocumentPages, newDocument]);
} else {
const documentToUpdate = allDocumentPages[currentIndex];
documentToUpdate.path = data.Location;
documentToUpdate.status = '';
}
setLoadingIndex(null);
});
});
Is there anything I miss?
I believe the missing 'Bucket' parameter is coming from the createBucket method, where its params object was not defined, as seen from the S3 documentation. You should re-define it as such.
export const s3bucket = new S3({
accessKeyId: S3_ACCESS_KEY,
secretAccessKey: S3_SECRET_KEY,
// Bucket: 'assets', <-- this will be ignored while defining the S3 options.
signatureVersion: 'v4',
});
// added a `params1` variable since `params` has been taken up.
var params1 = {
Bucket: 'assets'
};
s3bucket.createBucket(params1, e => {
...
};
I see the following error occasionally in my ec2 instance that uses DynamoDB heavily
{ message: 'Could not load credentials from any providers',
code: 'CredentialsError',
errno: 'ECONNREFUSED',
syscall: 'connect',
address: '169.254.169.254',
port: 80,
time: 2018-07-05T10:02:37.690Z,
originalError:
{ code: 'ECONNREFUSED',
errno: 'ECONNREFUSED',
syscall: 'connect',
address: '169.254.169.254',
port: 80,
message: 'connect ECONNREFUSED 169.254.169.254:80' } } }
The way I am using the AWS sdk to connect and get data from DynamoDB is like the following
'use strict'
const BluebirdPromise = require('bluebird')
AWS.config.setPromisesDependency(BluebirdPromise)
const DocumentClient = AWS.DynamoDB.DocumentClient
class DynamoOne {
get({
key
}) {
return new DocumentClient().get({ // creating new instance every time i want to get Item
Key: key,
TableName: 'TABLE_NAME',
ConsistentRead: consistent,
})
.promise()
.catch(e => console.trace(key, e))
}
}
new DynamoOne.get({
id: 1
}).then((item) => {
console.log(1, item)
})
Is this the correct way to use it ? or I should create new DocumentClient() once and use it all over , like the following code
'use strict'
const BluebirdPromise = require('bluebird')
AWS.config.setPromisesDependency(BluebirdPromise)
const DocumentClient = new AWS.DynamoDB.DocumentClient() // creating new instance once
class DynamoTwo {
get({
key
}) {
return DocumentClient.get({ // reuse DocumentClient
Key: key,
TableName: 'TABLE_NAME',
ConsistentRead: consistent,
})
.promise()
.catch(e => console.trace(key, e))
}
}
new DynamoTwo.get({
id: 1
}).then((item) => {
console.log(1, item)
})
Which one is the correct one DynamoOne or DynamoTwo ?
After researching and asking in github aws repo
I found that the correct way is to use DynamoTwo
I am reading data from read replica of Aurora and putting it into the DynamoDB. I getting data from RDS correctly but facing problems while inserting it into DynamoDB. I am sharing my code and error message please guide me....
var AWS = require("aws-sdk");
var mysql = require('mysql');
const client = new AWS.DynamoDB.DocumentClient({region : 'eu-west-1'});
var connection = mysql.createPool({
host : "**********",
user : "****",
password : "*****",
database : "mydb",
port : "3306"
});
exports.handler = (event, context, callback) => {
connection.query('select * from demo where id=2;', function (error, results, fields) {
if (error) {
if (error) throw error;
} else {
var data = {results};
var params = {
Item:{
test_id:data.id,
name:data.name,
result:data.result
},
TableName: 'demo_rds_dynamoDB'
};
connection.end(function (err) {
callback(err, client.put(params, function(error,data){
if(error){
callback(error,null);
}else{
callback(null,data);
}
})
);
});
}
});
};
Following is the data I am getting from Aurora and I want to put in DynamoDB
Response:
[
{
"id": 2,
"name": "Display",
"result": "Pass"
}
]
And the response m getting is as follow and sometimes i get error as Cannot read property "id" undefined,
Response:
{
"errorMessage": "Converting circular structure to JSON",
"errorType": "TypeError",
"stackTrace": []
}
Request ID:
"896a64e3-573e-11e8-bb94-67c4be71eb3d"
Function Logs:
START RequestId: 896a64e3-573e-11e8-bb94-67c4be71eb3d Version: $LATEST
Unable to stringify response body as json: Converting circular structure to JSON: TypeError
at Object.stringify (native)
Item:{
test_id:results[0].id,
name:results[0].name,
result:results[0].result
}
results[0].columnname
I am using crypto and oauth-1.0a from nmp in ionic2 application. I want to access WP-API which is correctly set to handle authentication, I tested this using Postman.
Http.Get results in the following error:
{
"_body": {
"isTrusted": true
},
"status": 0,
"ok": false,
"statusText": "",
"headers": {},
"type": 3,
"url": null
}
The options generated that I pass as argument to Http.Get are as follows:
{“method”:0,“headers”:{“Authorization”:“OAuth oauth_consumer_key=”",
oauth_nonce=“jSZGPwkj4quRGMb0bhBLYKwmc3BGfrQw”, oauth_signature=“x3zseS3XTFBLMsNDLXC4byn2UDI%3D”,
oauth_signature_method=“HMAC-SHA1”, oauth_timestamp=“1522414816”,
oauth_token="",
oauth_version=“1.0"”},“body”:null,“url”:"",“params”:{“rawParams”:"",“queryEncoder”:{},“paramsMap”:{}},“withCredentials”:null,“responseType”:null}
Part of code:
this.oauth = new OAuth({
consumer: {
key: this.apiconstant.consumerkey,
secret: this.apiconstant.consumersecret
},
signature_method: ‘HMAC-SHA1’,
hash_function: hash_function_sha1,
realm:’’
});
let request_data = {
url: ‘’,
method: ‘GET’
};
let token={
key: this.apiconstant.token,
secret: this.apiconstant.tokensecret
}
//This part doesn’t seem to work
this.authkey = this.oauth.authorize(request_data,token);
this.keyoauth = new URLSearchParams();
for (let param in this.authkey) {
this.keyoauth.set(param, this.authkey[param]);
}
let options = new RequestOptions({
method: ‘GET’,//request_data.method
url: ‘’,
headers: this.oauth.toHeader(this.oauth.authorize(request_data,token)),
search: this.keyoauth
});
this.http.get(’’,options)
.map(res => res.json()).subscribe(data=>{
console.log(‘Resulting data’ + JSON.stringify(data));
},
error=>{
console.log(‘Got error’+JSON.stringify(error));
});
//Error part executed
What am I missing here? I’m testing my app on android device. Without authentication I get desired results from the WP-API (Wordpress), that is if the Oauth is disabled on WP-API.
Please help! This is my second day on this. I should also let you know I’m new on these technologies but I’m able to research and understand how they work.
I've created an auth strategy using bell and another using hapi-auth-cookie. However, when I try to set a session request.auth.session is undefined. Can someone help me figure out where I am going wrong?
My route:
module.exports = [
{
method: 'GET',
path: '/create-an-account',
config: {
auth: {
strategy: 'auth0',
mode: 'try'
}
},
handler: function(request, reply) {
var credentials = request.auth.credentials;
request.auth.session.set(credentials);
return reply.view('create-an-account');
}
}
]
My auth strategies:
exports.register = function (server, options, next) {
server.register([Bell, Cookie], function (err) {
server.auth.strategy('auth0', 'bell', {
provider: 'auth0',
config: {
domain: process.env.AUTH0_CLIENT_DOMAIN,
},
password: 'cookie_encryption_password_secure',
clientId: process.env.AUTH0_CLIENT_ID,
clientSecret: process.env.AUTH0_CLIENT_SECRET,
isSecure: false // For developing locally
});
server.auth.strategy('session', 'cookie', {
password: 'cookie_encryption_password_secure',
cookie: 'sid',
redirectTo: '/create-an-account',
redirectOnTry: false,
isSecure: false
});
});
return next();
};
We had this issue a little while ago on one of our projects. Hapi-auth-cookie have changed their documentation so they longer use request.auth.session.set(credentials);
Here's a link to the commit
If you change that line to request.cookieAuth.set() instead it should work. A lot of the examples online seem to use the old example which is how we missed it first time.
This was also picked up in another SO answer here > request.auth.session.set(user_info) not working HapiJS