stoplight/prismを使用して、Swagger-ui上でモックサーバーを動かす方法(AWS/EC2・Docker利用)


前提条件

  1. AWS/EC2インスタンスを作成済・SSH接続が可能
  2. nginxをEC2にインストール済
  3. swagger-uiが利用可能(Docker利用)
  4. swagger-uiに任意のyamlファイルを読み込み済

1がまだの方。
 ・AWS/EC2インスタンス作成
2がまだの方。
 ・nginxの設定
3がまだの方。
 ・swagger-uiの設定
4がまだの方。
 ・swagger-uiに任意ファイルを読み込ませる設定

以上を参考に、まず前提条件を全て満たすようにしてください。

1.EC2インスタンスにSSH接続する

sshLogin.ec2
ssh -i keypair_hogehoge.pem ec2-user@******

上記のような画像が表示されれば、SSH接続成功です。

2.dockerイメージをpull

SSH接続後に、stoplight/prismのdockerイメージをpullする

prismPull.docker
sudo docker pull stoplight/prism:3

上記画像のようになれば、無事pull成功です。

3.nginx.confにモックサーバーのルーティングを設定する

nginx.confを開く

sudo vim /etc/nginx/nginx.conf

nginx.confに追記する

server {
        listen       80;
        listen       [::]:80;
        server_name  _;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

     //swagger-editorの設定
        location /swagger-editor/docker/ {
          proxy_pass http://localhost:8000/;
          proxy_redirect off;
        }
     
     //swagger-uiの設定
        location /swagger-ui/docker/ {
          proxy_pass http://localhost:8001/;
          proxy_redirect off;
        }

     //モックサーバーの設定(今回はこちらを設定する)
        location /swagger-mock/docker/ {
          proxy_pass http://localhost:4010/;
          proxy_redirect off;
        }

4.yamlファイルにモックサーバーを追記する

今回は、こちらで設定したyamlファイルを使用します。
そして、serversのところにモックサーバーを追加します。

servers:
  - url: http://petstore.swagger.io/
  //モックサーバー用設定
  - url: http://EC2インスタンスのIPアドレス/swagger-mock/docker/

EC2インスタンスのIPアドレスの部分は、適切な値に変更してください。

5.モックサーバーを起動する

モックサーバーを起動する際に、任意のyamlファイルを指定する必要があります。

今回の設定
コンテナ名:prism
yamlファイルを保存しているディレクトリ: /home/ec2-user/www
yamlファイル: pet.yaml

prism.docker
sudo docker run --name prism -it -p 4010:4010 -v /home/ec2-user/www:/tmp stoplight/prism:3 mock -h 0.0.0.0 /tmp/pet.yaml

コンテナ名指定(任意)

containerName.docker
--name hogehoge

yamlファイル指定(必須)

yaml.docker
mock -h 0.0.0.0 /tmp/pokemon.yaml

以下のように、ターミナルに表示されれば、OKです。

[ec2-user@ip-00-0-0-00 ~]$ sudo docker run --name prism -it -p 4010:4010 -v /home/ec2-user/www:/tmp stoplight/prism:3 mock -h 0.0.0.0 /tmp/pet.yaml
[3:37:33 AM] › [CLI] …  awaiting  Starting Prism…
[3:37:34 AM] › [CLI] ℹ  info      GET        http://0.0.0.0:4010/pets?limit=60
[3:37:34 AM] › [CLI] ▶  start     Prism is listening on http://0.0.0.0:4010

6.swagger-uiにアクセスし、モックサーバーを試す

6a.モックサーバーを選択する

swagger-uiにアクセスして、適切なサーバーを選択する

6b.URLのタブを開き、[Try it out]ボタンを押す

6c.[execute]ボタンを押す

 

6d.結果を確認する

下記のように、yamlファイルに設定した成功レスポンスが結果として表示されれば、OK

ターミナルにも下記のように表示されているはずです。

[5:55:41 AM] › [HTTP SERVER] get /pets ℹ  info      Request received
[5:55:41 AM] ›     [NEGOTIATOR] ℹ  info      Request contains an accept header: application/json
[5:55:41 AM] ›     [VALIDATOR] ✔  success   The request passed the validation rules. Looking for the best response
[5:55:41 AM] ›     [NEGOTIATOR] ✔  success   Found a compatible content for application/json
[5:55:41 AM] ›     [NEGOTIATOR] ✔  success   Responding with the requested status code 200

その他の設定

モックサーバーをバックグラウンドで動かす方法

もし、ターミナル上で[Try it out]→[Excute]の結果を確認しなくても良い場合は、モックサーバーをバックグラウンドで動かすことも可能です。

フォアグラウンドver

sudo docker run --name prism -it -p 4010:4010 -v /home/ec2-user/www:/tmp stoplight/prism:3 mock -h 0.0.0.0 /tmp/pokemon.yaml

バックグラウンドver

sudo docker run --name prism -it -d -p 4010:4010 -v /home/ec2-user/www:/tmp stoplight/prism:3 mock -h 0.0.0.0 /tmp/pet.yaml
-d

このオプションがつくと、各コンテナをバックグラウンドで起動させることができます。

エラー対処

docker: Error response from daemon: Conflict. The container name "/prism" is already in use by container "768393267a3839c7db21028daeb8f5a39b67766f994615de3e068ea7f819c500". You have to remove (or rename) that container to be able to reuse that name.

docker runコマンドを入力後に、上記のエラーが出た場合、コンテナ名が被っていることが原因です。
下記のコマンドを入力して、コンテナを削除しましょう。

sudo docker rm 任意のコンテナ名

コンテナ削除する前に、コンテナを停止することを忘れないようにしましょう。

sudo docker stop 任意のコンテナ名

最後に

以上が、stoplight/prismを使用したモックサーバーの構築方法です。

不明点、質問などがあればコメント欄にお願い致します。