# New AWS Modules: botocore and boto3 are now production ready.

**URL:** <https://forum.ansible.com/t/new-aws-modules-botocore-and-boto3-are-now-production-ready/18636>\
**Category:** Ansible Developer\
**Tags:** aws\
**Created:** [June 29, 2015, 5:59pm UTC](https://forum.ansible.com/t/new-aws-modules-botocore-and-boto3-are-now-production-ready/18636 "2015-06-29T17:59:13Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jonathan\_Davila](https://avatars.discourse-cdn.com/v4/letter/j/e0b2c6/32.png) [@Jonathan\_Davila](https://forum.ansible.com/u/Jonathan_Davila)\
**Post date:** [June 29, 2015, 5:59pm UTC](https://forum.ansible.com/t/new-aws-modules-botocore-and-boto3-are-now-production-ready/18636/1 "2015-06-29T17:59:13Z")

</div>

This is a follow up to a prior RFC: [https://groups.google.com/forum/#!searchin/ansible-devel/boto3/ansible-devel/BlruiipCVxk/KdvQI-wSSYUJ](https://groups.google.com/forum/#!searchin/ansible-devel/boto3/ansible-devel/BlruiipCVxk/KdvQI-wSSYUJ)

I am advocating for a standard that new AWS module pull requests should be written in boto3, with an acceptable fallback to botocore should particular functionality not exist/be possible at the boto3 level.

Boto, botocore, and boto3 can all live together and do not conflict with each other. That being said, I’ll be working on extending our ec2 module\_utils to include boto3 equivalent functions (and perhaps more) so the experience from a module development perspective can be consistent with the prior library.

Time permitting, I’d like to slowly but surely refactor existing AWS modules to use boto3 where it makes sense (like ec2\_tag where boto currently cannot tag ELBs).

Other input appreciated.

Cheers,

---

<div class="post-metadata">

**Author:** ![Greg\_DeKoenigsberg1](https://avatars.discourse-cdn.com/v4/letter/g/838e76/32.png) [@Greg\_DeKoenigsberg1](https://forum.ansible.com/u/Greg_DeKoenigsberg1)\
**Post date:** [June 29, 2015, 8:04pm UTC](https://forum.ansible.com/t/new-aws-modules-botocore-and-boto3-are-now-production-ready/18636/2 "2015-06-29T20:04:10Z")

</div>

A big +1 to this. It's been a question on my mind for a long time.

The question is, how to do it? Should we simply declare, "all new  
modules starting today must use boto3"?

Should we wait for Mr. Davila to finish his work on ec2 module\_utils,  
and when it's done, make the switch?

--g

---

<div class="post-metadata">

**Author:** ![Jonathan\_Davila](https://avatars.discourse-cdn.com/v4/letter/j/e0b2c6/32.png) [@Jonathan\_Davila](https://forum.ansible.com/u/Jonathan_Davila)\
**Post date:** [June 29, 2015, 8:26pm UTC](https://forum.ansible.com/t/new-aws-modules-botocore-and-boto3-are-now-production-ready/18636/3 "2015-06-29T20:26:00Z")

</div>

I think the module\_utils piece is the first step. Once that is done, then we can make an official decree. The authentication/connection pieces of utils are key. Equally, old modules would be able to start using boto3 as well and it would be my suggestion that “new feature” prs for pre-existing modules happen via the boto3 library where possible.

---

<div class="post-metadata">

**Author:** ![Rob\_White](https://avatars.discourse-cdn.com/v4/letter/r/71c47a/32.png) [@Rob\_White](https://forum.ansible.com/u/Rob_White)\
**Post date:** [January 5, 2016, 12:02pm UTC](https://forum.ansible.com/t/new-aws-modules-botocore-and-boto3-are-now-production-ready/18636/4 "2016-01-05T12:02:50Z")

</div>

With 2.0 nearly out the door, can we revisit this question?

There’s a few modules that I’d like to touch and the thought of a boto3 rewrite has crossed my mind.

Should we say now that from 2.1, new AWS modules should only use boto3? Should boto3 be required if you’re using any AWS modules post 2.0/2.1?

My answers to the above are emphatically yes!

---

<div class="post-metadata">

**Author:** ![Brian\_Coca](https://avatars.discourse-cdn.com/v4/letter/b/6de8d8/32.png) [@Brian\_Coca](https://forum.ansible.com/u/Brian_Coca)\
**Post date:** [January 5, 2016, 9:47pm UTC](https://forum.ansible.com/t/new-aws-modules-botocore-and-boto3-are-now-production-ready/18636/5 "2016-01-05T21:47:14Z")

</div>

I'm fine with new modules being boto3 only, but i want to keep  
compatibility for existing modules

---

<div class="post-metadata">

**Author:** ![Rob\_White](https://avatars.discourse-cdn.com/v4/letter/r/71c47a/32.png) [@Rob\_White](https://forum.ansible.com/u/Rob_White)\
**Post date:** [January 6, 2016, 9:36am UTC](https://forum.ansible.com/t/new-aws-modules-botocore-and-boto3-are-now-production-ready/18636/6 "2016-01-06T09:36:21Z")

</div>

I agree it's a good idea to keep compatibility but how should we approach  
adding new features to existing modules that are only possible with boto3?

---

<div class="post-metadata">

**Author:** ![Brian\_Coca](https://avatars.discourse-cdn.com/v4/letter/b/6de8d8/32.png) [@Brian\_Coca](https://forum.ansible.com/u/Brian_Coca)\
**Post date:** [January 6, 2016, 2:02pm UTC](https://forum.ansible.com/t/new-aws-modules-botocore-and-boto3-are-now-production-ready/18636/7 "2016-01-06T14:02:11Z")

</div>

make ONLY the new feature boto3 dependent and make it clear in the doc  
description THIS FEATURE REQURIES BOTO3

---

<div class="post-metadata">

**Author:** ![Jonathan\_Davila](https://avatars.discourse-cdn.com/v4/letter/j/e0b2c6/32.png) [@Jonathan\_Davila](https://forum.ansible.com/u/Jonathan_Davila)\
**Post date:** [January 11, 2016, 3:54pm UTC](https://forum.ansible.com/t/new-aws-modules-botocore-and-boto3-are-now-production-ready/18636/8 "2016-01-11T15:54:42Z")

</div>

Yep, exactly. This needs to be the standard now.

---

<div class="post-metadata">

**Author:** ![Rob\_White](https://avatars.discourse-cdn.com/v4/letter/r/71c47a/32.png) [@Rob\_White](https://forum.ansible.com/u/Rob_White)\
**Post date:** [January 12, 2016, 5:31am UTC](https://forum.ansible.com/t/new-aws-modules-botocore-and-boto3-are-now-production-ready/18636/9 "2016-01-12T05:31:37Z")

</div>

I created a PR for a AWS guidelines doc update
