0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ruby, AWS LambdaでBedrockを動かしてみた

Last updated at Posted at 2025-03-01

Bedrockのモデルアクセス

AWSのコンソール画面でBedrockのモデルアクセスをします。

Lambda関数の作成

AWSのコンソール画面でLambdaでランタイムをRuby3.3にして関数を作成します。
実行ロールでBedrockが使えるようにAmazonBedrockFullAccessポリシーを追加します。

lambda_function.rbのファイルの作成

Localで以下のファイルを作成します。

lambda_function.rb
require 'aws-sdk-bedrockruntime'
require 'json'

def lambda_handler(event:, context:)
  region = 'ap-northeast-1'
  model_id = 'anthropic.claude-3-haiku-20240307-v1:0'
  content = 'hello'
  bedrock_client = Aws::BedrockRuntime::Client.new(region:)
  response = bedrock_client.converse({
      model_id:,
      messages:     [
        {
          role: 'user',
          content:
        }
      ]
    })
  { statusCode: 200, body: JSON.generate(response.output.message.content[0].text) }
end

LocalからもBedrockを叩きたい場合は以下のようにcredentialsが必要になります

  def bedrock_client
    Aws::BedrockRuntime::Client.new(region:, credentials:)
  end

  def credentials
    access_key = ENV.fetch('AWS_BEDROCK_ACCESS_KEY_ID', nil)
    secret_access_key = ENV.fetch('AWS_BEDROCK_SECRET_ACCESS_KEY', nil)
    Aws::Credentials.new(access_key, secret_access_key)
  end

Gemfileの作成

こちらもLocalで作成します。

# frozen_string_literal: true

source 'https://rubygems.org'

gem 'aws-sdk-bedrockruntime'
gem 'json', '~> 2.6'

Lambdaのデプロイ

依存関係をインストールしてzip化します。

bundle install --path vendor/bundle
zip -r lambda_function.zip . -x "*.git*

上記で作成したzipファイルをAWSのコンソール画面でLambdaにアップロードします。

自動デプロイ

毎回手動でzip化するのは手間なので、GitHub Actionsで自動化します。

.github/workflows/deploy_backend.yml
name: Deploy Lambda on Merge

on:
  push:
    branches:
      - main
    paths:
      - 'backend/**'

jobs:
  deploy:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: backend
    permissions:
      id-token: write  # GitHub OIDC を使うのに必要
      contents: read  # ソースコードを取得するために必要

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-region: ap-northeast-1
          role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
          role-session-name: GitHubActions

      - name: Set up Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: 3.3
          bundler-cache: true # Bundlerのキャッシュを有効化

      - name: Install dependencies
        run: |
          gem install bundler
          bundle install --path vendor/bundle

      - name: Zip Lambda function
        run: |
          zip -r lambda_function.zip . -x "*.git*"

      - name: Deploy to AWS Lambda
        run: |
          aws lambda update-function-code \
            --function-name anokumo \
            --zip-file fileb://lambda_function.zip

anokumoの部分はlambdaの関数名に変えてください。

作ったサービス

📷 スマホで雲の写真を撮ると、その雲がどこにあるのか分かるサイトを作りました!
👉 https://main.d3g4hqynwxuzap.amplifyapp.com/

ソースコードはこちら。
📝 GitHub: https://github.com/issei5/anokumo

💡 フロントはAmplifyを使うことで、Lambdaと合わせて低コストで運用できそうです!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?