I'm working on getting my Rails app interacting with the AWS Comprehend service for text entity extraction. I'm using the aws-sdk-comprehend
gem. I have successfully gotten my app working with the AWS Rekognition service for image analysis using the aws-sdk-rekognition
gem.
I can't seem to get the AWS Comprehend authentication correct as all of my calls result in an Aws::Comprehend::Errors::InvalidRequestException
.
I have all of the following ENV variables set:
- AWSAccessKeyId
- AWSSecretKey
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
My code looks something like this:
class MyApp::Aws::ComprehendService < MyApp::ServiceBase
def call
@credentials = Aws::Credentials.new(ENV['AWSAccessKeyId'], ENV['AWSSecretKey'])
@client = Aws::Comprehend::Client.new(region: "us-west-1", credentials: credentials)
@client.detect_entities({text: "this is a simply little blob of text", language_code: "en"})
end
end
This resulted in Aws::Comprehend::Errors::InvalidRequestException
. So I also tried:
class MyApp::Aws::ComprehendService < MyApp::ServiceBase
def call
# use ENV credential format I've seen in examples...
@credentials = Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY'])
@client = Aws::Comprehend::Client.new(region: "us-west-1", credentials: credentials)
@client.detect_entities({text: "this is a simply little blob of text", language_code: "en"})
end
end
I found an example that didn't use the @credential
approach. The example claimed "The initialize method will load the credentials environment variables by itself". So I tried this:
class MyApp::Aws::ComprehendService < MyApp::ServiceBase
def call
# ignore setting the credentials
@client = Aws::Comprehend::Client.new(region: "us-west-1")
@client.detect_entities({text: "this is a simply little blob of text", language_code: "en"}).
end
end
This also resulted in Aws::Comprehend::Errors::InvalidRequestException
.
Can you see anything I'm doing wrong? Has anyone had success in using this gem to interact with the Comprehend API?