AWSシークレットマネージャーに、chatgptのapiキーを保存して、lambda経由でチャットする(引数名:test1 -> prompt)
1, AWSシークレットマネージャーに、chatgptのapiキーを保存
2, lambdaを新規作成してコピペ
3, lambdaレイヤー(共通ライブラリ)に、有志公開のARNを追加(requests)
4, 3秒だとタイムアウトするので、1分位にしておく
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38  | 
						import json import boto3 import requests def get_secret():     secret_name = "CHATGPT_API_KEY"     region_name = "ap-northeast-1"     session = boto3.session.Session()     client = session.client(service_name='secretsmanager', region_name=region_name)     get_secret_value_response = client.get_secret_value(SecretId=secret_name)     secret = get_secret_value_response['SecretString']     return json.loads(secret)[secret_name] def lambda_handler(event, context):     api_key = get_secret()     headers = {         "Authorization": f"Bearer {api_key}"     }     data = {         "model": "gpt-3.5-turbo",  # 使用するモデルを指定         "messages": [{"role": "user", "content": event['prompt']}],  # ユーザーからの入力プロンプトをメッセージとして設定     }     response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=data)     try:         # API応答から最初の応答テキストを取得         response_text = response.json()['choices'][0]['message']['content']     except KeyError as e:         # KeyErrorが発生した場合のエラーメッセージをログに出力         print(f"KeyError: {e}. Response content: {response.content}")         raise     return {         'statusCode': 200,         'body': json.dumps(response_text, ensure_ascii=False)     }  | 
					
5, 新規作成されたラムダのポリシーに、chatgptのapiキーを保存したシークレットマネージャーのarnとGetSecretValueを追加して、APIキーを読めるようにしておく
| 
					 1 2 3 4 5 6 7 8 9 10 11 12  | 
						{ 	"Effect": "Allow", 	"Action": [ 		"logs:CreateLogStream", 		"logs:PutLogEvents", 		"secretsmanager:GetSecretValue" 	], 	"Resource": [ 		"arn:aws:logs:ap-northeast-1:123456789:log-group:/aws/lambda/chatgpt:*", 		"arn:aws:secretsmanager:ap-northeast-1:123456789:secret:CHATGPT_API_KEY-xxxxx" 	] }  |