AWS向けなCloud Native開発をローカル環境でする話
阿河 弘晃, 羽深 修
Cloud Native Local Developers Group
2023/08/26

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

はじめにCloud Native Local Developers Group の紹介
その昔、日本 Eucalyptus ユーザ会というのがあった。(今もあるよ!)

既に「Cloud Native Developers JP」というのもあったけど、何故かマイノリティがちょっかい出してはいけない気がした…
https://cnd.connpass.com/

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

はじめに今日話すこと
Finch を用いたローカル開発環境について: 阿河 弘晃
LocalStack を用いたローカル開発について: 羽深 修

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

Finch♪Finch♪
ちゃっぷちゃっぷ らんらんらん♪

自己紹介
名前: 阿河 弘晃 (あが ひろあき)
経歴
AWS のリセラーにて技術サポート業務を経験
以下を受賞および選出されました
2023 AWS Top Engineers
2023 AWS ALL Certifications Engineers
2023 Japan AWS Ambassadors

現在は同社の Solutions Architect として活動

好きな AWS サービス
Amazon SageMaker

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

Finch♪ Finch♪ ちゃっぷちゃっぷ らんらんらん♪
Finch ってなに？
macOS で動くコンテナ開発用のオープンソースクライアント
AWS が Apache License 2.0 で公開している
Lima、nerdctl、containerd、BuildKit を利用している
2022年11月22日に公開
Finch はアトリ科の鳥の総称 →(らしい。プロジェクトのロゴも鳥の頭だし↓)

きっとアメリカのポストハードコアバンドの Finch は関係ないと思う
同じく関係ないけど Tom Hanks 主演の映画 Finch は良かったです
Finch のトレーラーで流れていた曲が Hans Zimmer の名曲 You’re so Cool に似ていたのが気になる

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

Finch に関する情報源
Github 上のリポジトリ
https://github.com/runfinch/finch

Finch のコントリビューティングガイド
https://github.com/runfinch/finch/blob/main/CONTRIBUTING.md
コントリビュートする一連の流れに必要な情報が書かれているので、一度読むことをお勧めします。

CNCF の slack 上の #finch チャンネル
CNCF の slack は以下のページに参加方法が書いてあります
https://events.linuxfoundation.org/archive/2020/kubeconcloudnativecon-europe/attend/slack-guidelines/

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

Finch に関する情報源
公開時の AWS のブログ
https://aws.amazon.com/jp/blogs/news/introducing-finch-anopen-source-client-for-container-development/というか、ググると日本語の情報もたくさん出てくる

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

Finch に関する情報源

もちろん、日本仮想化技術さんの「とことん DevOps」でも取り上げられています。
Docker Desktopの代わりに「Finch」を使ってみる
https://devops-blog.virtualtech.jp/entry/20230206/1675651483

JAWS-UG でも Finch に関する勉強会が開催されたことがあります。(のでJAWS-UGの勉強会に参加してみよう)
JAWS-UG コンテナ支部 #23 春のFinch特集
https://jawsug-container.connpass.com/event/278191/

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

つまり…

国内にも情報源はたくさんあるよ♪
あれ？改めて私が紹介する必要ない？

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

ご静聴ありがとうございましたって訳にもいかないので、Finch の話を続けます
じゃぁ、どのぐらい使われているのか？
使い古された定番の「Google Trend」

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

って訳にもいかないので、Finch の話を続けます
じゃぁ、どのぐらい使われているのか？
使い古された定番の「Google Trend」

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

Finch が利用している各コンポーネント

Jerome Boyer 氏のブログから転載

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

Docker Desktop と比べると…
FLOSS
Finch: Apache Lincense 2.0
Lima: Apache Lincense 2.0
nerdctl: Apache Lincense 2.0
containerd: Apache Lincense 2.0
BuildKit: Apache Lincense 2.0

でもまだ GUI のダッシュボードは無い
あんなの飾りです。偉い人にはそれがわからんのですよ。

ちなみに全部 Go 言語

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

コマンドの例

インストールは brew コマンド一発♪ (pkg ファイルでのインストールもあるよ)% brew install --cask finch# インストールは brew コマンド一発だけど、以下も初期時に実行してね% finch vm init

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

コマンドの例

Docker コマンドと同じ様に使えるよ# コンテナの起動% finch run --rm public.ecr.aws/finch/hello-finch# コンテナイメージのビルド% git clone https://github.com/runfinch/finch.git% cd finch/contrib/hello-finch% finch build . -t hello-finch

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

コマンドの例

コンテナイメージのアーキテクチャを指定して実行することも同じようにできる% finch run --rm --platform=arm64 public.ecr.aws/localstack/localstack:latest
LocalStack version: 2.2.1.dev
LocalStack build date: 2023-08-25
LocalStack build git hash: bc1aa90e
2023-08-25T22:12:02.405 INFO --- [-functhread5] hypercorn.error: Running on https://0.0.0.0:4566 (CTRL + C to quit)
2023-08-25T22:12:02.405 INFO --- [-functhread5] hypercorn.error: Running on https://0.0.0.0:4566 (CTRL + C to quit)
2023-08-25T22:12:02.427 INFO --- [ MainThread] localstack.utils.bootstrap : Execution of "start_runtime_components" took 2421.31ms
Ready.

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

コマンドの例

あとは alias に設定するのもアリです% alias docker='finch'% docker --versoin
finch version v0.8.0

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

amd64 なイメージ？ arm64 なイメージ？
試しに amd64 アーキテクチャと arm64 アーキテクチャどちらのコンテナイメージを作る方法を紹介するよ。なぜなら IntelCPU の人も M1 チップな人も居るよね？
# M1 チップな環境で linux/amd64 なコンテナイメージを作る場合% finch build --platform linux/amd64 -t aga/rabbit:0.5-amd64# Intel CPU な環境で linux/arm64 なコンテナイメージを作る場合% finch build --platform linux/arm64 -t aga/rabbit:0.5-arm64

なんでタグに -amd64 とか -arm64 とかつけているのかと言うと docker コマンドでマルチプラットフォームなイメージを作成するときに manifest を作成して、複数アーキテクチャを1つのタグにまとめるときに使うので。ただし finch コマンドにはmanifest サブコマンドがない…

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

おまけ

Q: ぼく macOS 持ってないんやけど
A: EC2 の Mac インスタンス使えばいいと思うよ

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

え？ ローカル開発じゃない？

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

今度こそ本当にご静聴ありがとうございました。

いきなり AWS
上で開発せずに LocalStackで開発をする話

自己紹介
羽深 修 (はぶか おさむ)
Twitter: @habuka036 改め @habukapperd
Facebook: osamu.habuka 改め habukapperd

経歴
EucalyptusでLiveDVD芸人
Wakame-vdcで茶番ジェリスト
OpenStackで鰻師などなど、以前は IT 芸人を目指して(？)いました…
が、才能がないので諦めてマトモな登壇をするよう心を入れ替えました

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

LocalStack の情報源
本家サイト
https://localstack.cloud/日本語情報もググればたくさん♪

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

つまり…

国内にも情報源はたくさんあるよ♪
あれ？改めて私が紹介する必要ない？

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

ご静聴ありがとうございましたたとえばこんな開発の流れがあるとする

Serverless なものを AWS に作る場合当然ながら、開発時からがっつり AWS の利用料が発生することになる。

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

でも、こんなケースない？

お客様 or 営業は、開発期間のクラウド利用料を想定していない
お客様「え？クラウド利用料ってランニングコストでしょ？なんでサービスインする前から請求されるの？」営業「え？開発時のクラウド利用料？見積したのはサービスインしたあとのクラウド利用料だけだよ？」

現場に来る皺寄せ
PM「部長から『なるべく開発時にクラウド使わずに開発してほしい』って言われたので、技術力でなんとか…」
現場「技術力でクラウド利用料を回避とか無茶ぶり…orz」

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

でも、こんなケースない？

暴走する私
10年ほど前の私「えー？社内にプライベートクラウドの環境作って、そこで開発すればいいじゃーん、ほら Eucalyptus ってのあるよ？ Wakame-VDC とかあるよ？」
今の私「さすがにサーバレス系のサービスは Eucalyptus じゃ厳
しいので、SAM local や localstack で頑張ってください

現実的な思考回路を持つ現場
現場「開発がスタートしているのに新しい概念やツールをぶちこんでくるの勘弁して。時間的余裕ないの。また今度の開発でね…」

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

誰も幸せになれない現実

そもそも営業がお客様に開発時のクラウド利用料をネゴればいいんじゃね？

そこでローカルで開発することを啓蒙しようとしま
したServerless なものを AWS に作る場合
例えば以下のような流れにする
コードを書くのは今まで通りローカルでできるから怖くないよ
Try & Error もローカルでやるから、クラウド利用料の爆発も怖くないよ

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

LocalStack is 何？
docker 上で動く AWS の各サービスを模した環境を作れるもの
無料プランと有料プランがある

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

使えるサービス
AWS のサービス名
AWS Certificate Manager(ACM)
Amplify
API Gateway

利用可能プラン

Pro
Authorizers に関する機能はPro
API Gateway v2
Pro
API Gateway Management API
Pro
AppConfig
Pro
Application Autoscaling
ProAppSync
Pro
AthenaPro
AutoscalingPro※ 特に記載ないものは Community プランで利用可能※ 「Pro」 = 「Team」「Enterprise」も同様に利用可能です
AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

使えるサービス
AWS のサービス名
利用可能プランBackup
Pro
Batch
Pro
AWS Cost Explorer (CE)Pro
CloudFormation
CloudFrontPro
CloudTrail
Pro
CloudWatch
CodeCommit
Pro
Cognito Identity
Pro
Cognito Identity Provider
Pro(IdP)※ 特に記載ないものは Community プランで利用可能※ 「Pro」 = 「Team」「Enterprise」も同様に利用可能です
AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

使えるサービス
AWS のサービス名
ConfigDocumentDB
DynamoDB

利用可能プラン
Pro
Backup に関する機能 は Pro
版のみ

DynamoDB Streams
Elastic Compute Cloud (EC2)Elastic Container Registry
Pro(ECR)
Elastic Container Service
Pro(ECS)
Elastic File System (EFS)Pro
Elastic Kubernetes Service
Pro(EKS)
ElastiCachePro※ 特に記載ないものは Community プランで利用可能※ 「Pro」 = 「Team」「Enterprise」も同様に利用可能です
AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

使えるサービス
AWS のサービス名
利用可能プラン
Elastic Beanstalk
Pro
Elastic Load Balancing (ELB) Pro
Elastic Load Balancing v2Pro(ELBv2)
Elastic Map Reduce (EMR)
Pro
Elasticsearch Service (ES)EventBridge (Events)
Firehose
Glacier
Glue
Identity and Access
Management (IAM)※ 特に記載ないものは Community プランで利用可能※ 「Pro」 = 「Team」「Enterprise」も同様に利用可能です
AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

使えるサービス
AWS のサービス名
Analytics, Data, Wireless(IoT)Managed Streaming for Kafka(MSK)
KinesisKinesis Analytics
Kinesis Analytics v2
Key Management Service (KMS)
Lake Formation
Lambda

利用可能プラン
ProProPro
Pro
Pro
Custom Images に関する機能
は Pro 版のみPro

LayersLogs※ 特に記載ないものは Community プランで利用可能※ 「Pro」 = 「Team」「Enterprise」も同様に利用可能です
AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

使えるサービス
AWS のサービス名
利用可能プランMediaStorePro
MediaStore Data
Pro
Managed Workflows forPro
Apache Airflow (MWAA)
Neptune DB
Pro
OpenSearch Service
Organizations
Pro
Quantum Ledger Database
Pro(QLDB)
Quantum Ledger Database
Pro
Sessions
Relational Database Service
Pro(RDS) / Aurora Serverless
Relational Database Service
Pro(RDS) Data
※ 特に記載ないものは Community プランで利用可能※ 「Pro」 = 「Team」「Enterprise」も同様に利用可能です

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

使えるサービス
AWS のサービス名
利用可能プラン
RedshiftPro
Redshift Data
Pro
Resource Groups
Resource Groups Tagging API
Route53
Route53 Resolver
Simple Storage Service (S3)
Simple Storage Service (S3)Control
SageMaker
Pro
SecretsManager※ 特に記載ないものは Community プランで利用可能※ 「Pro」 = 「Team」「Enterprise」も同様に利用可能です
AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

使えるサービス
AWS のサービス名
Serverless Repo
Service Discovery (CloudMap)
Simple Email Service (SES)
Simple Email Service (SES)
v2
Simple Notification Service(SNS)
Simple Queue Service (SQS)
Systems Manager (SSM)
StepFunctions
Security Token Service (STS)利用可能プラン
ProProPro
Pro

Assume Role に関する機能はPro 版のみSupport※ 特に記載ないものは Community プランで利用可能※ 「Pro」 = 「Team」「Enterprise」も同様に利用可能です
AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

使えるサービス

AWS のサービス名
利用可能プラン
Simple Workflow Service(SWF)
Timestream (query, write)
ProTransfer
ProX-RayPro※ 特に記載ないものは Community プランで利用可能※ 「Pro」 = 「Team」「Enterprise」も同様に利用可能です

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

localstack のインストール

インストール方法
https://docs.localstack.cloud/getting-started/installation/

例えば macOS では以下のように brew コマンドで% brew install localstack/tap/localstack-cli
ついでに awslocal コマンドのインストールも% pip install awscli-local

AWS向けなCloud Native開発をローカル環境でする話Powered by Rabbit 3.0.3

localstack on finch

finch の環境で LocalStack を動かす場合は以下のように実行してみました% finch run --rm --platform=arm64 public.ecr.aws/localstack/localstack:latest
LocalStack version: 2.2.1.dev
LocalStack build date: 2023-08-25
LocalStack build git hash: bc1aa90e
2023-08-25T22:12:02.405 INFO --- [-functhread5] hypercorn.error: Running on https://0.0.0.0:4566 (CTRL + C to quit)
2023-08-25T22:12:02.405 INFO --- [-functhread5] hypercorn.error: Running on https://0.0.0.0:4566 (CTRL + C to quit)
2023-08-25T22:12:02.427 INFO --- [ MainThread] localstack.utils.bootstrap : Execution of "start_runtime_components" took 2421.31ms
Ready.

hypercorn.error という文字が出力されているが、これはError ではない

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

localstack on finch
しかし、awslocal コマンドで LocalStack の S3 にバケットの作成をするも LocalStack のエンドポイントに接続できない旨のエラーが…
% awslocal s3 mb s3://localstack-bucket
make_bucket failed: s3://localstack-bucket
Could not connect to the endpoint URL: "http://localhost:4566/localstack-bucket"

画面表示の都合上、途中で改行して見えにくいが、PORTS に本来表示されるべきコンテナ側とホスト側のポートのマッピングがない…
% finch ps
CONTAINER ID
IMAGE
COMMAND
CREATEDSTATUS
PORTS
97272453111a
public.ecr.aws/localstack/localstack:latest"docker-entrypoint.sh"
7 minutes ago
Up

AWS向けなCloud Native開発をローカル環境でする話

NAMES
localstack-97272

Powered by Rabbit 3.0.3

localstack on finch

Linux 環境で実行している LocalStack は以下のようにポートがマッピングされている…
$ docker ps
CONTAINER ID IMAGE
CREATEDSTATUS
09c98047ca2c localstack/localstack
4 minutes ago Up 4 minutes (healthy)COMMAND
PORTS"docker-entrypoint.sh"
127.0.0.1:4510-4559->4510-4559/tcp, 127.0.0.1:4566->4566/tcp, 5678/tcp

AWS向けなCloud Native開発をローカル環境でする話

NAMES
localstack_main

Powered by Rabbit 3.0.3

localstack on finch

インストールのドキュメントには docker-compose を用いた実行方法も書いてあったので、それを参考に以下のように finch
compose で起動してみるも…
% finch compose up -d(中略)INFO[0047] Creating container localstack_main
FATA[0000] create container failed validation: containers.Labels: label key and value
length (4162 bytes) greater than maximum size (4096 bytes), key: nerdctl/ports: invalid argument
FATA[0047] error while creating container localstack_main: exit status 1
FATA[0047] exit status 1label key の長さが 4k 以上で駄目と怒られる…

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3

余談
なお、podman desktop をアンインストールせずに finch をインストールして LocalStack を起動させようとしたときは、以下のように podman の設定が参照されうまくいかないため、環境は綺麗にしておくこと大事w% localstack start_________ ____/ /____ _________ _/ / ___// /_____ ______/ /__/ // __ \/ ___/ __ `/ /\__ \/ __/ __ `/ ___/ //_// /___/ /_/ / /__/ /_/ / /___/ / /_/ /_/ / /__/ ,</_____/\____/\___/\__,_/_//____/\__/\__,_/\___/_/|_|
� LocalStack CLI 2.2.0[06:24:23] starting LocalStack in Docker mode �localstack.py:409──────────────────────────────────────────────
LocalStack Runtime Log (press CTRL-C to quit) ───────────────────────────────────────────────ERROR: '['docker', 'ps']': exit code 125; output: b'Cannot connect to Podman. Please verify
your connection to the Linux system using `podman system connection list`, or try `podman machine init`and `podman machine start` to manage a new Linux VM\nError: unable to connect to Podman socket:
failed to connect: dial tcp 127.0.0.1:64477: connect: connection refused\n'Error: Docker could not be found on the system.
Please make sure that you have a working docker environment on your machine.

AWS向けなCloud Native開発をローカル環境でする話

Powered by Rabbit 3.0.3