利用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
留言分享你的想法!
avatar-img
DDDDD的沙龍
15會員
37內容數
學涯無止境,透過每日or每週模仿學習筆記,不管是哪些領域也好,總有一天也可以從菜雞變小雞
DDDDD的沙龍的其他內容
2023/12/13
待業中後,發現時間變很多就開始東看看西看看,思考著要如何更深入理解Laravel框架的運用,而在Laravel框架中哪些部分是框架替我們做了哪些處理,推薦一個影片給大家一起學習理解。
Thumbnail
2023/12/13
待業中後,發現時間變很多就開始東看看西看看,思考著要如何更深入理解Laravel框架的運用,而在Laravel框架中哪些部分是框架替我們做了哪些處理,推薦一個影片給大家一起學習理解。
Thumbnail
2023/12/09
現在AI工具太多,且框架對於資安支援及處理也越來越方便,反而開始會容易忽略最底層的知識,這邊回顧MySQL的鎖,順便記錄一下找到的一些影片資源,並整理筆記
Thumbnail
2023/12/09
現在AI工具太多,且框架對於資安支援及處理也越來越方便,反而開始會容易忽略最底層的知識,這邊回顧MySQL的鎖,順便記錄一下找到的一些影片資源,並整理筆記
Thumbnail
2023/12/05
這邊主要是遇到功能需要處理時區,雖然主管給的筆記已經寫得很完美了,但覺得還是得理解吸收後並記錄自己的筆記後,好像才能有效吸收到腦袋裡
Thumbnail
2023/12/05
這邊主要是遇到功能需要處理時區,雖然主管給的筆記已經寫得很完美了,但覺得還是得理解吸收後並記錄自己的筆記後,好像才能有效吸收到腦袋裡
Thumbnail
看更多
你可能也想看
Thumbnail
暖家的防潮、除濕用品分享,若你知道有什麼CP值更高的用品,請推薦給我!同時也分享蝦皮分潤計畫的好處。
Thumbnail
暖家的防潮、除濕用品分享,若你知道有什麼CP值更高的用品,請推薦給我!同時也分享蝦皮分潤計畫的好處。
Thumbnail
寒流來襲,你準備好禦寒小物了嗎?小吉推薦實際使用過、愛用且會回購的防寒小物,強調兼具美感與實用的選品原則。居家必備的地毯、手腳保暖小物(貓咪襪子、防水鋪棉手套、絨毛室內拖鞋)、電力保暖用品(電動暖暖包、可定時電熱毯),泡腳桶、浴室電暖器。特別整理蝦皮雙 12 活動攻略,並邀請你透過連結購買加入分潤。
Thumbnail
寒流來襲,你準備好禦寒小物了嗎?小吉推薦實際使用過、愛用且會回購的防寒小物,強調兼具美感與實用的選品原則。居家必備的地毯、手腳保暖小物(貓咪襪子、防水鋪棉手套、絨毛室內拖鞋)、電力保暖用品(電動暖暖包、可定時電熱毯),泡腳桶、浴室電暖器。特別整理蝦皮雙 12 活動攻略,並邀請你透過連結購買加入分潤。
Thumbnail
生完寶寶後 我真的深刻感受到一句話: 「睡不好,皮膚就先離家出走」 常常半夜起來哄寶寶、睡眠不規律 膚況也跟著黯淡、失去彈性>< 身為剛生完孩子的新手媽媽,我現在最在意的兩件事就是: 皮膚要彈潤、睡眠要穩定!! 這陣子我開始嘗試日夜搭配的膠原蛋白: 🌞 TIMESEAL 日間款
Thumbnail
生完寶寶後 我真的深刻感受到一句話: 「睡不好,皮膚就先離家出走」 常常半夜起來哄寶寶、睡眠不規律 膚況也跟著黯淡、失去彈性>< 身為剛生完孩子的新手媽媽,我現在最在意的兩件事就是: 皮膚要彈潤、睡眠要穩定!! 這陣子我開始嘗試日夜搭配的膠原蛋白: 🌞 TIMESEAL 日間款
Thumbnail
實驗目的:Lambda@Edge (L@E) 讓 CLoudFront (CF) 回源時,自動選擇較近的 S3 region 回源
Thumbnail
實驗目的:Lambda@Edge (L@E) 讓 CLoudFront (CF) 回源時,自動選擇較近的 S3 region 回源
Thumbnail
客戶提出以下需求: 當用戶在日本,會導到離用戶最近的CloudFront節點(亞洲),當CF要回原站時,需要導到新加坡的S3 當用戶為美國,會導到離用戶最近的CloudFront節點(美國東岸),當CF要回原站時,需要導到美國的S3
Thumbnail
客戶提出以下需求: 當用戶在日本,會導到離用戶最近的CloudFront節點(亞洲),當CF要回原站時,需要導到新加坡的S3 當用戶為美國,會導到離用戶最近的CloudFront節點(美國東岸),當CF要回原站時,需要導到美國的S3
Thumbnail
AWS CloudFront + S3 遇到 CORS 解決方式
Thumbnail
AWS CloudFront + S3 遇到 CORS 解決方式
Thumbnail
我對於自己開發的API會習慣性寫一份swagger文件方便前端串接,但因為這些文件都是存在我個人的swagger帳號,且會受限於免費版限制,再加上剛好跟PM在討論如何維護我們的文件,於是我就開始著手將swagger自己部署到公司管理後台。 這樣做的好處: (1)後端都可以編輯 (2)文件隸屬於
Thumbnail
我對於自己開發的API會習慣性寫一份swagger文件方便前端串接,但因為這些文件都是存在我個人的swagger帳號,且會受限於免費版限制,再加上剛好跟PM在討論如何維護我們的文件,於是我就開始著手將swagger自己部署到公司管理後台。 這樣做的好處: (1)後端都可以編輯 (2)文件隸屬於
Thumbnail
最近看到一些網路教學AWS S3可以部署靜態網頁,就想說那不如試試看將local swagger部署上去,之後還可以透過github action 自動部署swagger到s3上,於是花點時間看個影片並搭配chatgpt來實現
Thumbnail
最近看到一些網路教學AWS S3可以部署靜態網頁,就想說那不如試試看將local swagger部署上去,之後還可以透過github action 自動部署swagger到s3上,於是花點時間看個影片並搭配chatgpt來實現
Thumbnail
Prerequisites 建立 S3 bucket 設定 IAM role for OpenSearch (TheSnapshotRole) { "Version": "2012-10-17", "Statement": [{ "Action": [
Thumbnail
Prerequisites 建立 S3 bucket 設定 IAM role for OpenSearch (TheSnapshotRole) { "Version": "2012-10-17", "Statement": [{ "Action": [
Thumbnail
AWS 佈署簡單操作以及 RDS 建立篇
Thumbnail
AWS 佈署簡單操作以及 RDS 建立篇
Thumbnail
1.首先 這是 “AWS 上的工作負載發現” 的解決方案,我嘗試了一下,覺得很方便,所以介紹一下~ https://aws.amazon.com/tw/solutions/implementations/workload-discovery-on-aws/ 2. 部署 官方提供 CloudF
Thumbnail
1.首先 這是 “AWS 上的工作負載發現” 的解決方案,我嘗試了一下,覺得很方便,所以介紹一下~ https://aws.amazon.com/tw/solutions/implementations/workload-discovery-on-aws/ 2. 部署 官方提供 CloudF
Thumbnail
本篇文章要和大家介紹的是 AWS 的重量級核心服務之一 —— Amazon Simple Storage Service (因為名字有3個 S 簡稱 S3),S3屬於物件儲存,會依據資料的頻繁度把資料存放到相應類別。
Thumbnail
本篇文章要和大家介紹的是 AWS 的重量級核心服務之一 —— Amazon Simple Storage Service (因為名字有3個 S 簡稱 S3),S3屬於物件儲存,會依據資料的頻繁度把資料存放到相應類別。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News