Amazon Transcribeが日本語に対応していたので使ってみたかった。
Terraformスクリプト全体はこちらにあります。
全体概要
音声ファイルをS3のバケットにアップロードすることをトリガーにして、S3がLambdaを実行し、LambdaはS3にアップロードされたファイル名をキーにしてTranscribeを呼び出す。
Terraformのディレクトリ構成
以下のようにディレクトリをきっている。
terraformのディレクトリの切り方はいっつも迷う・・・・
root
┣ iam # 権限まわり
┣ lambda
┗ s3
main.tf
variable.tf # これは各自作る
注意どころ
何も考えないでterraformを記述していくと、以下のエラーが出る。
[ERROR] BadRequestException: An error occurred (BadRequestException) when calling the StartTranscriptionJob operation: The S3 URI that you provided can't be accessed. Make sure that you have read permission and try your request again.
TranscribeがS3へアクセスできないということは分かったが、解決するのにてこずった。
一連の流れのトリガーとなるS3へS3へのアクセス権を与えるという、卵と鶏のような権限をアタッチする必要がある。
lambda/role.tf
resource "aws_iam_role_policy_attachment" "transcribe_access_s3_policy_attachment" {
policy_arn = aws_iam_policy.transcribe_access_s3_policy.arn
role = aws_iam_role.execute_transcribe_role.name
}