LoginSignup
1
0

More than 1 year has passed since last update.

OpenapiのYamlをCodeCommitにPushしたら自動的にHTMLに変換してS3にホストして公開する

Last updated at Posted at 2021-09-27

要約

Openapi仕様で書かれたYamlファイルは、ツールを使って静的なHTMLに変換することができる。ここでは、それらのツールのひとつであるredocで、YamlをHTMLに変換する。通常は、手元でredocを使い、HTMLに変換したのち、関係者に共有したり、S3の静的ホスティング機能を使って共有したりする。本稿では、手元で変換する手間を惜しむため、CodeCommitにコミットしたら、自動的にHTMLに変換し、S3にホストする仕組みを紹介する。

構成

arch.jpg

手順

1. CodeCommitのリポジトリを準備する

下記のように、buildspec.ymlとopenapi.yamlを用意する。buildspecには、codebuildで実行する処理を記述する。
openapiはAPI仕様である。
codecommit.jpg

2.buildspec.ymlを用意する

以下のようなbuildspec.ymlを用意する。
nodejsのバージョン14のコンテナを使用している。まずredocツールを導入し、そのあと、openapi.yamlをHTMLに変換し、変換後のHTMLファイルをリネームしている。

version: 0.2

phases:
  install:
    runtime-versions:
      nodejs: 14
    commands:
      - npm install -g redoc-cli
  pre_build:
    commands:
      - echo Nothing to do in the pre_build phase...
  build:
    commands:
      - echo Build started on `date`
      - redoc-cli bundle openapi.yaml
      - mv redoc-static.html openapi.html
  post_build:
    commands:
      - echo Build completed on `date`
artifacts:
  files:
    - openapi.html

3. HTMLをホストするS3を用意する

静的ホスティングを有効にしたS3を用意する。

4.CodeBuildプロジェクトを作成する

ソースプロバイダにCodeCommitを指定、1で作成したリポジトリを指定。

codebuild2m.jpg

環境はマネージドイメージを使用し、Buildspecは、buildspecファイルを使用するを選択(これにより、リポジトリのbuildspec.ymlが自動的に使用される)。
このとき、OSにAmazonLinuxを選択すると、SRC_DIRのダウンロードに失敗したというエラーが発生したため、それを回避すべく、Ubuntuを選択した(Ubuntuだとなぜうまくいくのかは不明・・・)。

codebuild6m.jpg

アーティファクトをS3(3で作成したもの)に設定。アーティファクトの暗号化を削除を選択しておくこと(選択しない場合、ファイルを正常に閲覧できない)。

codebuild5m.jpg

5. CodePipelineを構築する

codepipeline1m.jpg

sourceにCodeCommitの1で作ったリポジトリを指定する。
codepipeline2m.jpg

ビルドステージを追加する、で4で作成したCodeBuildプロジェクトを指定する。

codepipeline3m.jpg

デプロイステージを追加する、で3で作成したS3バケットを指定する。デプロイする前にファイルを抽出するにチェックを入れる。
codepipeline4m.jpg

まとめ

本稿では、Codeシリーズを活用し、CodeCommitにファイルをコミットするだけでHTMLに変換、S3で公開するまでを自動化する方法を紹介した。S3のURLを共有しておくことで、開発者は常に最新のドキュメントを参照することができる。都度HTMLファイルを配布する必要がないため、開発にかかる負担を減らすことができる。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0