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と合わせて低コストで運用できそうです!