OPS

Google Cloud Next San Francisco ’23 現地レポート

【Google Cloud Next San Francisco ’23 現地レポート】モダンアプリケーション開発のベストプラクティスについて

2023.08.31

本記事のポイント

Googleが主催する世界的なイベント「Google Cloud Next」が、2023年8月29日~8月31日にかけてアメリカのサンフランシスコにて開催されます。本ブログでは、Google Cloud Next San Francisco '23に実際に参加したエンジニアから、イベントの様子やKeynote(基調講演)の現地レポートをいち早くお届けします。

今回は、08/30(水)11:45~12:30(現地時間)に実施されたAja Hammerlyによる講演の内容をお伝えします。



Google Cloud Next とは?

Google Cloud Next ’23とは、Google Cloud のインスピレーション、イノベーション、教育の世界的な展示会です。

意思決定者、開発者、そしてアクセシブルでスケーラブル、かつ社会的責任のあるクラウドに情熱を燃やすすべての人々が一堂に会し、課題、ソリューション、10 倍のアイデア、ゲームを変えるテクノロジーを共有する場です。

Ten best practices for modern app development

今回は、08/30(水)11:45~12:30に開催された「Ten best practices for modern app development」に関する講演をリポートします。

公式サイトによるセッション紹介を日本語訳すると、以下のような内容です。

最新のアプリケーションは複雑で高度に分散しており、多くの場合、数百ものマイクロサービスやクラスタが組織内のチームに分散しています。計画や準備なしにそれらを構築すると、非効率や下流の頭痛の種につながる可能性があります。コンテナ、API、人工知能や機械学習を使ってアプリケーションを構築しているなら、このセッションに参加して、モダンアプリ開発のベストプラクティス上位10を学びましょう。DIYとマネージド・サービス、セキュリティ、観測可能性、DevOps、プラットフォーム・エンジニアリング、コスト最適化などの分野を取り上げます。この実践的なセッションから、日常業務にすぐに活用できる知識とツールを得ることができます。

引用元:Google Cloud Next San Francisco ’23

登壇者

登壇者はこちらの方です。

会社名 登壇者 役職
Google Cloud Aja Hammerly(アジャ・ハマリー) Developer Relations Manager
Two Sigma Investments Aji Joseph(アジ・ジョセフ) Managing Director
Google Cloud Jago Macleod(ジェイゴ・マクロード) Engineering Director, Kubernetes / Anthos

内容

セッションの構成

まずはじめにモダンアプリケーション開発とは何か、それ自体にどのような価値があるかを述べています。

その後、モダンアプリケーション開発におけるストプラクティスについて分野ごとに述べています。

「モダンアプリケーション開発」とは

クラウド前提かつコンテナ上での開発を行う、自動かつ高品質なデプロイを頻繁に行うことができるようにサービスレベルでコンポーネント化するといった、アプリケーションの設計・構築・管理の手法を継続的に更新することを表す言葉です。

モダンアプリケーション開発を行うことで、デプロイの品質を向上させるほか、システムの信頼性を高めることができると述べています。

また、「モダンアプリケーション開発は旅である」として、一意の正解があるわけではなく、アプリケーションごとにベストプラクティスが出てくる可能性があると述べています。

つまりこの後紹介されるベストプラクティスに関しても、あくまで「一般的には」最適な手法であり、丸ごと適用しても完璧な手法にはならない可能性があるという意味なのでしょう。

モダンアプリケーション開発における10のベストプラクティス

上記を踏まえた上で、現時点で考えられるベストプラクティスについて以下の分野ごとに述べられました。

  • ステートレスサービスを意識した設計
  • スケーリングを意識した設計
  • コンテナ最適化
  • Infrastructure as Code(IaC)
  • サプライチェーンセキュリティ
  • クラウドネイティブなパイプライン
  • マネージドサービスの使用
  • 可観測性
  • コスト管理
  • クラウドベースの開発

  • 1つずつ見ていきましょう。

    ステートレスサービスを意識した設計

    スケーリングの容易さや急な変更対応が可能であることが評価されています。

    採用する際は以下のことを意識する必要があると述べています。

  • アプリケーションを疎結合になるよう分割し、それぞれが独自のインターフェースを保持
  • イベント駆動型アーキテクチャの活用
  • 分散型の独立したデータストアの用意
  • コンテナやサーバーレスなどのインストラクチャの使用

  • スケーリングを意識した設計

    アプリケーションのパフォーマンスと信頼性を維持しながらビジネス成長を促進し、かつコストの削減を図るために採用すべきとされています。

    スケーリングの種類や実装方法、またスケーリングそのものだけでなくキャッシュや非同期通信の活用も検討すべきと述べています。

    コンテナ最適化

    すでにコンテナサービスを使用している・使用予定の場合、ビルド速度やメンテナンスとパッチ適用の容易性を向上させるためにも、ソースの最適化を図ることが勧められています。

    最適化の方法として、必要最小限のコンテナイメージの使用や自ら実装できそうなレベルの不要な依存関係を取り除くといった方法で、コンテナサイズを小さくすることが挙げられています。

    Infrastructure as Code(IaC)

    一貫性を保ったままデプロイの効率性やセキュリティを担保するため、IaCの採用が進められています。

    IaCツールの選択肢はいろいろありますが、Google CloudでIaCを実現する場合、TerroformをツールとしてCloud Buildと組み合わせることが推奨されています。

    TerraformとCloud Buildを組み合わせることで、インフラとアプリケーションの両方を含めたシステム全体のコードをGitを使って管理することでインフラ管理を効率的にするGitOpsという手法を取り入れることができます。

    サプライチェーンセキュリティ

    ソフトウェアサプライチェーンにおける脆弱性の侵入は、開発段階からリリース後のランタイム期間のあらゆる部分で起き得ます。

    Google Cloud上でサプライチェーンセキュリティを実現する場合、以下のサービスや機能が有用であると述べられています。

  • Cloud Build(SLSAと組み合わせた脆弱性管理)
  • Artifact Registry(Cloud IAMを通したきめ細かいアクセス制御)
  • Artifact Analysis(脆弱位スキャンと分析)
  • Binary Authorization(限定されたソースからビルドされたコンテナイメージのデプロイのみを許可する)

  • クラウドネイティブなパイプライン

    先述のIaCやサプライチェーンセキュリティを踏まえた上で、Google Cloud環境でCI/CDを実現したい場合、以下のサービスが有用であると述べています。

  • Cloud Build(サーバーレス、すべてのプログラミング言語対応、ニーズに合わせたマシンタイプ選択やネットワーク構築)
  • Cloud Deploy(フルマネージドかつスケーラブルなCDソリューション、一度のデプロイで複数ターゲットを指定可能)


  • ただし上記サービスを必ず使わなければいけないというわけではなく、JenkinsなどのクラウドベースのCI/CDパイプラインではないツールを使用することも可能と述べています。

    マネージドサービスの使用

    アプリケーション開発に専念しながら耐久性やコストパフォーマンスを向上させることを目的として、マネージドサービスの使用が勧められています。

    ただし、ベンダーロックやカスタマイズ範囲の制限への理解、そして過度なサービス適用により逆にコストが嵩んでしまわないように考慮する必要があると述べています。

    可観測性

    システム全体のデータのやりとり、またSLOの理解を深めるために、ログやメトリクスの観測可能性を実現すべきと述べています。

    Google Cloudでは以下のサービスを使用して可観測性を実現することができると述べています。

  • Cloud Operations Suite
    モニタリング、ロギング、トレース、デバッガ、プロファイラなどの高度な監視サービスを一元化した機能を提供

  • Google Cloudモバイル専用App
    本番環境のアラート検知・対応、管理している各環境の状態把握

  • コスト管理

    アプリケーション開発におけるコスト管理では、詳細な分析を要する定期的なレビューと最適化、また使用予算の監視という課題があると述べています。

    これらを解決するためのベストプラクティスとして、以下が挙げられます。

  • 自動スケーリングによる需要に応じたコスト運用
  • 要件に適したマシンタイプの選択による過剰コストの削減
  • リソースのライフサイクル管理の実施
  • ゾーン間、リージョン間、クラウド間におけるデータ転送の最適化の実施
  • 確約利用割引の活用

  • クラウドベースの開発

    開発環境のセットアップとメンテナンスコストを削減し、アプリケーション開発の生産性を向上するためにも導入すべきと述べています。

    Google Cloudでは、以下の特徴を持つCloud Workstationsを使用することで実現できるとのことでした。

  • クラウド内コンテナをベースとした開発環境の提供
  • サポートするIDE数の多さ
  • プロビジョニングから開発環境の用意までが数分で完了
  • 開発環境を使用している期間のみコスト発生

  • 要点まとめ

    モダンアプリケーション開発において推奨されるベストプラクティスを採用することで、アプリケーションの耐久性やセキュリティを向上し、ビジネス目標の達成を促進することができると述べています。

    ただし冒頭で説明した通り、それぞれのアプリケーションの設計や状態に応じたベストプラクティスを選定すべきであるとのことです。

    感想

    特にソフトウェアサプライチェーンにおける脆弱性に対するサービスについて、Artifact Analysisなど開発者が意図しないところで自動的に防止することが可能という点に魅力を感じました。

    まとめ

    今回はモダンアプリケーション開発の考え方やそれを実現するためのGoogle Cloudサービスについて紹介しました。本記事がアプリケーション開発に携わる方々に少しでも参考になると幸いです。