0

I'm trying to create an AWS client for IOT following this article: How can I publish to a MQTT topic in a Amazon AWS Lambda function?

client = boto3.client('iot-data', region_name='us-east-1')

However I need to set a profile so that boto3 picks the correct credentials from my ~/.aws/credentials file.

The articles that describe how to do this (How to choose an AWS profile when using boto3 to connect to CloudFront) use Session instead of creating a client. However iot-data is not a "resource" that you can get from Session.

boto_session = boto3.Session(profile_name='my-profile')
boto_client = boto_session.resource('iot-data', region_name='us-west-1')

When I try the above I get the error:

Consider using a boto3.client('iot-data') instead of a resource for 'iot-data'

And we've achieved full catch-22 status. How can I get an appropriate IOT client using an AWS profile?

David Parks
  • 30,789
  • 47
  • 185
  • 328

1 Answers1

1

IoTDataPlane does not have resource. You can only use client with the IoTDataPlane:

boto_session.client('iot-data', region_name='us-west-1')
Marcin
  • 215,873
  • 14
  • 235
  • 294