APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

Kubenetes エンジニアから見た Amazon ECS

はじめに

こんにちは、クラウド事業部の梅本です。

こちらは エーピーコミュニケーションズ Advent Calendar 2023 5日目 の記事となります。

お時間あれば以下の弊社アドベンドカレンダーもぜひ!

qiita.com

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 ボリュームの定義

参考

docs.aws.amazon.com

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 作業ディレクトリ

参考

docs.aws.amazon.com

kubernetes.io

まとめ

今回はコンテナの定義部分だけでしたが、サービスの定義でデプロイメントのタイプ(RollingUpdate や Blue/Green deployment)なども設定ができそうでした。

Kubernetes と照らし合わせてみると理解が進むのですが、機能が豊富すぎてコンテナを単に起動するだけでも少し勉強が必要に感じました。

リッチな機能を使ってECSだけで十分なコンテナ環境が揃えることができると考えているので、ドンドン使っていければと思います。


APCはAWSセレクトティアサービスパートナー認定を受けております。

AWSセレクトティアサービスパートナー

その中で私達クラウド事業部はAWSなどのクラウド技術を活用したSI/SESのご支援をしております。

www.ap-com.co.jp

また、AWSの運用自動化ツールも展開しております。

www.ap-com.co.jp

本記事の投稿者: 梅本
コンテナや k8s をメインにインフラ系のご支援を担当しています。
AWS は現在学び直し中! 普段は QiitaZenn に k8s を中心とした記事を投稿しております。よろしければ。