# 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', '')),