文章

顯示從 11月, 2024 起發佈的文章

AWS ECS + Fargate Spot:打造經濟實惠的定期任務執行方案

今天要跟各位分享一個超實用的 AWS 服務組合:ECS (Elastic Container Service) + Fargate Spot。這個組合特別適合執行定期任務,而且還能大幅降低成本。不論是數據處理、系統備份,還是定期報表生成,都非常適合! 為什麼選擇這個方案? 想像一下,如果你需要一個程式每三小時執行一次,每次只需要 2 分鐘,你會怎麼做?傳統做法可能是開一台 24 小時運作的伺服器,但這樣其實浪費了大量資源。而 ECS + Fargate Spot 方案的優勢在於: 按需使用:只在需要時才啟動容器 成本優勢:使用 Spot 機制可節省高達 70% 的費用 全託管:完全無需管理伺服器 完整建置步驟 步驟一:準備 Docker 映像 首先,我們需要把應用程式打包成 Docker 映像並上傳到 ECR: # 建立 ECR 倉庫 aws ecr create-repository --repository-name my-periodic-task # 登入 ECR aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 123456789012 .dkr.ecr.ap-northeast-1.amazonaws.com # 建立並推送映像 docker build -t my-periodic-task . docker tag my-periodic-task:latest 123456789012 .dkr.ecr.ap-northeast-1.amazonaws.com/my-periodic-task:latest docker push 123456789012 .dkr.ecr.ap-northeast-1.amazonaws.com/my-periodic-task:latest 步驟二:建立 ECS 集群 接下來,建立一個使用 Fargate Spot 的 ECS 集群: aws ecs create-cluster \ --cluster-name my-periodic-cluster \ --capacity-providers FARGATE_SPOT \...

如何創建並推送 Docker 映像檔至 AWS ECR

 今天我們來聊聊如何將 Docker 映像檔推送到 AWS 的 Elastic Container Registry (ECR) 前期準備 在開始之前,我們需要確保已完成以下準備: 安裝 AWS CLI :確保你的電腦上已安裝並配置好 AWS CLI。 安裝 Docker :確保 Docker 已安裝並正在運行。 創建 ECR 儲存庫 :你需要在 AWS 賬戶中創建一個 ECR 儲存庫。 發生的問題 在創建 ECR 儲存庫時,你可能會遇到以下錯誤訊息: not authorized to perform: ecr:CreateRepository 這表示當前的 AWS Identity and Access Management (IAM) 用戶或角色缺乏必要的權限。 如何解決權限問題 要解決這類問題,你需要更新 IAM 用戶或角色的權限。下面是詳細步驟: 更新 IAM 權限政策 : 我們需要為 IAM 用戶或角色添加一個政策,允許他們創建 ECR 儲存庫。你可以創建如下的新政策: json { "Version" : "2012-10-17" , "Statement" : [ { "Effect" : "Allow" , "Action" : [ "ecr:CreateRepository" , "ecr:DescribeRepositories" , "ecr:ListImages" , "ecr:DeleteRepository" , "ecr:DeleteRepositoryPolicy" , "ecr:DescribeImages" , "ecr:GetDownloadUrlForLayer" , "ecr:BatchGetImage" , "ecr:P...

Flutter開發疑難解析:Dart SDK損毀問題完整解決方案

在Flutter開發過程中,有時會遇到一些令人困擾的錯誤訊息。今天要和大家分享我遇到的一個案例,希望能幫助遇到相似問題的開發者。 問題描述 在開發過程中,我遇到了以下幾個錯誤: Flutter框架找不到: Copy ld: framework 'Flutter' not found clang: error: linker command failed with exit code 1 Xcode建置設定檔案缺失: Copy raise "#{generated_xcode_build_settings_path} must exist..." 最關鍵的錯誤提示: Copy Failed to start the Dart CLI isolate. Could not resolve DartDev snapshot or kernel. 原因分析 經過排查,發現問題的根源在於Dart SDK損毀。這可能是由於安裝過程中的意外中斷,或是系統更新導致的檔案不完整。 解決方案 解決方法其實很簡單,只需要: 找出現有的Dart SDK位置: bash Copy which dart 移除損毀的SDK: bash Copy rm -rf < dart安裝路徑 > 重新安裝Dart SDK: Mac用戶可使用Homebrew: bash Copy brew tap dart-lang/dart brew install dart 驗證安裝成功: bash Copy dart --version 心得分享 這個案例告訴我們,有時看似複雜的錯誤,解決方法可能很簡單。當遇到Flutter或Dart相關的問題時,不要忘記檢查SDK的完整性,這往往是問題的關鍵所在。

Chrome 擴充功能開發:解密 Content Security Policy 的安全限制

在開發 Chrome 擴充功能時,你可能會遇到一些看似莫名其妙的錯誤訊息,尤其是關於 Content Security Policy(CSP)的警告。今天,讓我們一起來了解這些安全限制,並學習如何正確處理它們! 問題場景 想像一下,你正在開發一個簡單的 Chrome 擴充功能,需要使用外部的 JavaScript lib。你可能會寫出這樣的程式碼: html Copy < script src = " https://cdnjs.cloudflare.com/some-library.js " > </ script > < button onclick = " doSomething ( ) " > 點擊我 </ button > 然後.......控制台就開始噴錯了... Copy Refused to load the script because it violates the Content Security Policy directive: "script-src 'self'" 什麼是 Content Security Policy? CSP 是一種安全機制,用來防止跨站腳本攻擊(XSS)和其他程式碼注入攻擊。在 Chrome 擴充功能中,CSP 預設採用嚴格的安全設定,主要限制包括: 只能載入擴充功能目錄內的腳本文件(script-src 'self') 不允許使用內嵌腳本(比如 onclick="...") 不允許直接從外部 CDN 載入資源 常見錯誤和解決方案 1. 外部腳本載入錯誤 ❌ 問題程式碼: html Copy < script src = " https://cdnjs.cloudflare.com/some-library.js " > </ script > ✅ 解決方案: 下載lib的文件到你的擴充功能目錄 使用相對路徑引用 html Copy < script src = " library.js " > </ script > 2. 內嵌腳本錯誤 ❌ 問題程式碼: ht...