我想從 AWS Fargate 上的 Amazon Elastic Container Service (Amazon ECS) 任務連接到資料庫。
解決方法
在完成以下步驟之前,請確認您有一個在 Fargate 上執行的 Amazon ECS 叢集和一個 Amazon Relational Database Service (Amazon RDS) 資料庫。Amazon ECS 和 Amazon RDS 可能具有通訊問題。如需詳細資訊,請參閱如何對 Amazon EC2 啟動類型的 Amazon ECS 任務與 Amazon RDS 資料庫之間的連線問題進行疑難排解?。
注意: 以下解決方法使用 MySQL 作為引擎類型。
將您的任務連接到資料庫
1. 建立一個連接到您 MySQL 資料庫的 Python 指令碼。
下列範例 rds.py 指令碼會輸出與資料庫連接到 Amazon CloudWatch 的結果:
import pymysql
import os
Database_endpoint = os.environ['ENDPOINT']
Username = os.environ['USER']
Password = os.environ['PASS']
try:
print("Connecting to " + Database_endpoint)
db = pymysql.connect(host = Database_endpoint, user = Username, password = Password)
print("Connection successful to " + Database_endpoint)
db.close()
except Exception as e:
print("Connection unsuccessful due to " + str(e))
注意: 將 ENDPOINT、USER 和 PASS 取代為您的資料庫值。
2. 建立包含組合影像所需指令的 Docker 檔案。例如:
FROM python
RUN pip install pymysql cryptography
COPY rds.py /
CMD [ "python", "/rds.py" ]
**重要:**務必將 rds.py 指令碼和 Dockerfile 放在同一個資料夾中。
3. 建立 Amazon ECR 儲存庫,然後將 Docker 映像檔推送至該儲存庫。
4. 建立任務定義,然後將步驟 2 中的 Docker 映像檔新增為容器映像檔。例如:
{
"executionRoleArn": "arn:aws:iam::account_ID:role/ecsTaskExecutionRole",
"containerDefinitions": [{
"name": "sample-app",
"image": "YOUR-ECR-Repository-URL",
"essential": true
}],
"requiresCompatibilities": [
"FARGATE"
],
"networkMode": "awsvpc",
"cpu": "256",
"memory": "512",
"family": "sample-app"
}
注意: 在您的任務定義中,設定 ENDPOINT、USER 和 PASS 環境變數的值。您可以直接將這些值作為環境變數傳遞,或從 AWS Secrets Manager 的機密中擷取這些值。如需詳細資訊,請參閱如何將機密或敏感資訊安全地傳遞至 Amazon ECS 任務中的容器?
5. 開啟 Amazon ECS 主控台,然後從導覽窗格中選擇任務定義。
6. 選取您的任務定義,選擇動作,然後選擇執行任務。
7. 針對啟動類型,選擇 FARGATE。
8. 針對叢集,選擇任務定義的叢集。
9. 針對任務數量,輸入您要複製的任務數量。
10. 在 VPC 和安全群組區段中,針對叢集 VPC,選擇您的 Amazon Virtual Private Cloud (Amazon VPC)。
11. 針對子網路,選擇您的子網路。
12. 針對安全群組,至少選取一個安全群組。
13. 選擇執行任務。
rds.py 指令碼會停止任務並傳回下列訊息:
Essential container in task exited.
確認您的任務已連線至資料庫
1. 開啟 Amazon ECS 主控台。
2. 從導覽功能表中選擇叢集,然後選擇您的叢集。
3. 選擇任務標籤。
4. 針對所需的任務狀態,選擇已停止以查看已停止任務的清單。
5. 選擇您已停止的任務。
6. 在已停止任務的詳細資訊標籤上,在容器區段中,選擇展開器圖示。
7. 選擇在 CloudWatch 檢視日誌。
您應該會在 Amazon CloudWatch 主控台中看到下列訊息:
Connection successful to [Your Endpoint]