AWS fargateについてまとめています。
AWS fargateは、サーバーレスでコンテナを実行できる環境
自分でコンテナの実行環境やクラスターを構築しなくても、「このコンテナを実行したい。実行環境はおまかせ」といった感覚で、利用できるサービスなんですね。
デメリットは、固定環境で実行しないため、パブリックIPの固定割当ができない点と、SSHやdocker execが使えない点です。
関連)AWS Fargate(サーバーやクラスターの管理が不要なコンテナの使用)| AWS
AWS Fargateは、Amazon Elastic Container Service (ECS) と Amazon Elastic Kubernetes Service (EKS)で動作する、コンテナ向けサーバーレスコンピューティングエンジン。Fargate 使用することで、コンテナを動作させるサーバやクラスタの構築作業をおこなうことなく、アプリケーションの開発に集中できます。Fargateはサーバーのプロビジョニングと管理が不要。アプリケーションごとにリソースを指定して、使用したぶんのみ料金を支払う従量課金制です。設計段階からのアプリケーション部分とインフラ部分を分離でき、強固なセキュリティを実現できます。
EC2インスタンス起動との違い
Fargateを使ったアプリケーション実行では、EC2インスタンスの起動が不要です。実行時に、AWSの管理でコンテナの実行環境を用意してくれるんですね。EC2のスケーリング時には、インスタンスのリソースも含めてうまくスケーリングさせる必要があり煩雑になりますし、バッファとして余裕を持っている分も含めてインスタンスの課金が必要です。
しかし、Fargateだと、必要な分だけ課金されるのでコストの節約になるんですね。
デメリットは、サーバレス実行型なので、アプリケーションの実行が終了すると実行環境自体が消滅してしまう点。そのため、常にサービスを起動しておくようなアプリケーションや、アプリケーション側で常にデータの更新が必要な場合は向きません。GPUサポートやWindowsコンテナの実行にはFargateは不向きとなります。
AWS Fargateの使い方
AWS Fargateは、ECSとEKSの両方で動作するコンテナ向けサーバレスコンピュータエンジン。AWSマネジメントコンソールから、AWS Fargateのトップページに移動します。
関連)AWS Fargate(サーバーやクラスターの管理が不要なコンテナの使用)| AWS
「AWS Fargateの使用を開始する」をクリックすると、Amazon Elastic Container Service(ECS)のページに遷移します。「今すぐ始める」をクリックします。
Fargateの使用には以下の設定が必要になります。
- コンテナの定義とタスク
- サービスの定義
- クラスタの設定
コンテナの定義では、あらかじめ用意されているプリセット(sample-app、nginx、tomcat-webserver)を選ぶか、customからユーザが設定を行います。
タスク定義では、タスク定義名とタスクサイズ(タスク目盛りとタスクCPU)を指定します。
サービス定義では、サービス名、必要なタスクの数、セキュリティグループを新規作成するか、ロードバランサーの種類を指定します。
クラスター設定では、クラスター名、VPC ID、サブネットの設定を行います。デフォルトではVPC IDもサブネットも新規作成する設定となっています。
指定した定義内容や設定内容が表示されるので「作成」をクリックすると、Fargateを使用したAmazon ECSが作成されます。
EC2インスタンスで実行されているアプリケーションをコンテナ化する例
EC2インスタンスで実行されているアプリをFargateが管理するコンテナで実行するには以下の手順が必要になります。
- Docker イメージを作成する
- Docker イメージを構築する
- Docker イメージを Amazon Elastic Container Registry (ECR) にプッシュする
- AWS Systems Manager Parameter Store に設定情報を格納する
- Fargate タスク定義とクラスターを作成する
- Fargate タスクを開始し、アプリケーションを確認する
関連)AWS Fargate を使用してサーバーレスの Twitter リーダーを構築する | Amazon Web Services ブログ
準備作業として、AWS CLIコマンドとDockerコマンドを実行できる環境を設定する必要があります。EC2インスタンスを起動してDockerをインストールしましょう。Docker環境にAWS CLIをインストールするには、以下を参考にしてください。
【関連記事】
▶AWS CLIのインストール方法 AWSアクセスキーの登録と疎通確認
EC2オプションを使用する場合は、IAMロールを作成してインスタンスにアタッチする必要があります。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "ssm:PutParameter", "firehose:*", "iam:CreateRole", "ecr:*", "iam:AttachRolePolicy", "ssm:GetParameter" ], "Resource": "*" } ] }
実行環境をFargateに移すにあたり、アプリケーションの変更が必要です。もとのアプリSocialAnalyticsReaderでは、設定ファイルからTwitter API資格情報を読み取る仕様になっています。コンテナ上には可変する情報を保持できないため、設定ファイルの内容をAWS Systems Manager Parameter Storeのようなサービスに設定を保存するよう変更が必要なんですね。
もし、コンテナ上に設定ファイルを配置してしまうと、設定ファイルを変更するごとにコンテナの再構築が必要になってしまいます。
上記のサンプルでは、以下の行を変更して、AWS Node SDKを使ってAWS Systems Manager Parameterストアから設定をおこなうように設定変更しています。
var twitter_config = require('./twitter_reader_config.js');
以降、Dockerイメージの作成、ECRへのコンテナ登録、Fargateの設定をおこなってEC2インスタンスで実行していたアプリのコンテナ化をおこなうことができます。
AWS Fargateのまとめ
- AWS Fargateはサーバレスでコンテナを実行する環境
- Fargateの使用は、Amazon Elastic Container Service(ECS)から設定をおこなう
- EC2で動作するアプリをコンテナ化するには、設定ファイルなどを外部サービスに「外出し」する必要あり