Alpine LinuxではAWS CLI v2は使用できない

原因は、下記参考サイトの通りでAWS CLI v2は「glibc」を必要とするが、Alpine Linuxでは「musl libc」を使用しており「musl libc」ではAWS CLI v2が動作しないということでした。

参考サイト

様々な理由があって「ruby:2.2-alpine」を使っていて、試しに参考サイトからリンクのあったStack Overflowの対応は行ってみましたが
glibc-binで失敗したので断念しました。Alpineに拘る必要は特になかったのでDebianのイメージに変更しました。

Amazon ECSでのFarGate設定について簡単にまとめておく

Amazon ECS(以下ECS)は、AWS上で展開されているコンテナオーケストレーションサービス。
コンテナを動作させる為の選択肢としてEC2とFarGateが用意されているが今回はFarGateの話。

ただ、基本的にECS上の設定を変更すればEC2とFarGateで同じコンテナを使って動作させることもできる。

Amazon ECR

ECSでは、コンテナレジストリからコンテナイメージのPullを行って動作させる。
その為、コンテナレジストリが必要なるがAWSではAmazon ECR(以下ECR)というレジストリを用意している。
ECRはECSに統合されている為、ECRにイメージをPushしておけば簡単にECSからイメージを利用できる。

手元のマシンからECRへイメージをPushする方法については下記ドキュメント
https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html

AWS CLIを使った方法で前半はAWS CLIのセットアップ。あとはDockerイメージをビルドして、タグをつけて、Pushするだけ。

Amazon ECS

ECSでは大きく3つのリソースをセットアップすることになる。

  1. クラスター
  2. タスク定義
  3. サービス
クラスター

クラスターはFarGate用とEC2用で作成する際に必要なパラメータがとても異なる。
EC2クラスターはEC2を使用するのでEC2の設定が必要になる。例えばインスタンスタイプとかだ。
それに対してFarGateは配置するVPCを選択or作成するだけで完了する。

タスク定義

ECSでコンテナを実行するにはタスクを実行する必要がある。そのタスクの定義を行うのがタスク定義。

  • タスク名
  • 実行ロール
  • ネットワークモード
  • タスクメモリ
  • タスクCPU
  • コンテナ定義
  • ボリューム

などの設定を行う。
注意すべき点としてはFarGateではネットワークモードがawsvpc固定となる。
EC2の場合はbridgeなどいくつか選択肢が与えられ選択することができる。

awsvpcはタスクごとにENI(Elastic Network Interface)を割り当てて通信を行うもの。
各タスクごとに独立したネットワークインターフェースを持つということ。

その為、ネットワークモードがawsvpcのタスク定義を実行する場合には実行するVPCとサブネット、セキュリティグループの指定が必要になる。

もう1つパブリックIPを付与するかどうかの設定がある。
自分はよく忘れがちでCannotPullContainerErrorを出しがちなのだが、ECRからコンテナイメージをPullするにはパブリックIPが必要なる為それを意識して設定すること。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ecs-pull-container-api-error-ecr/

コンテナの定義では主に下記を設定する。

  • イメージURI
  • ポートマッピング
  • 環境変数
  • ストレージ

docker-composeを触っていれば何を指しているかはすぐイメージできると思う。
環境変数については直接値を記述することもできるしAWS Systems Manager パラメータストアから値を参照することもできる。

ボリュームを設定する場合は
タスク定義でボリュームの設定をしてから、コンテナ定義でマウントを設定する必要があることは注意したい。

サービス

タスク定義を作ったらタスク実行することができるようになる。
タスクをただ実行することももちろんできるが、主に永続的に動作させることが目的のタスクの場合はサービスを併用する。

大雑把に言えばタスクとロードバランサーを関連づけるのがサービスという理解でいいのではないだろうか。

有効なサービスでタスクの数が1に設定されているならば、常に1つタスクが実行される状態になる。
例えばタスクを故意に終了してもサービスがタスク数が1に保たれるよう働く為新しいタスクが立ち上げられやがて1つのタスクが動作する状態に戻る。

まとめ

用語がたくさんでてくるがECSにおいてはクラスター、タスク定義、サービスがそれぞれ何を担っているかを理解できれば容易に扱うことができるようになると思う。

真ゲッターロボ 世界最後の日を視聴した

新作「ゲッターロボ アーク」アニメ化決定に伴い、期間限定で過去作の無料配信が行われています。
その中で「真ゲッターロボ 世界最後の日」を視聴しました。

「スーパーロボット大戦D」でこの作品を知ってから初めて見るまで時間がかかってしまいましたね。

スーパーロボット大戦D

スーパーロボット大戦D

  • 発売日: 2003/08/08
  • メディア: Video Game


「スーパーロボット大戦D」以降度々スパロボに登場していることもあってか設定上で新たな発見は殆どなかったです。
年月が経っているので多少忘れている部分はありましたが概ね知っている内容でした。そう考えるとスパロボはとても偉大ですね。

もちろん細かい描写や登場人物は初めて知りましたし、特にゲッタートマホークとストナーサンシャインのスパロボの原作再現度を改めて認識できました。
初めて見た作品に述べる感想ではないかもしれないですがやっぱり好きです。この作品。