Revival of AWS.jl

Overview

I’m excited to finally announced the release of AWS.jl@1.0.0 today! The revival of this package is meant to take the state of using AWS in Julia to the next level.

AWS.jl is a direct replacement to the low-level functionality of AWSCore.jl and the high-level functionality of AWSSDK.jl. It also features daily automated API updates to ensure that you’re always using the latest version and have the ability to use the newest AWS services within 24hours of their release. Behind the scenes the code has been simplified down substantially to make maintaining the package a lot easier.

Low-level functionality (AWSCore.jl)

AWS.jl uses the same interface as AWSCore.jl does, with some small changes.
Responses now come back as a LittleDict by default, alternatively you can pass in an AbstractDict for a specific response type.

AWSCore.jl

using AWSCore.Services: s3
s3("GET", "/mattbr-test-bucket")

XMLDict.XMLDictElement with 6 entries:
  "Name"        => "mattbr-test-bucket"
  "Prefix"      => ""
  "Marker"      => ""
  "MaxKeys"     => "1000"
  "IsTruncated" => "false"
  "Contents"    => XMLDict.XMLDictElement[...]

AWS.jl

using AWS.AWSServices: s3
s3("GET", "/mattbr-test-bucket", Dict("response_dict_type"=>Dict))

Dict{Union{String, Symbol},Any} with 6 entries:
  "MaxKeys"     => "1000"
  "Marker"      => Dict{Union{String, Symbol},Any}()
  "IsTruncated" => "false"
  "Prefix"      => Dict{Union{String, Symbol},Any}()
  "Name"        => "mattbr-test-bucket"
  "Contents"    => Any[Dict{Union{String, Symbol},Any}(...)

High-level functionality (AWSSDK.jl)

AWS.jl uses a similar interface for high-level functions as AWSSDK.jl does.
All service function documentation is included in src/services/${service}.jl so you never need to browse through the AWS documentation.

A couple changes compared to AWSSDK.jl:

  1. Any parameters which are idempotent tokens will function like AWS CLI does, these will be auto-generated UUIDs so you do not need to pass in an extra parameter.

  2. Required Arguments are defined in the high-level functions. This means you can use Julias code-lookup to see what is required for a request:

AWSSDK.jl

using AWSSDK: EC2

julia> EC2.terminate_instances(

terminate_instances(aws::Dict{Symbol,Any}; args...) in AWSSDK.EC2 at /Users/mattbr/.julia/packages/AWSSDK/tWnpi/src/EC2.jl:20262
terminate_instances() in AWSSDK.EC2 at /Users/mattbr/.julia/packages/AWSSDK/tWnpi/src/EC2.jl:20262
terminate_instances(aws::Dict{Symbol,Any}, args) in AWSSDK.EC2 at /Users/mattbr/.julia/packages/AWSSDK/tWnpi/src/EC2.jl:20264
terminate_instances(args) in AWSSDK.EC2 at /Users/mattbr/.julia/packages/AWSSDK/tWnpi/src/EC2.jl:20266

AWS.jl

using AWS
@service EC2

julia> EC2.terminate_instances(

terminate_instances(InstanceId; aws_config) in Main.EC2 at /Users/mattbr/.julia/dev/AWS.jl/src/services/ec2.jl:6921
terminate_instances(InstanceId, args::AbstractDict{String,var"#s15"} where var"#s15"; aws_config) in Main.EC2 at /Users/mattbr/.julia/dev/AWS.jl/src/services/ec2.jl:6922
37 Likes