Skip to content
Curl like simplicity to access AWS resources with AWS Signature Version 4 request signing.
Python Other
  1. Python 99.0%
  2. Other 1.0%
Branch: master
Clone or download
okigan Merge pull request #70 from MarkAtwood/master
Create LICENSE, use MIT
Latest commit 83af316 Oct 4, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
awscurl Do not take existing headers as argument Sep 21, 2019
tests Do not take existing headers as argument Sep 21, 2019
.gitignore print response content as text Oct 30, 2017
Dockerfile Removing is_text function and using a flag to send the payload as binary Jun 9, 2018
LICENSE Create LICENSE, use MIT Oct 2, 2019 add publish script Jan 17, 2018
requirements.txt fix up url parsing (affects websocket connections url) Jun 22, 2019
setup.cfg #34 Return of make_request Apr 4, 2018 Merge pull request #65 from okigan/feature/web-socket-support Jun 29, 2019

awscurl Build Status

Curl like tool with AWS Signature Version 4 request signing.


Requests to AWS API must be signed (see Signing AWS API Requests) automates the process of signing and allows to make requests to AWS as simple as standard curl command.


$ pip install awscurl

Installation from source (bleeding edge)

$ pip install git+

Installation via Docker

Assumes Docker is installed and the working directory is project root of the cloned repo. Result will be an image named $USER/awscurl.

$ docker build --rm -t $USER/awscurl .

On OS X run via a shell script in your $PATH or directly with something like the following:


export AWS_DIR="${AWS_DIR:-$HOME/.aws}"
mkdir -p $AWS_DIR

docker run --rm -it -v "$AWS_DIR:/root/.aws" "$USER/awscurl:latest" "$@"


  • Call S3: List bucket content

    $ awscurl --service s3
  • Call EC2:

    $ awscurl --service ec2 ''
  • Call API Gateway:

    $ awscurl --service execute-api -X POST -d @request.json \


usage: awscurl [-h] [-v] [-i] [-X REQUEST] [-d DATA] [-H HEADER]
                  [--region REGION] [--service SERVICE]
                  [--profile AWS_PROFILE]
                  [--access_key ACCESS_KEY] [--secret_key SECRET_KEY]
                  [--security_token SECURITY_TOKEN]

Curl AWS request signing If an arg is specified in more than one place, then
command-line values override environment variables which override defaults.

positional arguments:

optional arguments:
  -h, --help            show this help message and exit
  -v, --verbose         verbose flag (default: False)
  -i, --include         include headers in response (default: False)
  -X REQUEST, --request REQUEST
                        Specify request command to use (default: GET)
  -d DATA, --data DATA  HTTP POST data (default: )
  -H HEADER, --header HEADER
                        HTTP POST data (default: None)
  --region REGION       AWS region (default: us-east-1)
  --profile PROFILE     [env var: AWS_PROFILE] (default: default)
  --service SERVICE     AWS service (default: execute-api)
  --access_key ACCESS_KEY
                        [env var: AWS_ACCESS_KEY_ID] (default: None)
  --secret_key SECRET_KEY
                        [env var: AWS_SECRET_ACCESS_KEY] (default: None)
  --security_token SECURITY_TOKEN
                        [env var: AWS_SECURITY_TOKEN] (default: None)

If you do not specify the --access_key or --secret_key (or environment variables), awscurl will attempt to use the credentials you set in ~/.aws/credentials. If you do not specify a --profile or AWS_PROFILE, awscurl uses default.

Related projects

You can’t perform that action at this time.