物理サーバに置いていたSwagger UIをAWSに移した記録です。
ついでにドキュメントを更新したらBitbucket Pipelinesでデプロイまでやってくれるようにしました。
Elastic BeanstalkにSwagger UIを置く
環境作成
Beanstalkの環境をDockerプラットフォームで作成します。
その他の設定はお好みで。
docker-compose.ymlの用意
version: "3"
services:
swagger:
image: swaggerapi/swagger-ui
container_name: swagger-ui
volumes:
- ./foo.yml:/usr/share/nginx/html/foo.yml
- ./bar.yml:/usr/share/nginx/html/bar.yml
environment:
URLS: "[{url:\"foo.yml\",name:\"FOO\"},{url:\"bar.yml\",name:\"BAR\"}]"
URLS_PRIMARY_NAME: "FOO"
QUERY_CONFIG_ENABLED: "true"
expose:
- "80"
ports:
- "80:8080"
余談
environmentでURLSを書いておくと検索バーがリストに変わって、ymlが複数あるときに便利です。
またQUERY_CONFIG_ENABLEDをtrueにしておくと、クエリパラメータで?urls.primaryName=BAR
のように指定することでそのドキュメントのページに飛べるようになります。
(参考)Swagger UI Configuration
デプロイ
docker-compose.ymlとドキュメントのyamlをBeanstalkにデプロイするとブラウザで見られるようになります。
Bitbucket Pipelinesでデプロイ
Beanstalkデプロイ用のユーザを作成する
AWSで適切な権限(Beanstalkにデプロイできる権限を付けたら)を付けたユーザを作成してACCESS_KEY_IDとSECRET_ACCESS_KEYを取得しておきます。
Pipelines有効化
Repository settings > PIPELINES - Settings > Enable PipelinesをOnにする。
bitbucket-pipelines.ymlの用意
image: atlassian/default-image:3
pipelines:
branches:
main: # このブランチにpushやmergeなどがあるとパイプラインが実行される
- step: # デプロイする対象のファイルをzipする
name: 'Zip Application'
script:
- zip application.zip docker-compose.yml foo.yml bar.yml
artifacts:
- application.zip
- step: # zipしたファイルをBeanstalkの環境にデプロイする
name: 'Deploy to Beanstalk'
script:
- pipe: atlassian/aws-elasticbeanstalk-deploy:1.0.2
variables:
AWS_ACCESS_KEY_ID: '$AWS_ACCESS_KEY_ID'
AWS_SECRET_ACCESS_KEY: '$AWS_SECRET_ACCESS_KEY'
AWS_DEFAULT_REGION: '$AWS_DEFAULT_REGION'
APPLICATION_NAME: '$APPLICATION_NAME'
ENVIRONMENT_NAME: '$ENVIRONMENT_NAME'
ZIP_FILE: 'application.zip'
S3_BUCKET: '$S3_BUCKET' # zipファイルをアップロードするバケット名
WAIT: 'true' # デプロイが完了するまで待つかどうか
(参考)Elastic Beanstalk を使用して AWS にデプロイする
環境変数の設定
Repository settings > PIPELINES - Repository Variablesでbitbucket-pipelines.ymlに書いた環境変数の設定をします。
Pipelinesの実行
用意したbitbucket-pipelines.ymlをリポジトリにプッシュすればPipelinesが実行されるようになります。
以上です。