はじめに
AWS初心者です。AWSの基本知識をキャッチアップすべく、色々触りながら学習中です。
今回は生成AIのサービスであるAmazon ComprehendとAmazon Pollyを触ってみました。初心者向けの内容となっておりますので、温かい目で見て頂ければ幸いです。
利用するAWSサービス
- Comprehend
 - Polly
 - Lambda(Python3.13)
 - S3
 - IAM
 
実践手順
S3にバケットを用意する
これでS3側の設定は完了です。
IAMロールを作成する
- 
ユースケースを選択する
IAMからロールを選択し、新規にロールを作成します。今回は、LambdaからS3へのアクセスを許可するロールを作成するため、ユースケースには「Lambda」を選択します。

 - 
ポリシーを追加する
ロールにアタッチするポリシーを追加します。今回は、Amazon Comprehend、Amazon Polly、S3へのアクセスが必要なため、それぞれのポリシーを選択します。

 - 
ロールを作成する
ロール名を入力し、ロールを作成します。作成したロールは後述のLambda関数で利用するため、分かりやすい名前にします。 
これでIAMロールの作成は完了です。
Lambda関数を作成する
- 
関数を作成する
今回はPythonでプログラムを書くため、ランタイムは「python 3.13」を選択します。
関数名はプログラムの内容がイメージしやすい名前にします。
ロールには前述で作成したIAMロールを選択します。

 - 
必要な設定を変更する
今回はタイムアウト時間を2分に変更します。必要に応じてコードから参照する環境変数を設定してください。 
コードの実装
サンプルコード
import boto3
def lambda_handler(event, context):
    # AWSクライアントの初期化
    s3_client = boto3.client('s3')
    polly_client = boto3.client('polly')
    comprehend_client = boto3.client('comprehend')
    # 対象となるテキストの定義
    text = "write your sample text."
    # テキストからキーフレーズを取得
    response = comprehend_client.detect_key_phrases(
        Text = text,
        LanguageCode = 'ja'
    )
    # キーフレーズ(リスト)から文字列を取得
    content = ""
    key_phrases_list = [phrase['Text'] for phrase in response['KeyPhrases']]
    for index,item in enumerate(key_phrases_list):
        content += item + "," 
    # 音声データの生成
    responseVoice = polly_client.synthesize_speech(
        Text = content,
        OutputFormat = 'mp3',
        VoiceId = 'Mizuki'
    )
    # 音声データを取得
    audioData = responseVoice['AudioStream'].read()
    # S3バケット名と保存するファイル名
    s3_bucket_name = "your-bucket-name"
    s3_file_name = "your-file-name"
    # S3に音声データをアップロード
    s3_client.put_object(
        Bucket = s3_bucket_name,
        Key = s3_file_name,
        Body = audioData,
    )
    return {
        'statusCode': 200,
        'body': f"ファイル '{s3_file_name}' が S3 バケット '{s3_bucket_name}' に正常にアップロードされました。"
    }
実行結果
Lambdaへデプロイして、実行するとS3に音声データ(mp3)が保存されていることを確認できました。

おわりに
当初は、取得したWeb上のデータ(ニュース記事など)をComprehendを使って要約しようと思っていましたが、API「syntax」の上限が5000Byteだったり、日本語をサポートしていなかったり躓いたため、結果的にあまり実用的ではない内容になってしまいました。
AWSのサービスを理解するという最低限の目的は達成できたので、次回以降はもう少し実用的な仕組みを目指してトライしてみようと思います。
