2022-01-20 20:18:47 +00:00
|
|
|
# AWS SDK for Zig (zig native branch)
|
2021-04-27 18:24:01 +00:00
|
|
|
|
2022-01-20 15:47:14 +00:00
|
|
|
[![Build Status](https://drone.lerch.org/api/badges/lobo/aws-sdk-for-zig/status.svg?ref=refs/heads/master)](https://drone.lerch.org/api/badges/lobo/aws-sdk-for-zig/)
|
2022-01-11 19:19:40 +00:00
|
|
|
|
2021-09-06 22:57:46 +00:00
|
|
|
This SDK currently supports all AWS services except EC2 and S3. These two
|
2022-02-10 23:29:51 +00:00
|
|
|
services only support XML, and zig 0.9.0 and master both trigger compile
|
|
|
|
errors while incorporating the XML parser in conjunction with a process
|
|
|
|
to fill the types. S3 also requires some plumbing tweaks in the signature
|
|
|
|
calculation. Examples of usage are in src/main.zig.
|
2021-04-27 18:24:01 +00:00
|
|
|
|
2022-01-20 20:18:47 +00:00
|
|
|
Current executable size for the demo is 953k (90k of which is the AWS PEM file)
|
|
|
|
after compiling with -Drelease-safe and
|
|
|
|
[stripping the executable after compilation](https://github.com/ziglang/zig/issues/351).
|
|
|
|
This is for x86_linux. Tested targets:
|
|
|
|
|
|
|
|
* x86_64-linux
|
|
|
|
* riscv64-linux
|
|
|
|
* aarch64-linux
|
2022-01-20 20:31:45 +00:00
|
|
|
* x86_64-windows
|
2022-01-20 20:18:47 +00:00
|
|
|
* arm-linux
|
2022-02-09 06:36:36 +00:00
|
|
|
* aarch64-macos
|
|
|
|
* x86_64-macos
|
2021-04-27 18:24:01 +00:00
|
|
|
|
2022-02-09 06:36:36 +00:00
|
|
|
Tested targets are built, but not continuously tested, by CI.
|
2022-01-20 20:31:45 +00:00
|
|
|
|
2021-04-27 18:24:01 +00:00
|
|
|
## Building
|
|
|
|
|
2022-01-11 19:19:40 +00:00
|
|
|
`zig build` should work. It will build the code generation project, run
|
|
|
|
the code generation, then build the main project with the generated code.
|
2021-04-27 18:24:01 +00:00
|
|
|
|
2022-01-11 19:19:40 +00:00
|
|
|
First time build should use `zig build -Dfetch` to fetch dependent packages
|
|
|
|
(zfetch and friends).
|
2021-04-27 18:24:01 +00:00
|
|
|
|
|
|
|
## Running
|
|
|
|
|
2022-01-11 19:19:40 +00:00
|
|
|
This library mimics the aws c libraries for it's work, so it operates like most
|
|
|
|
other 'AWS things'. main.zig gives you a handful of examples for working with services.
|
2021-04-27 18:24:01 +00:00
|
|
|
For local testing or alternative endpoints, there's no real standard, so
|
|
|
|
there is code to look for `AWS_ENDPOINT_URL` environment variable that will
|
2022-01-20 15:41:35 +00:00
|
|
|
supersede all other configuration. Note that an alternative endpoint may
|
|
|
|
require passing in a client option to specify an different TLS root certificate
|
|
|
|
(pass null to disable certificate verification).
|
|
|
|
|
2022-02-10 23:29:51 +00:00
|
|
|
The [old branch](https://github.com/elerch/aws-sdk-for-zig/tree/aws-crt) exists
|
|
|
|
for posterity, and supports x86_64 linux. This branch is recommended moving
|
|
|
|
forward.
|
2021-04-27 18:24:01 +00:00
|
|
|
|
2022-01-20 03:37:17 +00:00
|
|
|
## Limitations
|
|
|
|
|
|
|
|
There are many nuances of AWS V4 signature calculation. S3 is not supported
|
2022-02-10 23:29:51 +00:00
|
|
|
because it uses many of these test cases. WebIdentityToken is not yet
|
|
|
|
implemented.
|
2022-01-20 03:37:17 +00:00
|
|
|
|
2021-04-27 18:24:01 +00:00
|
|
|
TODO List:
|
|
|
|
|
2022-02-10 23:29:51 +00:00
|
|
|
* To work around compiler issues, the best option may be to convert from
|
|
|
|
Xml to json, then parse from there. This will be pursued first. It may need
|
|
|
|
to wait for zig 0.10.0 when self-hosted compiler is likely to be completed
|
|
|
|
(zig 0.10.0 eta May 2022) discovered. If we need to wait, S3, EC2 and other
|
|
|
|
restXml protocols will be blocked.
|
2021-09-06 22:57:46 +00:00
|
|
|
* Implement [AWS restXml protocol](https://awslabs.github.io/smithy/1.0/spec/aws/aws-restxml-protocol.html).
|
|
|
|
Includes S3. Total service count 4. This may be blocked due to the same issue as EC2.
|
|
|
|
* Implement [AWS EC2 query protocol](https://awslabs.github.io/smithy/1.0/spec/aws/aws-ec2-query-protocol.html).
|
2022-01-20 03:37:17 +00:00
|
|
|
Includes EC2. Total service count 1. This may be blocked on a compiler bug,
|
2022-02-10 23:29:51 +00:00
|
|
|
though has not been tested with zig 0.9.0. More details and llvm ir log can be found in the
|
2021-09-06 22:57:46 +00:00
|
|
|
[XML branch](https://git.lerch.org/lobo/aws-sdk-for-zig/src/branch/xml).
|
2022-01-11 19:19:40 +00:00
|
|
|
* Implement sigv4a signing
|
2022-02-10 17:45:18 +00:00
|
|
|
* Implement jitter/exponential backoff
|
|
|
|
* Implement timeouts and other TODO's in the code
|
|
|
|
* Add option to cache signature keys
|
2021-04-27 18:24:01 +00:00
|
|
|
|
|
|
|
Compiler wishlist/watchlist:
|
|
|
|
|
|
|
|
* [Merge PR to allow stripping -static](https://github.com/ziglang/zig/pull/8248)
|
|
|
|
* [comptime allocations](https://github.com/ziglang/zig/issues/1291) so we can read files, etc (or is there another way)
|