【AWS SAP 対策講座】Lambdaから外部リソース（Bedrock）を呼び出してみたい

AWS SAPro試験の知識補填のために、Lambdaを動かしてみます。
トライアンドエラー形式で進めながら、一緒に設定の意味を理解していきましょう。

# Lambda関数の作成

Lambdaを選んで

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/c1443ff4-c10b-4a5d-9915-ca4c88363116.png)

関数　＞　関数の作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/9952a4f5-06c8-4323-8596-e0dd40f9b2ec.png)

こんな感じに設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/b540f558-b69e-4533-b2dc-8ac47c1cdeed.png)

## Bedrockを呼び出すコードを作成

https://qiita.com/MhalTeddy/items/c6bdb5495385e8744946#amazon-bedrock-api%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%83%8F%E3%83%B3%E3%83%89%E3%83%A9%E3%82%92%E5%AE%9F%E8%A3%85

この方のlambda_functionと書かれたコードを以下にぺとっと貼ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/730f86ec-7758-4aee-b610-e40342ad07eb.png)

以下か所を自分の環境に合わせたら、Deployします。

　・region_nameを自分のリージョンに変更
　・modelIdも自分の使用できるモデルに変更

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/e87054ea-8a8a-47d2-a48a-81b8e4312ed8.png)

## テストコードの作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/d41a8217-de01-45fe-bacc-21e36d243f61.png)

以下か所を書き換えます。
今回はpromptというキーでプロンプトを受け付けているので、以下デフォルトのJsonを書き換えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/c86e6405-abdb-499f-bc8f-f5999aa1e1f1.png)

こんな感じにして保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/33ac1265-fbaf-4c31-8c0e-5b207db55d07.png)

## テスト実行してみる１

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/a539334a-7781-41a4-96cf-7843f593f8a2.png)

おそらく権限が足りないので、「"errorMessage": "An error occurred (AccessDeniedException) ～省略～
is not authorized to perform: bedrock:InvokeModel」的なエラーメッセージが表示されると思います。

## ロールにポリシーをアタッチ

上記エラーを解消するために、ロールにポリシーをアタッチします。
実行ロールを別タブで開きます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/53ef5e6c-40eb-4d15-b14d-fa94d1a05bd0.png)

### とりあえず触れればいい場合

許可を追加　＞　ポリシーをアタッチ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/0ec1a9df-e4e0-4088-919d-ab7eb5660eac.png)

全部許可しちゃえばいい

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/9f957a1f-2686-407f-a3a6-b1a2cdd33c4e.png)

### ちょっとちゃんとする場合

許可を追加　＞　インラインポリシーを作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/07cbc462-db7a-489e-987a-e76416ba636e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/d112fab1-ebbc-485f-8138-3fbffd171bca.png)

先ほどエラーで怒られた「InvokeModel」を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/cec9cd77-edca-4396-ba0c-83121a734034.png)

名前を付けて作成します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/ad8da831-e5d8-4084-94ae-d6b53226a4c2.png)

## テスト実行してみる２

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/1d5fd1fa-f752-44e0-9ff9-73dc250b208e.png)

timeoutになりました。

## timeoutの時間を延ばす

デフォルトだと３秒で短いので、編集する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/b8a1f295-2008-41cf-82c6-849d8e7333df.png)

後述しますが、10秒くらいでいいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/8fdbd6fb-1b3f-4948-ab69-56833741da79.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/e1858113-9db4-4b1c-922a-70a71a84d945.png)

## テスト実行してみる３

やったー！できましたね！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/4bff5cc9-3485-448b-84f3-e3a04b8c0267.png)




# おまけ

## timeout境界を知りたい

環境とプロンプトによるだろうけど、今回のパターンなら10秒くらいがよさそう

3秒：ダメだった

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/ec31ddba-33cf-4a16-abf3-46c51f38c7b1.png)

6秒：ダメだった

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/eb8d378f-8b3b-4d65-886e-3ddf0cefc062.png)

7秒：大丈夫そう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/ede2285a-dbe5-4692-8d56-7ab2077d7f79.png)