Twój koszyk jest obecnie pusty!
Co to jest Amazon Container Services?
Amazon Elastic Container Service (ECS) to zarządzana usługa kontenerowa, która umożliwia uruchamianie, zarządzanie i skalowanie aplikacji kontenerowych na Amazon Web Services (AWS). Wykorzystując ECS, możesz wdrażać kontenery w ramach różnych środowisk, takich jak Fargate (kompletnie zarządzana infrastruktura) czy EC2 (instancje wirtualne). Dzięki ECS, zarządzanie kontenerami staje się bardziej zautomatyzowane, a uruchamiane aplikacje mogą korzystać z pozostałych usług AWS, takich jak EFS do przechowywania danych czy CloudWatch do monitoringu.
Co to jest ECS Exec?
Kiedyś możliwość połączenia się bezpośrednio do konkretnego kontenera uruchomionego na Amazon ECS była mocno ograniczona. Administratorzy musieli stosować różne obejścia, takie jak uruchamianie specjalnych narzędzi do logowania na poziomie aplikacji lub stosowanie dodatkowych warstw sieciowych, co było czasochłonne i skomplikowane. Jednak niedawno AWS wprowadził funkcję ECS Exec, która pozwala na natychmiastowe połączenie się z dowolnym kontenerem, umożliwiając wykonywanie komend bezpośrednio w działającym środowisku. Ta nowa opcja znacznie upraszcza proces zarządzania i debugowania aplikacji kontenerowych, eliminując potrzebę dostępu do poziomu hosta.
ECS Exec działa poprzez integrację z agentem ECS i pozwala administratorom wykonywać komendy w kontenerze za pomocą standardowego interfejsu CLI. Po nawiązaniu połączenia, ECS Exec otwiera interaktywne środowisko terminala, które działa podobnie do SSH, ale jest w pełni zarządzane w kontekście chmury. Wszystkie komendy wykonywane są w kontenerze, co pozwala na łatwe debugowanie, wykonywanie aktualizacji lub zarządzanie aplikacją. Ważnym elementem tej funkcji jest wsparcie dla logowania i audytowania działań w AWS CloudTrail, co zapewnia dodatkowe bezpieczeństwo i śledzenie działań.
Co potrzebujesz, aby wykorzystać ECS Exec i nawiązać połączenie?
Aby połączyć się z taskiem uruchomionym na ECS i wykonać dowolną komendę, musisz spełnić kilka wymagań opisanych poniżej.
Skonfigurowany klaster ECS
Najpierw potrzebujesz skonfigurowanego klastra ECS z uruchomionymi taskami. Taski to instancje aplikacji kontenerowych zarządzanych przez ECS na podstawie zdefiniowanych „task definitions”.
AWS CLI 2.20 lub nowszy
Do połączenia z kontenerami ECS potrzebny jest zaktualizowany AWS CLI (Command Line Interface). Obsługę połączeń do kontenerów wprowadzono w wersji AWS CLI 2.x, więc upewnij się, że korzystasz z wersji 2.20 lub wyższej. Aby sprawdzić swoją wersję, użyj:
aws --version
Jeśli nie masz zainstalowanego AWS CLI lub potrzebujesz aktualizacji, możesz pobrać go z oficjalnej strony AWS CLI.
Jakie są ograniczenia ECS Exec?
Choć ECS Exec jest użytecznym narzędziem, ma kilka istotnych ograniczeń, o których warto pamiętać. Przede wszystkim nie można go używać poprzez AWS Management Console – dostęp do tej funkcji możliwy jest jedynie za pomocą AWS CLI. ECS Exec wspiera taski uruchamiane na kontenerach Linux i Windows, zarówno na instancjach EC2, jak i Fargate, ale wymaga odpowiednich wersji AMI zoptymalizowanych pod ECS. Taski uruchamiane w trybie awsvpc muszą mieć skonfigurowane punkty końcowe Amazon VPC (interfejs) dla menedżera sesji Systems Manager (ssmmessages), co jest niezbędne dla poprawnego działania połączeń w środowiskach bez dostępu do internetu. Dodatkowo, jeśli używasz szyfrowania z kluczami KMS, wymagane jest skonfigurowanie punktu końcowego VPC dla KMS.
Komendy uruchamiane przez ECS Exec zawsze działają z uprawnieniami użytkownika root, a agent SSM wymaga zapisywalnego systemu plików kontenera, co oznacza, że funkcje typu readonlyRootFilesystem nie są obsługiwane. Ważne jest również, aby wziąć pod uwagę dodatkowe obciążenie procesora i pamięci spowodowane przez SSM, co należy uwzględnić w definicji zasobów taska. Ponadto, ECS Exec obsługuje tylko jedną sesję na każdy kontener, a połączenie może być utrzymane maksymalnie przez 20 minut nieaktywności, po czym zostaje automatycznie rozłączone.
Jak wykonać połączenie?
Krok 1: Aktualizacja task definition.
W sekcji task definition
musisz dodać poniższe ustawienia:
"enableExecuteCommand": true
Przykład pełnego task definition może wyglądać tak:
{
"family": "my-task-family",
"containerDefinitions": [
{
"name": "my-container",
"image": "my-image",
...
}
],
"requiresCompatibilities": ["FARGATE"],
"networkMode": "awsvpc",
"cpu": "256",
"memory": "512",
"enableExecuteCommand": true
}
Aby odblokować opcję enableExecuteCommand
możemy wykonać polecenie: update-service
, które doda do uruchomionego serwisu odpowiednią opcję.
aws ecs update-service \
--cluster cluster-name \
--enable-execute-command \
--service service-name
Po aktualizacji definicji zadania należy wykonać deployment, aby funkcje ECS Exec zostały uruchomione w tasku.
Krok 2: Znalezienie tasku do połączenia
Najpierw musisz zidentyfikować task, z którym chcesz się połączyć. Możesz to zrobić, wykonując poniższą komendę, która pokaże listę uruchomionych tasków w danym klastrze:
aws ecs list-tasks --cluster <cluster_name>
Następnie użyj poniższej komendy, aby uzyskać więcej informacji o specyficznym tasku:
aws ecs describe-tasks --cluster <cluster_name> --tasks <task_id>
Krok 3: Połączenie do tasku
Aby połączyć się z taskiem, użyj komendy execute-command
:
aws ecs execute-command \
--cluster <cluster_name> \
--task <task_id> \
--container <container_name> \
--interactive \
--command "/bin/bash"
Wyjaśnienie:
<cluster_name>
: Nazwa Twojego klastra ECS.<task_id>
: ID tasku, z którym chcesz się połączyć.<container_name>
: Nazwa kontenera wewnątrz tasku, z którym chcesz się połączyć (jeśli task ma wiele kontenerów)./bin/bash
: Komenda, którą chcesz wykonać (możesz zmienić na dowolną inną komendę, np./bin/sh
lub specyficzny skrypt PHP).
Krok 4: Wykonanie komendy
Po połączeniu masz pełen dostęp do kontenera i możesz wykonywać komendy zgodnie z potrzebami, np. sprawdzać logi, analizować konfiguracje, uruchamiać skrypty itp.
Podsumowanie
Korzystanie z Amazon ECS umożliwia skalowalne wdrażanie aplikacji kontenerowych, a funkcja ECS Exec pozwala na łatwe połączenie z uruchomionymi taskami. Aby się połączyć, potrzebujesz skonfigurowanego klastra, zaktualizowanego AWS CLI, uprawnień IAM oraz zadbania o właściwą konfigurację security groups. Dzięki temu możesz wykonać dowolne komendy na działających kontenerach i skutecznie diagnozować problemy lub zarządzać aplikacją.
Troubleshooting
Musisz upewnić się, że rola IAM używana do taska ECS ma uprawnienia do korzystania z komendy ecs:ExecuteCommand
.