Slide 1

Slide 1 text

AWS AppConfigとOpenFeature で手早く機能フラグを導入する [LT size] id:arthur-1 株式会社はてな 2024-11-26 CloudNative Days Winter 2024 船上LT会

Slide 2

Slide 2 text

Arthurと申します 株式会社はてな Mackerel開発チーム 「オブザーバビリティの実現」チーム テックリード・プロダクトオーナー 𝕏: @Arthur1__ CNDW2024のOSS展示企画に参加して います。現地でお会いしましょう! 2

Slide 3

Slide 3 text

Mackerel作ってます 3

Slide 4

Slide 4 text

[LT size]? 本編にProposalを出していました(不採択) 1/4サイズで雰囲気だけでもお届けできればと思います より詳細に興味がある方は、本日の船上LT会もしくは CNDW2024の会場でぜひディスカッションしましょう! 4

Slide 5

Slide 5 text

Amazon ECS 上で動く マイクロサービスに 5

Slide 6

Slide 6 text

フィーチャーフラグ を導入したい 6

Slide 7

Slide 7 text

手っ取り早く 欲しい 7

Slide 8

Slide 8 text

業界の標準には 則りたい 8

Slide 9

Slide 9 text

自前で作り込むと 将来困るかも 9

Slide 10

Slide 10 text

フラグの更新と デプロイは 分離したい 10

Slide 11

Slide 11 text

アプリケーションの可用性 を落としたくない 11

Slide 12

Slide 12 text

外部のFFSaaS (Feature Flag as a Service) 新規契約する時間もない 12

Slide 13

Slide 13 text

🤔 13

Slide 14

Slide 14 text

💡 14

Slide 15

Slide 15 text

OpenFeature × AWS AppConfig 機能フラグ 15

Slide 16

Slide 16 text

登場人物 16

Slide 17

Slide 17 text

OpenFeature フィーチャーフラグの標準化を目指すプロジェクト CNCFのIncubating Projectsに採択されている https://openfeature.dev/ フィーチャーフラグの評価をするAPIを、特定のベン ダーに依存しない形で提供する 17

Slide 18

Slide 18 text

OpenFeature Client フィーチャーフラグのバックエンドに合わせて、Providerを 差し替える 18 Introduction | OpenFeature https://openfeature.dev/docs/reference (Licensed under CC BY 4.0)

Slide 19

Slide 19 text

様々なProvider https://github.com/open-feature/go-sdk-contrib ● 環境変数 ● flagd ● ConfigCat など、self-hosted / SaaS問わず、様々なフィーチャ フラグバックエンド向けに用意されている 19

Slide 20

Slide 20 text

OpenFeatureのいいところ ● 標準に統一することで、認知負荷が減らせる ● 後述のAppConfigをやめて別のものにしよう、となって も、コードの差分はProviderを差し込むところだけ ● 標準化により、「機能フラグはこういうことができるべ きだ」というラインが宣言されている ○ フィーチャーフラグの仕組みを自作するにしても、 道標になる 20

Slide 21

Slide 21 text

AWS AppConfig 機能フラグ AWS AppConfig アプリケーションのデプロイを行わずとも、アプリケー ションの設定を調整できる、AWSのマネージドサービス 機能フラグという種類の「設定」では、フィーチャーフラグ に特化した形で構造化されたデータを扱える 21

Slide 22

Slide 22 text

AppConfig機能フラグの画面 22

Slide 23

Slide 23 text

AppConfig機能フラグの画面 23 各フラグの値をBooleanで設定できる

Slide 24

Slide 24 text

AppConfig機能フラグの画面 24 属性としてBoolean以外の情報も付与可能 有効/無効だけでなく制限値を定義する時に便利

Slide 25

Slide 25 text

バリアントも作れる 25 デフォルトはfalseだけど、このユーザーならtrue、と いうフラグも作れる

Slide 26

Slide 26 text

AppConfigのいいところ ● AWSを利用している環境に導入しやすい ● 可用性が十分ある。SLA 99.9% ○ cf.) https://aws.amazon.com/jp/config/sla/ ● AppConfig機能フラグは、OpenFeatureにおける フラグ評価の各種概念と1対1でマッピングできる 26

Slide 27

Slide 27 text

OpenFeature×AppConfig OpenFeatureとAppConfigを組み合わせると、今回の ニーズに叶うソリューションになりそう! しかし現時点で、OpenFeature/AWSともに AppConfig向けのOpenFeature Providerを提供して いない! 27

Slide 28

Slide 28 text

じゃあ どうする? 28

Slide 29

Slide 29 text

ないなら 作ればいいじゃない 29

Slide 30

Slide 30 text

AWS AppConfig Provider https://github.com/Arthur1/openfeature-provid er-go-aws-appconfig/ AWS AppConfig機能フラグをバックエンドとする OpenFeature Go SDK向けProvider 今回具体的な実装には触れませんが、比較的簡単に作れました 30

Slide 31

Slide 31 text

構成図 31 AWS AppConfig Amazon ECS Task AWS AppConfig Agent My App OpenFeature Go SDK AWS AppConfig Provider (自作) +

Slide 32

Slide 32 text

AppConfig Agentを経由 ECS/EKS/Lambda向けにAWS AppConfig Agentが提供され ている シンプルなHTTPコールで設定を取得できる 設定を一定期間キャッシュすることで、コストを削減&パ フォーマンスの劣化防止 ProviderとしてもAppConfigに直接APIを投げるのではなく、 AppConfig Agentに対してリクエストを投げている 32

Slide 33

Slide 33 text

コード例 33 // AppConfigのConfigurationに関する名前をセットして providerを実体化 provider := appconfigprovider.New("appName", "envName", "cfgName") // 以降のコードは AppConfig Providerに依らない openfeature.SetProvider(provider) client := openfeature.NewClient("app") evalCtx := openfeature.NewTargetlessEvaluationContext(map[string]any{ "userID": "12345", }) isEnabled, err := client.BooleanValue(ctx, "feature1", false, evalCtx)

Slide 34

Slide 34 text

おしまい 34