# Soto for AWS

**URL:** <https://forums.swift.org/t/soto-for-aws/40806>\
**Category:** Pitches\
**Created:** [October 1, 2020, 1:24pm UTC](https://forums.swift.org/t/soto-for-aws/40806 "2020-10-01T13:24:47Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![adam-fowler](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/adam-fowler/32/9266_2.png) [@adam-fowler](https://forums.swift.org/u/adam-fowler)\
**Post date:** [October 1, 2020, 1:24pm UTC](https://forums.swift.org/t/soto-for-aws/40806/1 "2020-10-01T13:24:47Z")

</div>

### Pitch

Include [Soto for AWS](https://github.com/soto-project/soto) in the official and recommended SSWG projects.

### Motivation

Amazon Web Services (AWS) is the largest provider of cloud services. Many companies rely on the systems and automation they provide. These include storage, security, identity, messaging, databases, compute, machine learning and analytics to mention a few.

Amazon itself, provide SDKs to interact with their services using the languages Javascript, Go, Python, C#, PHP, C++, Java, Ruby but don't provide a first-party, fully comprehensive SDK in Swift. They do have aws-sdk-ios but that is written in Objective-C, which is not much use on non-Darwin platforms.

There are many Swift libraries that provide access to one or maybe two AWS services. Many teams working in the AWS ecosystem leverage multiple services, typically within the same application codebase. Having to deal with multiple libraries with different APIs, signing and serialisation code is not ideal.

The main purpose of the Soto project is to rectify these issues. The project provides access to all AWS services through a consistent API that is closely integrated with Swift NIO.

### Project composition

Soto is a Swift-based interface to Amazon Web Services. It supports Linux, macOS and iOS. It is split into three sections.

1. The core functionality repository [soto-core](https://github.com/soto-project/soto-core). This is a NIO 2.0 based module. Requests to the core return an `EventLoopFuture` that will be populated with results at a later point. The core module encodes requests, signs requests using credentials, sends them to AWS and then decodes the response.

2. [Soto](https://github.com/soto-project/soto) contains the service API files. Each AWS service has its own target which contains a service client object along with its operations and their input and output structures. The operations map to the REST api of the AWS service.

3. The Code Generator which builds the service API files mentioned in section 2. This uses the JSON model files Amazon provides (which are synced from Amazon's [aws-sdk-go](https://github.com/aws/aws-sdk-go/tree/master/models) repository) to generate Swift versions of the service APIs.

Is this something that people would be interested in including as a SSWG project?

---

<div class="post-metadata">

**Author:** ![0xTim](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/0xtim/32/27968_2.png) [@0xTim](https://forums.swift.org/u/0xTim)\
**Post date:** [October 1, 2020, 1:42pm UTC](https://forums.swift.org/t/soto-for-aws/40806/2 "2020-10-01T13:42:48Z")

</div>

Huge +1 to this - I've been using Soto in production on multiple projects for a long time now

---

<div class="post-metadata">

**Author:** ![lukasa](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/lukasa/32/1232_2.png) [@lukasa](https://forums.swift.org/u/lukasa)\
**Post date:** [October 1, 2020, 1:50pm UTC](https://forums.swift.org/t/soto-for-aws/40806/3 "2020-10-01T13:50:09Z")

</div>

I am strongly in favour of this library being adopted by the SSWG. Quite aside from the project itself, the scope of the APIs it must interoperate with mean that Soto requires the development and maintenance of tooling that produce additional value for the server-side Swift ecosystem. The vast majority of server-side developers would gain indirect benefit from the existence of Soto, even if they never used it themselves.

Firm +1.

---

<div class="post-metadata">

**Author:** ![t089](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/t089/32/40449_2.png) [@t089](https://forums.swift.org/u/t089)\
**Post date:** [October 2, 2020, 8:17pm UTC](https://forums.swift.org/t/soto-for-aws/40806/4 "2020-10-02T20:17:13Z")

</div>

The framework is really well done and works like a charm! +1

---

<div class="post-metadata">

**Author:** ![fabianfett](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/fabianfett/32/10042_2.png) [@fabianfett](https://forums.swift.org/u/fabianfett)\
**Post date:** [October 6, 2020, 10:14am UTC](https://forums.swift.org/t/soto-for-aws/40806/5 "2020-10-06T10:14:56Z")

</div>

+1 from my side as well. I'm using Soto in a number of projects and it works flawless – especially in connection with the AWS Lambda Runtime.

Disclosure: I've contributed to Soto.

---

<div class="post-metadata">

**Author:** ![jonny](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/jonny/32/7075_2.png) [@jonny](https://forums.swift.org/u/jonny)\
**Post date:** [October 6, 2020, 5:41pm UTC](https://forums.swift.org/t/soto-for-aws/40806/6 "2020-10-06T17:41:45Z")

</div>

+1 great work from Adam

---

<div class="post-metadata">

**Author:** ![pvieito](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/pvieito/32/33613_2.png) [@pvieito](https://forums.swift.org/u/pvieito)\
**Post date:** [October 6, 2020, 8:32pm UTC](https://forums.swift.org/t/soto-for-aws/40806/7 "2020-10-06T20:32:51Z")

</div>

Strong +1

---

<div class="post-metadata">

**Author:** ![stsandro](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/stsandro/32/12159_2.png) [@stsandro](https://forums.swift.org/u/stsandro)\
**Post date:** [October 7, 2020, 10:12am UTC](https://forums.swift.org/t/soto-for-aws/40806/8 "2020-10-07T10:12:39Z")

</div>

+1  
I've played around with Swift AWS Lambda Runtime and I'm almost always using Soto to integrate with other AWS services. It's quick to learn and I haven't had any problems so far. In the next two weeks or so I'll be releasing my first production workload with Swift AWS Lambda Runtime and of course Soto.

Thanks to @fabianfett for his great tutorials on Swift AWS Lambda Runtime and special thanks to @adam-fowler for his great tutorials and the work on Soto 👍
