Toilを無くして徒然なるままに日暮し硯に向かひたい

生成AIアプリケーション開発などを行うエンジニアのブログです。

生成AIアプリケーション開発入門ハンズオン

genai-users.connpass.com

この記事は、日本生成AIユーザ会 #1 生成AIアプリケーション開発入門ハンズオンの資料です。

アーカイブ動画はこちら

youtu.be

自己紹介

小渕 周(こぶち しゅう)

2023年12月株式会社スリーシェイクに入社

Sreake事業部 エンジニア

生成AIアプリケーション開発に従事

sreake.com

発表内容

  • Python + LangChain + OpenAIで簡単なサンプルコードを実行しながら生成AIアプリケーション開発についてご説明していきます。
  • プロンプトエンジニアリングについても学べる内容となっています。
  • 最後に少しRAGアプリも紹介します。

使用するソースコード

https://github.com/shu-kob/langchain-sample-app

Pythonを使う理由

  • LangChainライブラリがJavaScript(TypeScript)版より情報が多い

OpenAIを使う理由

  • 情報が多いから
    • Python + LangChain + OpenAIの組み合わせの情報が最も多い

Python設定

python3 --version
Python 3.11.4
  • Python 3.11系を使ってください。
  • Python 3.12系だと、ライブラリの関係で、最後の「chainlit_chat_db.py」が実行できないかもしれません。

OpenAI API設定

  • https://platform.openai.com/
    • API KeysでSECRET KEYを取得
  • 無料枠
    • APIはアカウント開設してから3ヶ月間、$5.00 分利用可能
  • それ以降は課金する必要あり
    • 別でアカウント作っても、SMS認証に使う電話番号が同じであれば無料枠はもらえない模様
    • $5.00から課金可能
    • ChatGPTの有料プランとは異なるので注意
    • 以下のエラーが出たら課金する必要あり
openai.RateLimitError: Error code: 429 - {'error': {'message': 'You exceeded your current quota, please check your plan and billing details. For more information on this error, read the docs: https://platform.openai.com/docs/guides/error-codes/api-errors.', 'type': 'insufficient_quota', 'param': None, 'code': 'insufficient_quota'}}
  • 課金して数分すればエラーが出ず正常実行できるように

  • API Keyを環境変数に設定

export OPENAI_API_KEY=sk-***********************************

他のLLM

Gemini

  • Google CloudのVertex AIで利用可能

Claude 3

  • 上位 ← Opus、Sonnet、Haiku → 下位
  • AWSAmazon BedrockでOpus(最上位モデル)利用可能
  • Google CloudではSonnet(中位モデル)利用可能
    • OpusはComing Soon

OpenAI APIを使ったプログラミング

  • 無料枠でも利用可能なgpt-3.5-turboを使用
python3 -m pip install openai==1.16.1
  • openai_chat_completions.py
import os
from openai import OpenAI

client = OpenAI(
  # This is the default and can be omitted
  api_key=os.environ.get("OPENAI_API_KEY"),
)

chat_completion = client.chat.completions.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "system", "content": "私は優秀なソフトウェアエンジニアです。"},
    {"role": "user", "content": "kubernetesについて説明してください。"}
  ]
)

print(chat_completion.choices[0].message.content)
  • 実行
python3 openai_chat_completions.py
Kubernetes(クーバーネティス)は、コンテナ化されたアプリケーションを管理するためのオープンソースのコンテナオーケストレーションツールです。Kubernetesは、複数のコンテナを効率的かつ柔軟に管理することができ、アプリケーションのデプロイメント、スケーリング、バージョン管理、ネットワーキングなどを自動化します。

Kubernetesは、クラウド上やオンプレミスの環境など、さまざまな環境で使用でき、高い信頼性、拡張性、セキュリティを提供します。また、リソースの効率的な管理や障害時の自己修復機能も持っています。

Kubernetesは、コンテナ化されたアプリケーションの展開や管理を容易にするための多くの機能やリソースを提供しており、クラウドネイティブなアプリケーションの開発や運用において非常に重要な役割を果たしています

LangChain

  • LLMの差分を吸収するライブラリ
  • Python版がメインで開発は先行
    • 情報が多い
  • 追従して、JavaScript(TypeScript)版が出る
    • Webフロントエンドと開発言語を合わせられる
  • LangChain以外のLLMライブラリはLlamaなど
python3 -m pip install langchain==0.1.14
python3 -m pip install langchain-openai==0.1.1
  • langchain_chat.py
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage

chat = ChatOpenAI(
  model="gpt-3.5-turbo",
)

result = chat.invoke(
  [
    SystemMessage(content="私は優秀なソフトウェアエンジニアです。"),
    HumanMessage(content="LangChainについて説明してください。"),
  ]
)
print(result.content)
  • 実行
python3 langchain_chat.py
LangChainは、ブロックチェーン技術を活用して言語学習者とネイティブスピーカーをつなぐプラットフォームです。言語学習者は、LangChainを通じてネイティブスピーカーとリアルタイムでコミュニケーションを取りながら、言語スキルを向上させることができます。ネイティブスピーカーは、言語学習者に言語を教えることで収入を得ることができます。ブロックチェーン技術によって、安全かつ透明な支払いシステムが提供され、利用者同士の信頼関係を築くことができます。LangChainは、言語学習をより効果的かつ楽しくする革新的なプラットフォームとして注目されています。
  • ハルシネーションが発生
  • 実行前にブロックチェーンの質問はしていないし、会話履歴は取得・使用していない
  • GPT-4でもハルシネーション
LangChainは、AIを活用した言語翻訳プラットフォームです。ブロックチェーン技術を導入することで、翻訳者は自分の作業を通じて報酬を得ることができます。また、LangChainは独自のトークン経済を持っており、翻訳作業の報酬やサービスの利用料金にそのトークンが使用されます。

LangChainの特徴は、AI技術を活用して高精度な自動翻訳を可能にしている点です。また、ブロックチェーンを活用して翻訳者とクライアント間の取引を透明化し、安全性と信頼性を確保しています。

さらに、LangChainはコミュニティ主導型のプラットフォームであり、ユーザーがサービスの改善や発展に直接貢献できることも大きな特徴です。

ただし、上記内容はLangChainについて一般的に説明したものであり、特定のLangChainとは異なる場合があります。具体的な情報は各LangChainの公式情報をご確認ください。

Chainlit

  • Pythonで稼動するLLMフレームワーク
  • すぐにリッチなUIを使える
  • カスタマイズは限定される
  • 自由にUI開発するならStreamitを使えば良い
python3 -m pip install chainlit==1.0.500
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.schema import StrOutputParser
from langchain.schema.runnable import Runnable
from langchain.schema.runnable.config import RunnableConfig

import chainlit as cl

@cl.on_chat_start
async def on_chat_start():
    model = ChatOpenAI(model="gpt-3.5-turbo", streaming=True)
    prompt = ChatPromptTemplate.from_messages(
        [
            (
                "system",
                "あなたはとても優秀なソフトウェアエンジニアです。",
            ),
            ("human", "{question}"),
        ]
    )
    runnable = prompt | model | StrOutputParser()
    cl.user_session.set("runnable", runnable)
    await cl.Message(content="こんにちは。私はAIです。質問をしてください。").send()

@cl.on_message
async def on_message(message: cl.Message):
    runnable = cl.user_session.get("runnable")  # type: Runnable

    msg = cl.Message(content="")

    async for chunk in runnable.astream(
        {"question": message.content},
        config=RunnableConfig(callbacks=[cl.LangchainCallbackHandler()]),
    ):
        await msg.stream_token(chunk)

    await msg.send()
  • 起動方法
chainlit run chainlit_app.py -w

-w をつけると、ソースの更新が即時反映

以下をChainlitのUIから実行

プロンプトエンジニアリング

プロンプトの工夫

  • システム開発しなくても、LLMデフォルトのUI上でプロンプトを工夫して欲しい結果を得られる
  • ChatGPTのUIでもプロンプトを登録可能
    • 左下のプロフィール > ChatGPTをカスタマイズする

役割を与える

  • あなたは〇〇の専門家です。
あなたはIT営業です。生成AIを企業のお客様にわかりやすく解説してください。
生成AIとは、人工知能の一種で、データから新しい情報やコンテンツを生成することができる技術です。例えば、文章や画像、音声など、さまざまな形式のデータを入力として与えると、生成AIはそのデータを分析し、それらに似た新しいデータを作成することができます。

企業が生成AIを活用することで、以下のようなメリットが得られます:
1. 新しい商品やサービスの開発:生成AIを使って市場のトレンドや消費者のニーズを分析し、新しい商品やサービスのアイデアを生み出すことができます。
2. マーケティング戦略の強化:生成AIを使って効果的な広告コピーを作成したり、ターゲットとなる顧客に最適なコンテンツを提供することができます。
3. プロセスの効率化:生成AIを活用して、自動で文章を生成したり、画像を加工したりすることで、業務プロセスを効率化し、作業効率を向上させることができます。

生成AIは、ビジネスのさまざまな分野で活用されており、企業の競争力を強化するための強力なツールとなっています。

文字数指定

  • 〇〇について200文字以内で教えてください。
AWSについて200文字以内で教えてください。
AWS(Amazon Web Services)は、Amazonが提供するクラウドコンピューティングサービスのことです。AWSを利用することで、サーバー、ストレージ、データベースなどのインフラストラクチャをクラウド上で提供し、スケーラビリティや柔軟性を実現します。多くのサービスが用意されており、企業や個人が必要なサービスを選択して利用することができます。AWSは世界中で広く利用されており、安定性やセキュリティ面でも信頼性が高いです。

箇条書き

  • 〇〇について箇条書きしてください。
良いプレゼンに必要なことを箇条書きで答えてください。
・ 明確な目的を持つ
・ 聴衆に合わせた内容とレベルを選定する
・ わかりやすい構成と論理展開
・ 魅力的なビジュアル要素の使用
・ 適切な言葉遣いとトーン
・ 質疑応答に備えた準備
・ タイムマネジメントを考慮したスピーチ時間の管理
・ 自信を持ってプレゼンする

簡単な回答を得る

  • 〇〇について小学5年生にもわかるような文章で教えてください。
公定歩合について小学5年生にもわかるような文章で教えてください。
公定歩合とは、日本銀行が決める金利のことです。これは、お金を借りたり貸したりするときに使われる金利の基準です。公定歩合が高いと、お金を借りるのがちょっと高くなってしまいます。逆に、公定歩合が低いと、お金を借りるのが安くなります。公定歩合は、経済や物価などに関係していて、政府や日本銀行が調整しています。

手順を書かせる

  • 賞味期限の近い食材を含め、今あるもので料理を作る、という想定
冷蔵庫に、キャベツ、豚肉、豆腐、味噌があります。これらの食材で作れる料理を教えてください。また、調理の手順を箇条書きで書いてください。
キャベツと豚肉の味噌炒めを作ることができます。以下に調理手順を箇条書きで示します。

材料:
- キャベツ
- 豚肉
- 味噌
- 豆腐(オプション)

調理手順:
1. キャベツを千切りにします。
2. 豚肉を食べやすい大きさに切ります。
3. フライパンに少量の油を熱し、豚肉を炒めます。
4. 豚肉に火が通ったら、キャベツを加えてさらに炒めます。
5. キャベツがしんなりとしたら、味噌を加えて全体を混ぜます。
6. ソースが全体になじんだら完成です。
7. 豆腐を加えてさらに煮込むと、豆腐も味を含んで美味しくなります。

是非お試しください!

ハッシュタグで条件を指定

  • メール作成や翻訳など、テンプレート化しておくと便利
# 役割:
あなたはITコンサルタントです。
# 目的:
生成AIを用いたシステム開発を見込み客に提案
# 条件:
・開発期間は2ヶ月
・予算は1,000万円
・見込み客は生成AIシステム開発は初めて
# 指示:
以上の条件をもとに事業企画書をA4用紙1枚分で出してください。

事業企画書

プロジェクト概要

  • プロジェクト名: 生成AIを活用したシステム開発プロジェクト
  • 目的: 見込み客の業務効率向上と競争力強化
  • 開発期間: 2ヶ月
  • 予算: 1,000万円

背景

  • 見込み客は生成AIシステム開発に初めて取り組む
  • 生成AIの活用により業務プロセスの自動化や品質向上が期待される

提案内容

  1. 要件定義および設計フェーズ
    • 要件ヒアリングとシステム設計の作成
    • 開発方針の決定と進行管理計画の策定
  2. 開発フェーズ
    • 生成AIモデルの構築と学習
    • システムの開発とテスト
  3. 導入および運用フェーズ
    • システムの導入支援とトレーニン
    • 運用保守体制の構築とサポート体制の整備

期待効果

  • 業務効率の向上と品質の向上
  • 競争力の強化と市場シェアの拡大

結言

  • 生成AIを活用したシステム開発は見込み客にとって未知の領域かもしれませんが、弊社の豊富な経験と専門知識により、成功への道筋を示すことができます。
  • ご検討いただければ幸いです。

プロンプトエンジニアリングガイド

Prompt Engineering Guide – Nextra

  • 基本的知識から様々な応用手法まで紹介
  • LangChainで実装できる手法も存在

RAG

speakerdeck.com

  • ライブラリをインストール
python3 -m pip install pymupdf-1.24.1
python3 -m pip install spacy==3.7.4
python3 -m spacy download ja_core_news_sm
python3 -m pip install tiktoken==0.6.0
python3 -m pip install chromadb==0.4.24
python3 -m pip install langchain-community==0.0.31
  • prepare_db.py
    • PDFの内容をベクトル化してChroma DBに格納
from langchain.document_loaders import PyMuPDFLoader
from langchain.embeddings import OpenAIEmbeddings
from langchain.text_splitter import SpacyTextSplitter
from langchain.vectorstores import Chroma

loader = PyMuPDFLoader("./sample.pdf")
documents = loader.load()

text_splitter = SpacyTextSplitter(
  chunk_size=300,
  pipeline="ja_core_news_sm"
)
splitted_documents = text_splitter.split_documents(documents)

embeddings = OpenAIEmbeddings(
  model="text-embedding-ada-002"
)

database = Chroma(
  persist_directory="./.data",
  embedding_function=embeddings
)

database.add_documents(
  splitted_documents,
)

print("データベースの作成が完了しました。")
  • PDFをベクトル化してDBに格納
python3 prepare_db.py
  • DBに格納したPDFの内容について質問可能なChainlitアプリ
import chainlit as cl
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain.prompts import PromptTemplate
from langchain.schema import HumanMessage
from langchain_community.vectorstores import Chroma

embeddings = OpenAIEmbeddings(
  model="text-embedding-ada-002"
)

chat = ChatOpenAI(model="gpt-3.5-turbo")

prompt = PromptTemplate(template="""文章を元に質問に答えてください。

文章:
{document}

質問: {query}
""", input_variables=["document", "query"])

database = Chroma(
  persist_directory="./.data",
  embedding_function=embeddings
)

@cl.on_chat_start
async def on_caht_start():
  await cl.Message(content="準備ができました!メッセージを入力してください!").send()

@cl.on_message
async def on_message(input_message: cl.Message):
  print("入力されたメッセージ: " + input_message.content)
  documents = database.similarity_search(input_message.content)

  documents_string = ""

  for document in documents:
    documents_string += f"""
  -------------------------
  {document.page_content}
  """

  result = chat([
    HumanMessage(content=prompt.format(document=documents_string, query=input_message.content))
  ])
  await cl.Message(content=result.content).send()
  • Chainlitアプリを実行し、PDFの内容について質問可能
chainlit run chainlit_chat_db.py -w 

www.oreilly.co.jp

Terraformで再利用可能なモジュールを作成するためのコツを教えてください。
再利用可能なTerraformモジュールを作成するためのコツは、以下の点に注意することです。

小さなモジュールを作成する: 1つのモジュールに複数の機能やリソースを詰め込まず、1つの機能やリソースに焦点を当てた小さなモジュールを作成することで、再利用性が高くなります。

組み合わせ可能なモジュールを作成する: モジュール同士が疎結合であり、組み合わせて利用することが容易な設計を心がけることで、柔軟性が向上します。

テスト可能なモジュールを作成する: モジュールごとに適切なテストを実施し、品質を担保することが重要です。テストが容易に実施できるようなモジュールを作成することがポイントです。

バージョン管理されたモジュールを使用する: モジュールのバージョン管理を行い、変更やアップデートが容易に行えるようにすることが大切です。

これらのポイントに留意しながら、Terraformモジュールを設計・作成することで、効果的な再利用可能性を実現できます。
  • オライリー本をEbookで購入して、PDFをRAGに入れていけば便利そう
    • 詳解Terraformのベクトル化でEmbeddingモデルにかかった料金は$0.06

参考文献

OSC(Open Source Conference) 2024 Online/Springでセミナー発表とTokyo/Springでブース出展

2024年3月2日(土)、Open Source Conference 2024 Online/Spring でセミナー発表し、

event.ospn.jp

同年3月10日(日)、Open Source Conference 2024 Tokyo/Spring でブース出展しました。

event.ospn.jp

Online/Springのセミナー(以下、オンラインセミナー)では、日本生成AIユーザ会として、

生成AI入門というテーマで発表させていただきました。

日本生成AIユーザ会のデビュー戦でした。これまで日本暗号通貨ユーザ会などでブロックチェーン関連の発表はたくさんしてきましたが、

生成AIの発表は初めて。無事発表できてよかったです。

speakerdeck.com

youtu.be

なお、オンラインセミナーでは日本暗号通貨ユーザ会の発表は今回しておりません。

日本生成AIユーザ会と日本暗号通貨ユーザ会の2つの発表をやることはしんどいので、1つだけにしました。

一方、3月10日OSC東京はブース展示会でした。

会場は東京都立産業貿易センター台東館で、最寄りは浅草駅。

天気もよく、浅草駅前の吾妻橋交差点から見える東京スカイツリーアサヒビール本社屋上の金色のオブジェが綺麗に見えました!

浅草からの風景

↓金色のオブジェは聖火台の炎を表現していたのですね!今知りましたw

www.asahibeer.co.jp

ブース展示会では、日本生成AIユーザ会と日本暗号通貨ユーザ会の合同出展という形にしました。

ブースにはたくさんの方にきていただき、生成AI、暗号通貨(ブロックチェーン)ともに興味を持っていただけました。

皆様お疲れ様でした!

運営の皆様、出展させていただきありがとうございました。

ブースに来ていただいた皆様ありがとうございました。

これまでOSCのブース出展は、日本暗号通貨ユーザ会だけで行ってきましたが、 今回、日本生成AIユーザ会でも出展することで新たな気付きもたくさん得られました。

秋のOSC東京ではもっとブースをパワーアップして挑みたいと思います!

日本暗号通貨ユーザ会は次回、3月22日(金)20:00〜「ビットコインブロックチェーン入門」という講義形式(※)のオンライン勉強会を開催します。

※講義形式というのは、ハンズオンや輪読ではないということです。

発表者が説明して、質問を受け付けます。当てたりしませんので、ご安心をw!

cryptocurrency.connpass.com

日本生成AIユーザ会は次回、4月5日(金)20:00〜「生成AIアプリケーション開発入門ハンズオン」というハンズオン形式のオンライン勉強会を開催します。

ハンズオンですが、難しくなく皆さんがついてこられて、かつ楽しい内容にします!

genai-users.connpass.com

どちらもぜひご参加ください!

これからも両コミュニティをよろしくお願いいたしますm(._.)m

Google Cloud 主催 Generative AI Summit Tokyo '24に参加

2024年3月7日、GOOGLE CLOUD 主催 Generative AI Summit Tokyo '24 に参加しました!

cloudonair.withgoogle.com

株式会社スリーシェイクはスポンサーを務めておりました。

基調講演を除き、観たセッションはXにてスレッドで軽く実況を書いています。

全体を通しての感想は、キラーアプリはまだ出てきていないものの、 早期に生成AIを触り始めた企業さんは、事例をどんどん作っていると言う印象でした。

私も生成AIに携わるものとして、モチベーションが上がったので、 日々の業務に邁進していきたいと思います!

Google Cloud Digital Leader合格!

Google Cloud Platdorm(GCP)認定資格の第一歩、Cloud Digital Leaderに合格しました!

ちなみに、これまでの私の保有IT資格は、基本情報、応用情報、AWSクラウドラクティショナーです。

AWS資格の第一歩、クラウドラクティショナーはUdemyの模擬試験を1周したら合格できたので、

同様にGoogle Cloud Digital LeaderもUdemyの模擬試験を1周以上したら合格できました。

なお、AWSは最初、ソリューションアーキテクトアソシエイト受けたものの勉強不足で落ち、
クラウドラクティショナーならなんとかなるのでは?と思い、その2週間後に受けたら受かりました。

Udemyの模擬試験は途中保存もでき、採点、不正解のみ見直しなどができて便利ですよね。

次はGCPのAssociate Cloud Engineerに挑戦したいと思います!

皆さんもUdemyで勉強してIT資格をとりましょう!

AWSやGCPの資格をとるならUdemyで学ぼう!

生成AI活用の事例共有 - 大企業と中小企業・スタートアップでの違いに参加

2023年12月1日にスリーシェイクに入社し、SRE構築総合支援サービスSreake事業部のエンジニアとして2ヶ月が経ちました。

私は生成AIアプリケーション開発を行なっており、ちょうど良さげな勉強会に参加したので、参加レポートを書きたいと思います。

chatgptllm.connpass.com

参加したのは、LLM Tokyo主催の「生成AI活用の事例共有 - 大企業と中小企業・スタートアップでの違い」。

主催者は株式会社pipon代表の北爪聖也さん( @Seiyan1 )。

北爪さんともう一人の登壇者が株式会社LangCore代表の北原麦郎さん(@yuno_miyako2 )。

LangCore北原さんの事例発表

最初は、LangCore北原さんの事例発表。

LangCoreはAIの受託開発を行なっており、モジュール化して様々な案件に対応できるようにしている。

生成AIで個人の生産性向上よりも大きなインパクトを出せるようにすることが目標。

苦戦する案件もあるが、思った以上の成果を出せた案件もあった。

大企業が生成AIを活用するモチベーションは他社から遅れを取らないようにするため、というのが最も大きい。

検証項目は大きく分けて以下の3つ。
・社内ChatGPT
・社内データ検索
・精度検証

中小企業、スタートアップにおけるAI案件の課題としては、予算が限られていること。

案件の流れとしては以下。

ヒアリング

プロトタイプ開発

精度検証・改善

本開発・追加開発

pipon北爪さんの事例発表

・化粧品メーカーでの事例

化粧品メーカーが動物実験を減らすため、生成AIで実験結果の推測をする
化合物と化合物を組み合わせたときに毒性が出るかどうか

コンサルティングファームで社内の業務効率化

大量の類似した質問をChatGPT+RAGでさばく

・製薬会社のマーケティング

売れる営業とそうでない営業の効果測定

・自動車会社

生成AIを使った新規事業の模索

質疑応答

質問「スケジューリングまでLLMでできるのか?」
回答「完璧ではないが、簡易なものを書いてくれる。生成AIなしでやろうと思ったら実現不可能なほど非常に複雑なプログラムになっていただろう。
レストランの推薦をするとなれば、場所のレコメンドだけでなく、これまでできなかったスケジュールのレコメンドができることに価値がある。」

www.itmedia.co.jp

質問「行政の生成AIPoCで94%の精度では使えないという事例があったが、100%の精度が求められることはあるのか?」
回答「民間企業はPoCで精度も含めて検証する。100%は求められない。100%は実現不可。
レストランで、お店にないメニューをレコメンドしてしまうという問題もあった。
そういうプロジェクトは難しくなりがち。
裏側の人力の手作業を減らす業務改善からだと入っていきやすい。
エンタメ分野だとアバターが間違えても、可愛いと捉えられるので導入しやすい。」

「生成AIを使わなくても既存技術で解決できる課題も多かった。」

「何でもLLM回答を得るのではなく、コスト削減のために、キャッシュを使って、同じ質問に同じ回答を返すようなことをしている。

検証ツール: AzureだとAzure Machine Learning プロンプト フローがあり、 テストに使える。

「ファインチューニング、アノテーションはコストがかかるのであまりやらない。RAGを使う。」

pipon北爪さんはKindleでLLM書籍を出版されています。

ボリュームタップリで99円はお買い得!

Kindle書籍の詳細はこちら ⇒ https://amzn.to/4bhlmBQ

2月13日(火)に出版記念イベントを開催されるそうです。 (参加費は懇親会込みで4,000円)

chatgptllm.connpass.com

感想とまとめ

私も生成AI開発をやり始めたところですが、数多くの案件を手がけてきた方々の話を聞けて、
イメージが湧くとともにモチベーションが上がりました。

AWS経験者がGCPに入門

この記事はGCP(Google Cloud Platform) Advent Calendar 202320日目の記事です。

私は12月1日に株式会社スリーシェイクに入社した、小渕と申します。

GCPは初心者ですが、スリーシェイクはGCPパートナー企業なので、しっかりキャッチアップして頑張ってまいります。

今回の記事は、AWSは触ったことあるけど、GCPは初めてという私がGCPの印象や、 AWSGCPのマネージドサービスの対応などを、これから入門する方のためにも記しておきたいと思います。

印象

GCPを触ってみたり、ドキュメントを読んだり、Cloud Digital Leaderの試験勉強をしていく中で思ったことは、 SREの考え方がよく出てくるということです。

SRE(Site Reliability Engineering)はGoogle発祥ということもあり、Cloud Digital Leader模擬試験でもよく目にしました。

また、AWSに比べると、Kubernetesもよく目にします。

KubernetesGoogle 内部で利用されているクラスタマネージャの Borg を元に 2014 年に開発されたこともあり、 Kubernetes使うならGCPが一番というイメージです。

それから、BigQueryは一般公開データセットもあり、GCPの強みというイメージです。

入門書

GCP入門のオススメ書籍として、社内ドキュメントに載っていた「図解即戦力 Google Cloudのしくみと技術がこれ1冊でしっかりわかる教科書」をKindle版で読んでいます。

技術書はKindleで読みにくいものもありますが、これは読みやすく、GCPの概要を掴めるかと思います。

AWSとの比較

無料利用枠

クラウドの使い始め、AWSは無料利用枠を超えると通常の課金が発生しますが、GCPは無料利用枠を超えるとサービスが使えなくなるため、課金される心配がありません。

これはAzureもGCPと同様です。

仮想マシン

AWSではEC2インスタンスを立てますが、GCPはCompute Engineという名前です。「インスタンス」という言葉もAWSと同様に使います。

ECSとCloud Run

AWS上でコンテナを稼働させるマネージドサービス「Amazon Elastic Container Service」(ECS)ですが、GCPではCloud Runになるでしょうか。

ECSのFargateがCloud Runに対応しているイメージです。

Cloud Runは早速業務で使用していますが、ECSよりも管理が楽だという印象を受けました。

サーバーレス

AWSでお馴染みLambdaですが、GCPではApp Engineでしょうか。

App Engineはスタンダード環境とフレキシブル環境があり、フレキシブル環境はSSH接続ができるとか!

また、App EngineはBlue-Greenデプロイメントに基づいて行われるのですね!

Anthos

GCPでAnthosというサービス名もよく目にしますが、オンプレやAWSやAzureなど他のパブリッククラウドと接続してマルチクラウドが実現できるんですね。

GKE(Google Kubernetes Engine)で統一したプラットフォームを構築するので、マルチクラウド、ハイブリッドクラウドが他のクラウドを拠点にするよりもやりやすいのではないでしょうか?

最後に

GCP初心者ですが、クラウド触るのは好きなので、習得していきたいと思います!

初心者の記事ですが、読んでいただきありがとうございました!

3-SHAKE SRE Tech Talk #8レポート(k8sの話もたくさん)

この記事はKubernetes Advent Calendar 202319日目の記事です。

私は12月1日に株式会社スリーシェイクに入社した、小渕と申します。

kubernetesは初心者ですが、Sreake事業部のSREとしてしっかりキャッチアップして頑張ってまいります。

3-shake.connpass.com

さて、12月18日に弊社の勉強会「3-shake SRE Tech Talk #8」が行われました。

半分以上はKubernetesの話だったので、この勉強会の話題を書きたいと思います。

↓開催中メモ代わりにX(旧Twitter)への自分の投稿はこちら(全部スレッドで連なっています)

Xにて#SRETTで検索した投稿(最新)はこちら

↓セッション毎に分けて、書いてます。

スリーシェイク技術顧問 青山真也さん「KubeCon + CloudNativeCon NA 2023 Sessions for Site Reliability Engineers」

最初はメインセッション。スリーシェイク技術顧問で、サイバーエージェントの青山真也さん「KubeCon + CloudNativeCon NA 2023 Sessions for Site Reliability Engineers」

kubernetesユーザの方にはお馴染み、日本のkubernetesの第一人者の方です。

↓スライドはこちら

speakerdeck.com

冒頭、ちらっとKubernetes完全ガイド第3版の話が進んでいるという「おお!」となるお話も!

↑こちらは第2版です。

k8sユーザのバイブルですよね。私も紙書籍版を持っています。

楽しみですね!

さて、セッションの内容としては、イベントのご紹介、参加者数の推移から、Keynoteで発表された2023年3月のDatadogの障害の話へ。

全てのデータセンターで60%のnodeが1時間ダウンした大規模な障害だったそう。

恐ろしいですね!!

DatadogのK8sクラスタのnodeは Ubuntu 22.04にVer. UP Rolloutをしていっているが、 20.04と22.04の間にあった必要のないルーティングポリシーを消す変更があり、障害に繋がったとのことです。

Auto Scalingが走って、救われた面もあるが、 50%強のスケールアウトを一気にしようとすると課題も多々ありました。

他人事ではなく、障害時に復旧するレベルでオートスケールを設計する必要がある、というのが教訓でした!

二つ目のお話「OpenTelemetry」

OpenTelemetryとは、Traceデータを収集するSDKで、YAMLで書くよりも、OTTLで書くと、コードの記述量が少なくて済むメリットも!

PrometheusからOpenTelemetry Collectorに置き換えると、約1/5にリソース消費を抑えられるなどのメリットもあるそうです。

ただし、Otelは多少バグがあるので使用上は注意とのことでした。

他に、Argoの話もしてくださいました。

Config Management Plugins(CMP)を使うと、HelmやKustomizeでない任意のツールでArgoCDと連携できるとのこと!

青山さんのメインセッションの後は、6名の方のLT!

社外の方3名、社内3名です。

スリーシェイク高村さん「障害対応のススメ」

speakerdeck.com

新人SREはエキスパートSREとペアで障害対応しよう!というお話。

ペアで障害対応することにより、新人だけでなく、エキスパートSREも自分だけでは把握しきれない分も把握できます。

ペアプログラミング」ならぬ「ペア障害対応」いいですね!

ポストモーテム作成も!私もスリーシェイクの一員として早くやってみたいですね!

ペア障害で属人化解消というメリットもあります!

incident-response.connpass.com

「Incident Response Meetup vol.1」という良さげな勉強会もあるのとのこと!でした!

mixi 清水さん「今年1年のEKS運用振り返り」

speakerdeck.com

mixiさんのサービス「みてね」はEKSを使用しているそうで、運用の苦労話も聞けました。

OOMKilledが起こることもあり、CPU、メモリ等リソース調整しないといけないのは大変ですね。

Railsアプリはメモリを食い、再起動かからないとメモリ消費が増えてくるそうです。

定期的に再起動かけるようにして対応したそうです。

手動運用でアップデートが放置されがちだった箇所も、自動アップデートもできるようにしたのはすごいですね。

kubectlでPod作業するのを禁止したりだとか。その代わり踏み台からのアクセスできるようにしたり。

k8s運用の勉強になりました。

スリーシェイク bells17さん「KubernetesとCoreDNS」

speakerdeck.com

自分もEKSでCoreDNSのステータス低下問題に悩まされたことがあったので、ありがたいお話でした。

bells17さんお得意のK8sのコードリーディングでCoreDNSのロジックに迫っていってました。

CoreDNSのデプロイからnameserverにIPアドレスを設定するまでの流れと、 CoreDNSによるService/Podの名前解決を解説してもらいました。

Kubernetes 側で定義されている DNS の仕様に従って、 CoreDNS 側で Kubernetes 用の plugin が実装されてるとのこと。

私もkubernetesの力をつけて、bells17さんの話を理解できるように頑張っていきます!

ZLab yosshi_さん「Grafana Agent を用いた Continuous Profiling」

qiita.com

qiita.com

Grafana Agentで eBPF が使われているそうです。

eBPF だと kernel level で情報がとれるので、より詳細な情報を取れるのではないか、という期待があるとのことでした。

Grafana Agentのgolang pullもあり、対象言語はGo言語のみで、取得対象はpprofの情報になるので、CPU以外にもメモリ等の情報も収集可能とのことでした。

スリーシェイク まさすずさん「Terraform使いがPulumiに入門する」

speakerdeck.com

Terraform(HCL)の記述力に限界を感じていたので、Pulumiを使い始めた。とのことでした。

Pulumiとは任意のプログラミング言語でインフラ構築可能なプロビジョニングツールです。

TerraformやAnsibleなどインフラのツールって柔軟性に欠けるので、任意のプログラミング言語で柔軟にインフラ構築できるのはいいですよね!

Pulumi Cloudは個人で使う分には無料とのことでした!

FLUX cstokuさん「へーしゃで起こったGoogle Cloud課金事故事例」

Cloud Logging で Log Storage cost が爆増。

ログレベル Debug でメッセージが出力されるバッチが (バグで) 何回も呼ばれるようになっていた、とのことでした。

Cloud Loggingではログレベルに気をつけましょう!

また、Cloud Storageにて、Archive時に大量課金事故が発生したそうです。

これはArchiveで費用が嵩むのは仕方がないものの、想定できておらず、予算がつけれてなかったとのことでした。

それから、BigQueryをTerraformでLogical StorageからPhysical Storageに変更しようとしたら、 変更されておらず、Active Logical Strageでコスト増!

原因はドキュメントに乗っていたクエリが間違っており、 さらに、知らないうちに正しいものに更新されていた。という大変な思いも。

ドキュメントも鵜呑みにはできないですね。

課金事故勉強になりました!

アンケート

参加してくださった方ありがとうございました。

アンケートのご記入にもご協力くださいm(._.)m

docs.google.com

アーカイブ動画

編集後、アーカイブ動画がアップロードされる予定です。

YouTubeの3-SHAKEチャンネルをご登録の上、お待ちください。

アドベントカレンダー次回へのバトンタッチ

Kubernetes Advent Calendar 202312月20日はHiroshi Hayakawaさんの記事です。

お楽しみに!