175 lines
4.4 KiB
ReStructuredText
175 lines
4.4 KiB
ReStructuredText
.. _server_mode:
|
|
|
|
.. role:: bash(code)
|
|
:language: bash
|
|
|
|
================================
|
|
Non-Python SDK's / Server Mode
|
|
================================
|
|
|
|
Moto has a stand-alone server mode. This allows you to use Moto with any of the official AWS SDK's.
|
|
|
|
Install the required dependencies using:
|
|
|
|
.. code:: bash
|
|
|
|
pip install moto[server]
|
|
|
|
|
|
You can then start it like this:
|
|
|
|
.. code:: bash
|
|
|
|
$ moto_server
|
|
|
|
You can also pass the port:
|
|
|
|
.. code-block:: bash
|
|
|
|
$ moto_server -p3000
|
|
* Running on http://127.0.0.1:3000/
|
|
|
|
If you want to be able to use the server externally you can pass an IP
|
|
address to bind to as a hostname or allow any of your external
|
|
interfaces with 0.0.0.0:
|
|
|
|
.. code-block:: bash
|
|
|
|
$ moto_server -H 0.0.0.0
|
|
* Running on http://0.0.0.0:5000/
|
|
|
|
Please be aware this might allow other network users to access your
|
|
server.
|
|
|
|
To use Moto in your tests, you can pass the `endpoint_url`-parameter to the SDK of your choice.
|
|
|
|
Examples
|
|
--------
|
|
|
|
In Python:
|
|
|
|
.. code-block:: python
|
|
|
|
boto3.resource(
|
|
service_name='s3',
|
|
region_name='us-west-1',
|
|
endpoint_url='http://localhost:5000'
|
|
)
|
|
|
|
In Java:
|
|
|
|
.. code-block:: java
|
|
|
|
AmazonSQS sqs = new AmazonSQSClient();
|
|
sqs.setRegion(Region.getRegion(Regions.US_WEST_2));
|
|
sqs.setEndpoint("http://localhost:5000");
|
|
|
|
In Scala:
|
|
|
|
.. code-block:: scala
|
|
|
|
val region = Region.getRegion(Regions.US_WEST_2).getName
|
|
val serviceEndpoint = "http://localhost:5000"
|
|
val config = new AwsClientBuilder.EndpointConfiguration(serviceEndpoint, region)
|
|
val amazonSqs = AmazonSQSClientBuilder.standard().withEndpointConfiguration(config).build
|
|
|
|
In Terraform:
|
|
|
|
.. code-block::
|
|
|
|
provider "aws" {
|
|
region = "us-east-1"
|
|
skip_credentials_validation = true
|
|
skip_metadata_api_check = true
|
|
skip_requesting_account_id = true
|
|
s3_force_path_style = true
|
|
|
|
endpoints {
|
|
lambda = "http://localhost:5000"
|
|
}
|
|
}
|
|
|
|
See the `Terraform Docs`_ for more information.
|
|
|
|
|
|
Other languages:
|
|
|
|
* `Java`_
|
|
* `Ruby`_
|
|
* `Javascript`_
|
|
|
|
|
|
Use ServerMode using the decorators
|
|
-------------------------------------
|
|
|
|
It is possible to call the MotoServer for tests that were written using decorators.
|
|
The following environment variables can be set to achieve this:
|
|
|
|
.. code-block:: bash
|
|
|
|
TEST_SERVER_MODE=true
|
|
|
|
Whenever a mock-decorator starts, Moto will:
|
|
|
|
#. Send a reset-request to :bash:`http://localhost:5000`, removing all state that was kept
|
|
#. Add the :bash:`endpoint_url` parameter to boto3, so that all requests will be made to :bash:`http://localhost:5000`.
|
|
|
|
Calling the reset-API ensures the same behaviour as normal decorators, where the complete state is removed.
|
|
It is possible to keep the state in between tests, using this environment variable:
|
|
|
|
.. code-block:: bash
|
|
|
|
MOTO_CALL_RESET_API=true
|
|
|
|
|
|
Dashboard
|
|
---------
|
|
|
|
Moto comes with a dashboard to view the current state of the system::
|
|
|
|
http://localhost:5000/moto-api/
|
|
|
|
|
|
Reset API
|
|
---------
|
|
|
|
An internal API endpoint is provided to reset the state of all of the backends. This will remove all S3 buckets, EC2 servers, etc.::
|
|
|
|
requests.post("http://motoapi.amazonaws.com/moto-api/reset")
|
|
|
|
Install with Homebrew
|
|
---------------------
|
|
|
|
Moto is also available to install using `Homebrew`_, which makes it much easier
|
|
to manage if you're not using Python as your primary development language.
|
|
|
|
Once Homebrew is installed, you can install Moto by running:
|
|
|
|
.. code-block:: bash
|
|
|
|
brew install moto
|
|
|
|
To make the Moto server start up automatically when you log into your computer,
|
|
you can run:
|
|
|
|
.. code-block:: bash
|
|
|
|
brew services start moto
|
|
|
|
Caveats
|
|
-------
|
|
The standalone server has some caveats with some services. The following services
|
|
require that you update your hosts file for your code to work properly:
|
|
|
|
#. `s3-control`
|
|
|
|
For the above services, this is required because the hostname is in the form of `AWS_ACCOUNT_ID.localhost`.
|
|
As a result, you need to add that entry to your host file for your tests to function properly.
|
|
|
|
|
|
.. _Java: https://github.com/spulec/moto/blob/master/other_langs/sqsSample.java
|
|
.. _Ruby: https://github.com/spulec/moto/blob/master/other_langs/test.rb
|
|
.. _Javascript: https://github.com/spulec/moto/blob/master/other_langs/test.js
|
|
.. _Homebrew: https://brew.sh
|
|
.. _Terraform Docs: https://registry.terraform.io/providers/hashicorp/aws/latest/docs/guides/custom-service-endpoints
|