NRIネットコム Blog

NRIネットコム社員が様々な視点で、日々の気づきやナレッジを発信するメディアです

コンテナツールのFinchがついにGAしました!

本記事は  【コンテナウィーク】  4日目の記事です。
💻  3日目  ▶▶ 本記事 ▶▶  5日目  📱

おざわです。最近洗濯機を買い替えました。 乾燥機能がついていてタオルがふかふかになり、私の心もほくほくです。

そんな中、今回はコンテナ界がわくわくする話題についてまとめたいと思います。

Finch、GA!

10/31にFinchがGAされました!

これに伴い公式ページも立ち上がっていたようです。

runfinch.com

今回はこのページ内容も絡めながら、前回私が書いた記事の内容と比較して、 個人的に取り上げたい項目についてまとめてみたいと思います。

改めてFinchとは?

FinchはAWSが開発したコンテナコマンドラインツールです。 詳細は以前私が書いた以下の記事をご覧いただければと思います。

tech.nri-net.com

新たに公開されたページには構成図も載っております。わかりやすいです。

runfinch.com

Finchでできるようになったこと

以前と比較して、Finchでできるようになったことについてまとめてみます。

ECR Credential Helper が使えるようになりました!

詳細についてはこちらです。↓

runfinch.com

このページに倣ってローカルで試してみたいと思います。

ちなみにデフォルトの finch.yaml はこんな感じです。

cpus: 4
memory: 4GiB
snapshotters:
    - soci
creds_helpers:
    - ecr-login
additional_directories:
    - path: /Volumes
vmType: qemu
rosetta: false

下記の部分で credential helper が finch VM にインストールされるようです。

creds_helpers:
    - ecr-login

とりあえずAWSアカウントの ECR Private Registry にいたNginxイメージをPullしてみます。

ちなみに公式ページだと、aws ecr get-login-password の実行結果をパイプでfinchコマンドに渡してあげるような記述になっていますが、 当方 aws-vault で認証情報管理をしているため、こちらで渡してあげるようにします。

➜ aws-vault exec awesome-aws-account -- finch pull xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/nginx:1.23.1-alpine
xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/nginx:1.23.1-alpine:            resolved       |++++++++++++++++++++++++++++++++++++++|
manifest-sha256:4550bf745cc1cdb9bbf415dbef60b33ff5a6cd218e907c0863fcfaeaa6e00ad4: done           |++++++++++++++++++++++++++++++++++++++|
config-sha256:568998804441e25c0b6cb620162648ef70ca77a690dd4f85c86dff426712b8a9:   done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:5056d2fafbf237305281e02d3dd64601e2c86c45773ab3b7816f47e3bd2024be:    done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:f294ffcdfaa8b9d8bf8c0995661ad4cf4f185587cc2313a8cc4b9afc6bb9a6ee:    done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:213ec9aee27d8be045c6a92b7eac22c9a64b44558193775a1a7f626352392b49:    done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:9a1e8d85723aa657f9eefde367fa01a844eeca2091d75fa118b49bbd567d3dc4:    done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:6779501a69bab3ee492a189f6bf25b1bde2a9e879b133b1f3ce1591c31cb11a1:    done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:56424afbb509680a28e24aadb5bd354a0421ca0c0da8531309116637b2c23a53:    done           |++++++++++++++++++++++++++++++++++++++|
elapsed: 4.7 s                                                                    total:  9.7 Mi (2.1 MiB/s)

できました!

これで今までDockerでやってた感じのECRへの接続ができそうです。嬉しい。

SOCI snapshotter が利用可能に!

SOCI snapshotter については下記をご覧いただければと思います。

github.com

ちなみに現状でコンテナイメージにSOCI Indexを付与する方式としては、

  • ローカル端末に上記のsoci-snapshotterをインストールし、環境構築する
  • 下記で提供されるAWS CloudFormation テンプレートを用いてAWS上で環境構築する

aws-ia.github.io

の、2パターンあるようです。

今回Finchがこれに標準で対応したようなので、こちらも試してみます。

設定としては上述の finch.yaml における下記の部分です。

snapshotters:
    - soci

SOCI Indexを付与する場合は、ある程度のイメージサイズがあるイメージに対して実行する必要があるので、
今回は TensorFlowのイメージを使います。理由は重そうという私の決めつけです。

レポジトリ名をタグづけした tensorflow-serving イメージを ECR Private Registry に Push します。

➜ aws-vault execawesome-aws-account -- finch push xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/tensorflow-serving
INFO[0000] pushing as a reduced-platform image (application/vnd.docker.distribution.manifest.v2+json, sha256:f739463e0713d1efe9c7a239cccd360d148e601d85c87025f4c9ca28a2696de5)
manifest-sha256:f739463e0713d1efe9c7a239cccd360d148e601d85c87025f4c9ca28a2696de5: done           |++++++++++++++++++++++++++++++++++++++|
config-sha256:867aa91a5215ed3384ddba1556a9cc6444e6ad5f257483cb9f6a65056a15bdbb:   done           |++++++++++++++++++++++++++++++++++++++|
elapsed: 39.2s                                                                    total:  7.4 Ki (194.0 B/s)
INFO[0074] soci: layer sha256:d698aee1fc67ad8829a42a6037a78a567cf6d98a83b29fe6707597662fe2996e -> ztoc sha256:b33def53b6de22628e54d6b6f7b53f20fddfdc8cbf947dc0a0ea2e3ded571878
INFO[0075] soci: checking if a soci index already exists in remote repository...
INFO[0075] soci: pushing soci index with digest: sha256:da14bd89740b8c451bda5f1d5255fd47cc449f6a9b63fc0ab1dc49b142f07e6d
INFO[0075] soci: pushing artifact with digest: sha256:b33def53b6de22628e54d6b6f7b53f20fddfdc8cbf947dc0a0ea2e3ded571878
INFO[0075] soci: pushing artifact with digest: sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a
INFO[0075] soci: skipped artifact with digest: sha256:f739463e0713d1efe9c7a239cccd360d148e601d85c87025f4c9ca28a2696de5
INFO[0076] soci: successfully pushed artifact with digest: sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a
INFO[0076] soci: successfully pushed artifact with digest: sha256:b33def53b6de22628e54d6b6f7b53f20fddfdc8cbf947dc0a0ea2e3ded571878
INFO[0076] soci: pushing artifact with digest: sha256:da14bd89740b8c451bda5f1d5255fd47cc449f6a9b63fc0ab1dc49b142f07e6d
INFO[0077] soci: successfully pushed artifact with digest: sha256:da14bd89740b8c451bda5f1d5255fd47cc449f6a9b63fc0ab1dc49b142f07e6d

公式ページだと --snapshotter soci オプションを付与しているようですが、なくてもpushできました。

ECRの方を見ても正しくPushされているようです。

ECR Private Registry に SOCI Index が Push されてる

その他

コマンドオプションも以前に比べて色々増えているように感じましたが、全て見切れていないため、またじっくり確認しようと思います。

また最近話題(?)のイメージ署名もできるみたいです。まだあまり使いこなせていないのでこちらも今後試してみようかと思います。

runfinch.com

【小ネタ】デタッチキーを認識してくれるようになりました!

コンテナからログアウトする際に使うシャレオツコマンド Ctrl + Q + P ですが、対応してました。

@bdbf30fbb5de:/$ INFO[0019] read detach keys
~

↑こんな感じでおしゃれにコンテナからログアウトできました。素敵。

まとめ

以前よりもさらに機能が増えたFinch、実運用で使える期待値が上がったように思います。

特に、SOCI snapshotter については利用するためのローカルないしAWS側で環境構築の手間がありますが、
finch VM が起動さえすれば、この機能が使えるようになるのは個人的には魅力的だなーと感じました。

今後も動向を追ってみようと思います。

執筆者尾澤公亮

しがないインフラエンジニアです
AWSの入門書を執筆したりしてます

Twitter:@jstozw

Amazon 著者ページ:尾澤 公亮:作品一覧、著者略歴 - Amazon.co.jp