# AWS 專案架設流程 ## AWS RDS : > * 在正式環境下,所有資料庫皆在 kingone RDS instance 中創建,而不另起額外 instance ,登入資料庫後依本機做法建立管理者並賦予管理單一資料庫的權限 (注意,RDS 並不給予 admin 所有權限因此創建帳號時須避免賦予屬於 Server administration 的權限)。 > > * 使用 admin 帳號登入 kingone 並創建使用者及賦予資料庫管理權,開啟 AWS RDS Console ,選擇 kingone 。host 為 Endpoint (確認防火牆已開放當前連線 ip) --- ## AWS Secret Manager : > 建立完資料庫管理者及賦予資料庫管理權限後即可前往 AWS Secret Manager 建立 Secret ,將資料庫連線資訊填入並建立 Tag 供專案取得連線資訊。 > SQL 指令: https://hackmd.io/rWaW3VVkQNyDVC86ULCtqA --- ## AWS IAM 權限: > 打開 AWS IAM Console 選擇 Users ,確認 IAM 有開放 SecretsManagerReadWrite 給 User 權限後再選擇 Security credentials 建立 access key,再將 access key Id 和 Secret key 寫入專案 env,等回提供給 AWS Service 使用。 --- ## AWS S3 : > 一台 Ec2 配一個 S3 bucket,如果一個機器有多個專案則在 bucket 底下開各別專案資料夾。 > * 新增 bucket 配置 Aws Region 選擇跟 Ec2 相同 > * Object Ownership 選擇 ACLs enabled (允許賦予其他使用者修改讀取權限) > * Block Public Access settings for this bucket 關閉 Block all Public access (專案中的檔案需開放公開訪問) > * Bucket Versioning 選 Enable (出意外的話,可以回到之前的記錄) > * 設定細節 https://hackmd.io/HV9xcvukTSS4K5rOOLLodQ --- ## 專案設定 : > ### env 所需參數 : > #### Secret Manager : AWS_SECRET_TAG_NAME AWS_SECRET_TAG_VALUE AWS_SECRET_ARN > #### AWS IAM : AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION > ### 判斷專案環境 Function > * 安裝 Aws Service Provider for Laravel: composer require aws/aws-sdk-php-laravel > * 參考連結 : https://github.com/aws/aws-sdk-php-laravel <br /> > * 新增 dbHelper function : <?php use Aws\Credentials\CredentialProvider; use Aws\SecretsManager\SecretsManagerClient; function dbHelper($key, $default=""){ if (env('APP_ENV') == 'prod') { // Use the default credential provider $provider = CredentialProvider::defaultProvider(); $client = new SecretsManagerClient([ 'credentials' => $provider, 'version' => 'latest', 'region' => env('AWS_DEFAULT_REGION'), ]); $secretName = env('AWS_SECRET_ARN'); $result = $client->getSecretValue([ 'SecretId' => $secretName, ]); $result = json_decode($result['SecretString']); if(isset($result->$key)){ return $result->$key; } else { return $default; } } else { return env($key, $default); } } > * 到 composer.json 底下的 autoload 新增 : "files" : [ "app/yourhelper.php" ] > * 接著下指令: composer dump-autoload > * 最後修改 config/database 底下的 connections.mysql 的 username 及 password 使用 dbHelper 在讀取資料庫時判斷當前環境: 'username' => dbHelper('username', env('DB_USERNAME', 'forge')), 'password' => dbHelper('password', env('DB_PASSWORD', '')),