はじめに
こんにちは、クラウド事業部の梅本です。
こちらは エーピーコミュニケーションズ Advent Calendar 2023 5日目 の記事となります。
お時間あれば以下の弊社アドベンドカレンダーもぜひ!
Amazon ECS に入門する前はECSが単体のコンテナ実行環境と思っていたのですが、やっていくうちに概念が Kubernetes に近いものがあったので、今回は ECS をKubenetes に当てはめて理解を深めていこうと思います。「Kubernetes におけるパラメータはこれ!」って分かると、自分的には理解が進んだので自身の備忘的にも整理していきます。
全体構成
まずは ECS に出てくる定義的なリソースから。
- タスク定義:マニフェストファイル
- コンテナを実行するための定義
- タスク:Pod
- 実際のコンテナの集合体
- サービス:Deployment(ReplicaSet)
- タスク(Pod)のレプリカ数やデプロイストラテジーを管理する
- クラスター:Namespace
- コンテナ実行の境界
タスク・サービスの比較イメージをざっくり描いてみました。
タスク定義
次に各リソースのパラメータを見ていきたいと思います。 マニフェストファイルにあたるタスク定義では複数のサブ定義があるので、それぞれCloudFormationのパラメータとKubernetesのパラメータで比較して見ていきます。
ECS | Kubenetes | Memo |
---|---|---|
ContainerDefinitions | spec.containers | コンテナの定義 |
Cpu | resources.requests.cpu resources.limits.cpu |
CPU の総必要量 |
ExecutionRoleArn | - | ECS-Agent が使用する IAM Role |
Family | (マニフェストファイル名) | 定義の名前 |
Memory | resources.requests.memory resources.limits.memory |
Memoryの総必要量 |
Tags | - | タグ |
TaskRoleArn | - | Task が AWSリソースを触るための IAM Role |
Volumes | spec.volumes | ボリュームの定義 |
参考
ContainerDefinitions
コンテナの細かいパラメータも見ていきましょう。Kubernetes でいうところの PodSpec のパラメータと比較します。
※私見でパラメータを当てているので、概ねの比較をご容赦ください。
ECS | Kubernetes | Memo |
---|---|---|
Command | args | docker の CMD にマップ。実行コマンドはEntrypointに。 |
Cpu | resources.requests.cpu resources.limits.cpu |
CPU の必要量 |
DnsSearchDomains | dnsConfig.searches | DNSサーチリスト |
DnsServers | dnsConfig.nameservers | DNSサーバー |
EntryPoint | command | entrypoint |
Environment | env | 環境変数 |
EnvironmentFiles | envFrom | ファイルから環境変数セット |
ExtraHosts | hostAlias | 追加の/etc/hosts |
HealthCheck | livenessProbe | ヘルスチェック |
Hostname | hostname | ホスト名 |
Image | image | コンテナイメージ |
Memory | resources.limits.memory | Memory上限値 |
MemoryReservation | resources.requests.memory | Memoryの必要量 |
MountPoints | volumeMounts | マウントポイント |
Name | name | コンテナ名 |
PortMappings | ports | k8s の ports.hostPort |
Privileged | securityContext.privileged | 特権モード |
RepositoryCredentials | - | PullSecret の ECR版 |
Secrets | - | envFrom.secretRef の AWSの各シークレットサービス版 |
StartTimeout | initialDelaySeconds | 起動タイムアウト |
StopTimeout | terminationGracePeriodSeconds | 停止タイムアウト |
SystemControls | securityContext.sysctls | カーネルパラメータ |
User | securityContext.runAsUser | コンテナ実行ユーザ |
WorkingDirectory | workingDir | 作業ディレクトリ |
参考
まとめ
今回はコンテナの定義部分だけでしたが、サービスの定義でデプロイメントのタイプ(RollingUpdate や Blue/Green deployment)なども設定ができそうでした。
Kubernetes と照らし合わせてみると理解が進むのですが、機能が豊富すぎてコンテナを単に起動するだけでも少し勉強が必要に感じました。
リッチな機能を使ってECSだけで十分なコンテナ環境が揃えることができると考えているので、ドンドン使っていければと思います。
APCはAWSセレクトティアサービスパートナー認定を受けております。
その中で私達クラウド事業部はAWSなどのクラウド技術を活用したSI/SESのご支援をしております。
また、AWSの運用自動化ツールも展開しております。