本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
連線至容器
對於Amazon GameLift Servers容器機群,您可以存取在機群執行個體上執行的遊戲伺服器容器。使用容器存取對遊戲工作階段進行疑難排解、檢查日誌和偵錯執行時間問題。
連線至容器
開始之前:
連線至機群執行個體。如需說明,請參閱連線至機群執行個體。
執行下列命令來列出執行個體上執行中的容器:
sudo docker ps
輸出會列出執行個體上執行的所有容器,包括遊戲伺服器容器和內部Amazon GameLift Servers容器。尋找具有遊戲伺服器映像的容器,以識別遊戲伺服器容器。
輸出範例:
CONTAINER ID IMAGE COMMAND CREATED STATUS b9676e9489f5 game-server-container "/bin/sh -c ./$GAME_…" 2 days ago Up 2 days 1d1c8443efe2 support-container "/bin/sh -c ./$SUPPO…" 2 days ago Up 2 days
若要連線至遊戲伺服器容器,請使用 CONTAINER ID欄中的容器簡短 ID。這可讓您完整讀取和寫入容器檔案系統。
sudo docker exec -itcontainer-short-idsh
透過主控台連線至容器
您可以使用 Amazon EC2 Systems Manager (SSM) 從Amazon GameLift Servers主控台連線至遊戲伺服器容器。此方法提供安全存取,而不需要額外的設定或憑證管理。您可以從機群詳細資訊頁面上的運算索引標籤或遊戲工作階段索引標籤連線到容器。
-
在 Amazon GameLift Servers主控台中,從導覽窗格中選擇受管容器,然後選擇機群。
-
選擇包含您要存取之容器或遊戲工作階段的機群 ID。
-
在機群詳細資訊頁面上,選擇下列其中一個索引標籤:
運算 – 列出在機群上執行的容器。選取您要連線的容器。
遊戲工作階段 – 列出機群的遊戲工作階段。選取遊戲工作階段以連接至託管它的容器。
-
選擇連線。複製顯示的命令以連線至容器,然後再次選擇連線。
-
在連線對話方塊中,選擇執行以建立新的 SSM 工作階段。系統會透過 AWS Key Management Service (AWS KMS) 驗證您的工作階段,並在瀏覽器中開啟終端機。
-
連線至執行個體後,請貼上步驟 4 中的 docker 命令,並在執行個體上執行該命令以存取容器。
連線至託管遊戲工作階段的容器
若要連線至託管特定遊戲工作階段的遊戲伺服器容器,請遵循下列步驟。
-
取得運算名稱。呼叫 describe-game-sessions 以取得遊戲工作階段
ComputeName的 。請求
aws gamelift describe-game-sessions \ --fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa \ --game-session-id arn:aws:gamelift:us-west-2::gamesession/fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa/gs-1111aaaa-2222-3333-4444-5555bbbb66cc回應
{ "GameSessions": [ { "GameSessionId": "arn:aws:gamelift:us-west-2::gamesession/fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa/gs-1111aaaa-2222-3333-4444-5555bbbb66cc", "FleetId": "fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa", "ComputeName": "62c5ff7f7a9a445d84877074c80aeafc", "Status": "ACTIVE", . . . } ] }請注意回應中的
ComputeName值 (例如62c5ff7f7a9a445d84877074c80aeafc)。 -
取得運算存取和容器屬性。使用機群 ID 和運算名稱呼叫 get-compute-access。
回應包含下列欄位:
ContainerIdentifiers– 每個容器ContainerRuntimeId的ContainerName和 。GameServerContainerGroupDefinitionArn– 容器群組定義的 ARN。Credentials– 連線至執行個體的臨時登入資料。
請求
aws gamelift get-compute-access \ --fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa \ --compute-name 62c5ff7f7a9a445d84877074c80aeafc回應
{ "ComputeName": "62c5ff7f7a9a445d84877074c80aeafc", "ContainerIdentifiers": [ { "ContainerName": "game-server", "ContainerRuntimeId": "02accb92cd9bef3373300e7151d5c2b3dcca3b06eff1bb4e345085fc008d4678" } ], "Credentials": { "AccessKeyId": "ASIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": "AQoDYXdzEJr...<remainder of session token>" }, "FleetId": "fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa", "GameServerContainerGroupDefinitionArn": "arn:aws:gamelift:us-west-2::containergroupdefinition/MyGameServerGroup" } -
連線到執行個體。使用步驟 2 的登入資料來連線至機群執行個體。如需詳細說明,請參閱 連線至機群執行個體。
-
尋找遊戲伺服器容器名稱。使用步驟 2
GameServerContainerGroupDefinitionArn中的 呼叫 describe-container-group-definition,以識別遊戲伺服器容器名稱。請求
aws gamelift describe-container-group-definition \ --name arn:aws:gamelift:us-west-2::containergroupdefinition/MyGameServerGroup回應
{ "ContainerGroupDefinition": { "ContainerGroupDefinitionArn": "arn:aws:gamelift:us-west-2:123456789012:containergroupdefinition/MyGameServerGroup:3", "Name": "MyGameServerGroup", "ContainerGroupType": "GAME_SERVER", "GameServerContainerDefinition": { "ContainerName": "game-server", . . . }, . . . } }請注意
GameServerContainerDefinition.ContainerName值 (例如game-server)。 -
識別遊戲伺服器容器執行期 ID。使用上一個步驟的遊戲伺服器容器名稱,
ContainerIdentifiers從步驟 2 的get-compute-access回應尋找 中的相符項目。請記下ContainerRuntimeId值。 -
連線至容器。使用
ContainerRuntimeId做為容器 ID,並執行下列命令:sudo docker exec -it 02accb92cd9bef3373300e7151d5c2b3dcca3b06eff1bb4e345085fc008d4678 sh
檢視容器連接埠映射
連接埠映射顯示容器連接埠如何映射到機群執行個體上的連線連接埠。每個接受傳入流量的容器連接埠都會在執行個體上指派一個連線連接埠。您可以檢查連接埠映射,以探索哪些連線連接埠映射到您的容器連接埠,或疑難排解連線問題。您可以在 Amazon GameLift Servers主控台中檢視連接埠映射,或使用 AWS CLI 或 AWS SDK。
在主控台中檢視連接埠映射
在 Amazon GameLift Servers主控台中,從導覽窗格中選擇受管容器,然後選擇機群。選擇機群以開啟機群詳細資訊頁面。您可以在下列位置檢視連接埠映射:
-
執行個體詳細資訊頁面 – 顯示所選執行個體上每個執行個體容器群組的連接埠映射。
-
運算詳細資訊頁面 – 顯示所選運算上遊戲伺服器容器群組的連接埠映射。
這兩個頁面都包含搜尋欄位,可依容器名稱篩選連接埠映射。
使用 檢視連接埠映射 AWS CLI
使用 describe-container-group-port-mappings命令來擷取機群執行個體上容器群組的連接埠映射。指定容器群組類型和 --compute-name(適用於遊戲伺服器群組) 或 --instance-id(適用於每個執行個體群組)。或者,包含 --container-name 參數來篩選特定容器的結果。
範例:遊戲伺服器容器群組
下列命令會擷取特定運算上遊戲伺服器容器群組的連接埠映射。
aws gamelift describe-container-group-port-mappings \ --fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa \ --container-group-type GAME_SERVER \ --compute-name 62c5ff7f7a9a445d84877074c80aeafc
如果成功, 會Amazon GameLift Servers傳回如下所示的回應:
{ "FleetId": "fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa", "Location": "us-west-2", "ContainerGroupDefinitionArn": "arn:aws:gamelift:us-west-2:123456789012:containergroupdefinition/MyGameServerGroup", "ContainerGroupType": "GAME_SERVER", "ComputeName": "62c5ff7f7a9a445d84877074c80aeafc", "InstanceId": "i-1234567890abcdef0", "ContainerGroupPortMappings": [ { "ContainerName": "MyGameServer", "ContainerRuntimeId": "a1b2c3d4e5f6", "ContainerPortMappings": [ { "ContainerPort": 7777, "ConnectionPort": 1025, "Protocol": "UDP" }, { "ContainerPort": 8080, "ConnectionPort": 1026, "Protocol": "TCP" } ] } ] }
範例:每個執行個體容器群組
下列命令會擷取特定執行個體上每個執行個體容器群組的連接埠映射。
aws gamelift describe-container-group-port-mappings \ --fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa \ --container-group-type PER_INSTANCE \ --instance-id i-1234567890abcdef0
如果成功, 會Amazon GameLift Servers傳回如下所示的回應:
{ "FleetId": "fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa", "Location": "us-west-2", "ContainerGroupDefinitionArn": "arn:aws:gamelift:us-west-2:123456789012:containergroupdefinition/MyPerInstanceGroup", "ContainerGroupType": "PER_INSTANCE", "InstanceId": "i-1234567890abcdef0", "ContainerGroupPortMappings": [ { "ContainerName": "MySupportContainer", "ContainerRuntimeId": "f6e5d4c3b2a1", "ContainerPortMappings": [ { "ContainerPort": 8443, "ConnectionPort": 2025, "Protocol": "TCP" } ] } ] }