利用AWS S3部署Swagger api 文件

閱讀時間約 12 分鐘

最近看到一些網路教學AWS S3可以部署靜態網頁,就想說那不如試試看將local swagger部署上去,之後還可以透過github action 自動部署swagger到s3上,於是花點時間看個影片並搭配chatgpt來實現

相關影片連結可以看這個 Youtube 網址,先了解如何建立一個靜態網頁的設定。

設定S3 服務跟搭建 swagger

第一步你需要先有aws帳號,並前往s3新增一個Buckets

raw-image

接著創建自己的bucket name ,如果你的名字隨便取,到時候你要綁定網域的話會比較麻煩,而如果你沒有要設定自己的網域的話,可以直接使用s3幫你產生的那組網址就可以訪問了,而這邊因為我會綁定我自己購買的域名,所以先取為test.dale.tw ,方便到時候設定CNAME轉址

而這邊的AWS Region就是你AWS服務地區,直接選日本,因為也沒有台灣可以選XD

raw-image

接著將bucket 設定對外Public

raw-image

這邊都不用改直接創建bucket

raw-image

接著為了方便將上傳的檔案都設成公開訪問for anyone,必須要再調整ACL,到創建bucket底下,選擇permission進入往下滑,會看到Object Ownership

raw-image
raw-image

接著將ACL控制打開,接著Save changes

raw-image

接著創建自己的swagger.yaml檔,這邊推薦一個工具叫stoplight studio,我這邊簡單用了工具先幫我創建一個初版方便測試

raw-image

創建完畢後將這個檔案上傳到我們s3 bucket 底下,選擇Upload進入

raw-image

接著上傳資料夾或是單一檔案,我這邊直接將stoplight創建的整包丟上去

raw-image

接著往下滑可以看到設定permissions的地方,修改一下ACL,把他設成grant public-read access,所有人都可以訪問。

raw-image

設定好後,S3會產生一串aws可以訪問的網址。這串網址到時候需要放到swagger-ui上

raw-image

在我們部署靜態網頁時,必須要有一個首頁的html,你可以在本地先創建一個index.html檔案,接著到swagger github網站,將範例code貼上去,接著將紅色框框部分替換成你的swagger文件s3網址

raw-image

你的index.html文件大概就是長這樣

raw-image

接著一樣上傳上去s3,最終就會長成下列這樣

raw-image

接著選擇Properties,來設定靜態網頁

raw-image

往下滑可以看到Static website hosting這邊來設定靜態網頁

raw-image

接著enable啟用他,下面會有一個設定index.htmlerror document,因為我沒有錯誤頁面,直接填寫index.html即可

raw-image

設定完後,S3會給我們一串網址來訪問他,這串就是你已經部署上去的靜態網站

raw-image

接著我們按右鍵在新分頁開啟連結,應該會遇到CROS的問題

Errors Hide Fetch error Failed to fetch https://s3.ap-northeast-1.amazonaws.com/test.dale.tw/reference/swagger.yaml Fetch error Possible cross-origin (CORS) issue? The URL origin (https://s3.ap-northeast-1.amazonaws.com) does not match the page (http://test.dale.tw.s3-website-ap-northeast-1.amazonaws.com). Check the server returns the correct 'Access-Control-Allow-*' headers.

主要是因為我們在index.html設定的swagger url網址是http://s3.ap-northeast-1.amazonaws.com/,而 aws 靜態網頁開頭網址是http://test.dale.tw.s3-website-ap-northeast-1.amazonaws.com/,這時候我們得加上CROS設定。

首先進到BucketsPermission裡面,往下滑找到CROS設定

raw-image
raw-image

接著將下列程式碼貼上去,允許AllowedOrigins記得改上自己的靜態網頁的網址

raw-image

配置說明可以參考aws s3 這份文件CORS configuration,將靜態網頁的網址加上去

[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET"
],
"AllowedOrigins": [
"http://test.dale.tw.s3-website-ap-northeast-1.amazonaws.com"
],
"ExposeHeaders": [],
"MaxAgeSeconds": 3000
}
]

接著設定完成後複製網址到無痕視窗開啟,應該可以正常看到swagger檔案文件

raw-image

接著如果要設定特定網域的部分,可以創建一個網域名稱,這邊簡單用之前購買的網域,以Godaddy為例。

在你的網域DNS下新增一組CNAME指向靜態路由的網址,這樣就行了,最後你可以利用http://test.dale.tw 這串網址,來轉址到靜態網站上去。

raw-image

設定後大約兩分鐘可以嘗試使用http://test.dale.tw來看看是否有成功,正常你應該會再次遇到CROS的問題XDDD..這時候將CORS設定再加上這串網址

[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET"
],
"AllowedOrigins": [
"http://test.dale.tw.s3-website-ap-northeast-1.amazonaws.com",
"http://test.dale.tw"
],
"ExposeHeaders": [],
"MaxAgeSeconds": 3000
}
]

接著再嘗試一次在無痕視窗開啟連結,這樣子就成功了。

raw-image

這樣子就可以很容易將swagger文件提供給其他人一起看,或是遇到面試時需要設計API給面試官,就能提供網址方便他們透過Swagger-UI觀看你的request and response了。

接著可以試著搭配 github action 來實現自動部署到S3上~


設定Github Action

接著補充說明搭配github action 將swagger.yaml檔案修正完後直接部署到S3 Buckets的自動化,這邊要搭配申請IAM 的金鑰,你會在IAM/USERS/Security credentials 找到Access keys並創建一個,要記得下載JSON檔且要保存好,啊如果不見就....砍掉金鑰重建一個XD,接著將ID跟KEY用來設定GITHUB,放置GITHUB路徑地點如圖。

raw-image

這邊AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 命名會對應到github action 的設定名稱,記得要寫對。

接著建立.github/workflows/xxxx.yaml檔,命名隨便取,但資料夾規則要一致,接著撰寫yaml檔,這邊單純Copy 資料夾下的swagger.yaml,放到對應S3資料夾下,只上傳這份即可。

註:補充說明為什麼可以不用安裝aws cli的工具即可以上傳到aws s3,主要是因為runs-on: ubuntu-latest will have AWS CLI version 1.16.299, and you can do the following:

 - name: Upload to S3
run: |
aws s3 cp ./results/ s3://reports/results/ --recursive

可看這篇Issue#4835 文章說明,但其他comment也有提到使用其他方式會比較好~那就看大家要怎麼設定了。

name: Deploy Swagger to AWS S3
on:
push:
branches:
- main

jobs:
deploy:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Upload Swagger to S3
run: |
aws s3 cp ./reference/swagger.yaml s3://test.dale.tw/reference/swagger.yaml
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: ap-northeast-1

因這邊上傳遇到一個問題,就是在test.dale.tw資料夾下的檔案會因為上傳而將public for anyone關掉,會遇到403 forbidden的問題,IAM跟一些權限設定尚還沒搞懂,故這邊先使用另一個方式處理,針對這個資料夾額外設定Bucket policy,所以這邊我會先把ACL關掉。

首先是先把 block publice access 勾選拿掉

raw-image

接著把 Object Ownership ACL設定關起來,註:這裡如果Everyone (public access)有打勾read,要先把它移除,才能disabled ACLs。

raw-image

接著設定這個Bucket policy,根據這個Bucket跟底下的檔案允許可以 "s3:GetObject","s3:ListBucket","s3:PutObject",上傳檔案後才不會出現403 forbidden的問題,附上設定。

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:ListBucket",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::test.dale.tw/*",
"arn:aws:s3:::test.dale.tw"
]
}
]
}
raw-image

接著正常修改swagger.yaml檔上傳之後會根據設定的puch branch啟動CI流程,接著幫我們自動化部屬,當然你也可以改成pull request 之後的操作設定修正。

avatar-img
15會員
37內容數
學涯無止境,透過每日or每週模仿學習筆記,不管是哪些領域也好,總有一天也可以從菜雞變小雞
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
DDDDD的沙龍 的其他內容
在專案開發的時候,專案架構搭建時團隊就會設定 php code style 檢查,避免整個開發團隊大家走出自己的風格,尤其是兩格空白還是四格空白,總是會有不同意見,這時候定義出團隊code style,並透過配置Github Action CI(Continuous Integration)
為了做登入log紀錄,練習mongoDB來存放log資料,這邊就來紀錄 Laravel 配置mongoDB的實作,而原本我的side project是練習搭建docker開發環境,故這邊會以dockerfile來設定跟紀錄踩坑問題。
最近剛好分配一個需求,要批次更新一些基礎設定資料,而新系統基礎設定資料都統一由別的團隊維護在Google Sheet 上,一開始是要我寫 Laravel Seeder 塞資料表,後來發現也太多數據要批次更新了,數據要對到何時何年,乾脆來研究串 Google Sheet API 整批塞入在對總行數就好
在撰寫專案時,有時候可能需要做一些特定Exceptions 來拋出error message的情況,而在不同公司任職,大家配置的流程可能就有些不同,這邊將簡單練習如何配置自定義的Exception。
作為一個純後端,不會前端也是正常的事(誤),但該練習的技能線還是得每天練習一點,尤其我是一個前端小廢物,那既然要用Laravel 9 版本來做開發,那就得先試試看vite這個新的工具,基本上這邊就簡單介紹使用方式,另一篇在額外說明Laravel Mix 與 Vite 差別。
最近在開發某一個項目功能,這也是先前同事踩到的坑,這次換我在踩一次,順便記錄一下,主要發生情境是,在執行GET參數,定義一個isDownlineSearch 布林判斷時,前端傳入true or false,在執行以下程式碼判斷時會失敗,他無法正確判斷此值。
在專案開發的時候,專案架構搭建時團隊就會設定 php code style 檢查,避免整個開發團隊大家走出自己的風格,尤其是兩格空白還是四格空白,總是會有不同意見,這時候定義出團隊code style,並透過配置Github Action CI(Continuous Integration)
為了做登入log紀錄,練習mongoDB來存放log資料,這邊就來紀錄 Laravel 配置mongoDB的實作,而原本我的side project是練習搭建docker開發環境,故這邊會以dockerfile來設定跟紀錄踩坑問題。
最近剛好分配一個需求,要批次更新一些基礎設定資料,而新系統基礎設定資料都統一由別的團隊維護在Google Sheet 上,一開始是要我寫 Laravel Seeder 塞資料表,後來發現也太多數據要批次更新了,數據要對到何時何年,乾脆來研究串 Google Sheet API 整批塞入在對總行數就好
在撰寫專案時,有時候可能需要做一些特定Exceptions 來拋出error message的情況,而在不同公司任職,大家配置的流程可能就有些不同,這邊將簡單練習如何配置自定義的Exception。
作為一個純後端,不會前端也是正常的事(誤),但該練習的技能線還是得每天練習一點,尤其我是一個前端小廢物,那既然要用Laravel 9 版本來做開發,那就得先試試看vite這個新的工具,基本上這邊就簡單介紹使用方式,另一篇在額外說明Laravel Mix 與 Vite 差別。
最近在開發某一個項目功能,這也是先前同事踩到的坑,這次換我在踩一次,順便記錄一下,主要發生情境是,在執行GET參數,定義一個isDownlineSearch 布林判斷時,前端傳入true or false,在執行以下程式碼判斷時會失敗,他無法正確判斷此值。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
隨著AI技術的進步,做海外自媒體變得更加簡單高效。AI工具(Chat GPT , DeepL) 能幫助創作者解決語言、文化、以及內容製作上的多重挑戰,讓自媒體經營者更輕鬆打入全球市場。以下是使用AI做海外自媒體的幾大優勢與策略....
Thumbnail
你知道嗎~平時我在看的NETFLIX影集,其實也脫離不了AWS雲端服務!?。 Netflix 是全球最大的線上串流媒體平台之一,擁有數以千計的影集和電影,能夠即時播放到世界各地的觀眾手中。而支撐這一切運行的關鍵技術之一,Amazon Web Services(AWS)。
Thumbnail
本篇使用 AWS Lambda 結合 Amazon Bedrock 和 Claude 3 來分析儲存在 Amazon S3 中的圖像的示範
Thumbnail
本文介紹如何使用AWS WAF Rules規則,透過IP Set(白名單) 以及TW IP的設定,來達成阻擋除臺灣以外的請求。同時也介紹了設定規則所需的條件及真值表。該方法可有效提升網站的安全性。
您需確認匯入的映像和磁碟快照是否符合格式,請見以下官方文檔。 [+] Importing a VM as an image using VM Import/Export - Export your VM from its virtualization environment - https:/
Thumbnail
文件夾側標籤能幫助我們快速識別和排序文件夾,但是要自行設計若是一次要製作多個,耗時又耗力。然而,只要利用excel的表格功能,就可以設計出美觀大方的文件夾側標籤。與其花費時間和金錢尋找抱頭猛燒,不如來學這方法,親自動手DIY,快速又有效率。 一.簡介 利用Excel製作文件夾側標籤的方法,讓人可
Thumbnail
玩AI手繪也不錯<Stable Diffusion篇> 在當今數碼時代,照片成為人們記錄生活的重要方式。然而,有時我們渴望將照片轉化為更加藝術性的形式,以獨特的風格呈現。這就是人工智能的力量發揮作用的時候了。利用深度學習和計算機視覺技術,研究人員開發出了一種令人驚嘆的AI技術,可以將照片轉換為手繪效
Thumbnail
在寒暑假長長的假期中,我們通常捨不得把這難能可貴的時間浪費在安親班裏,而是提前規劃、排定夫妻倆的年休假,以及吆喝一些好朋友,一起來計劃孩子們的假期。 父母親在孩子的成長階段,能夠陪伴著孩子成長,一同學習的機會,若是仔細算算的話,扣掉上課及寫作業,吃飯睡覺等等時間,其實並不多。   因此,在寒暑假長長
Thumbnail
●鯊魚的緊張性麻痺 上次看到一篇文章,談到兩隻虎鯨正在捕食海獅,這時候跑來了一隻大白鯊,虎鯨很不爽,覺得搞了這麼久,你這傢伙想來撿現成的。 有一頭虎鯨很生氣,就過去把大白鯊撞翻了,這時候大白沙進入緊張性麻痺(tonic immobility)的狀態......
Thumbnail
溫布頓網球賽中,頂尖高手如雲,每個人身形都已經結合到一定的完美境界。有人戲稱說,如果想要讓對手打不好,只要問對方你全力揮擊的一瞬間,是右腳先落地,還是腰先扭出去? 如果對方開始思考,動作會開始不順,然後自己就準備擊敗對手了。 這是潛意識的奧妙。 潛意識已經不再是過去那種神祕之說,也不是荒野間催眠之
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
隨著AI技術的進步,做海外自媒體變得更加簡單高效。AI工具(Chat GPT , DeepL) 能幫助創作者解決語言、文化、以及內容製作上的多重挑戰,讓自媒體經營者更輕鬆打入全球市場。以下是使用AI做海外自媒體的幾大優勢與策略....
Thumbnail
你知道嗎~平時我在看的NETFLIX影集,其實也脫離不了AWS雲端服務!?。 Netflix 是全球最大的線上串流媒體平台之一,擁有數以千計的影集和電影,能夠即時播放到世界各地的觀眾手中。而支撐這一切運行的關鍵技術之一,Amazon Web Services(AWS)。
Thumbnail
本篇使用 AWS Lambda 結合 Amazon Bedrock 和 Claude 3 來分析儲存在 Amazon S3 中的圖像的示範
Thumbnail
本文介紹如何使用AWS WAF Rules規則,透過IP Set(白名單) 以及TW IP的設定,來達成阻擋除臺灣以外的請求。同時也介紹了設定規則所需的條件及真值表。該方法可有效提升網站的安全性。
您需確認匯入的映像和磁碟快照是否符合格式,請見以下官方文檔。 [+] Importing a VM as an image using VM Import/Export - Export your VM from its virtualization environment - https:/
Thumbnail
文件夾側標籤能幫助我們快速識別和排序文件夾,但是要自行設計若是一次要製作多個,耗時又耗力。然而,只要利用excel的表格功能,就可以設計出美觀大方的文件夾側標籤。與其花費時間和金錢尋找抱頭猛燒,不如來學這方法,親自動手DIY,快速又有效率。 一.簡介 利用Excel製作文件夾側標籤的方法,讓人可
Thumbnail
玩AI手繪也不錯<Stable Diffusion篇> 在當今數碼時代,照片成為人們記錄生活的重要方式。然而,有時我們渴望將照片轉化為更加藝術性的形式,以獨特的風格呈現。這就是人工智能的力量發揮作用的時候了。利用深度學習和計算機視覺技術,研究人員開發出了一種令人驚嘆的AI技術,可以將照片轉換為手繪效
Thumbnail
在寒暑假長長的假期中,我們通常捨不得把這難能可貴的時間浪費在安親班裏,而是提前規劃、排定夫妻倆的年休假,以及吆喝一些好朋友,一起來計劃孩子們的假期。 父母親在孩子的成長階段,能夠陪伴著孩子成長,一同學習的機會,若是仔細算算的話,扣掉上課及寫作業,吃飯睡覺等等時間,其實並不多。   因此,在寒暑假長長
Thumbnail
●鯊魚的緊張性麻痺 上次看到一篇文章,談到兩隻虎鯨正在捕食海獅,這時候跑來了一隻大白鯊,虎鯨很不爽,覺得搞了這麼久,你這傢伙想來撿現成的。 有一頭虎鯨很生氣,就過去把大白鯊撞翻了,這時候大白沙進入緊張性麻痺(tonic immobility)的狀態......
Thumbnail
溫布頓網球賽中,頂尖高手如雲,每個人身形都已經結合到一定的完美境界。有人戲稱說,如果想要讓對手打不好,只要問對方你全力揮擊的一瞬間,是右腳先落地,還是腰先扭出去? 如果對方開始思考,動作會開始不順,然後自己就準備擊敗對手了。 這是潛意識的奧妙。 潛意識已經不再是過去那種神祕之說,也不是荒野間催眠之