ひぐぺん工房トップへ おかげさまで28周年!

ひぐぺん工房(松浦健一郎・司ゆき) - HigPen Works
Follow @higpenworks
・今までの仕事 ・書籍 ・最近の業務 ・対応可能言語 ・お見積

『AWSでつくる AIプログラミング入門』
Q&A

以下の回答で問題が解決しなかった場合には、 こちらから ご連絡ください。

訂正


2020/04/24
Q.AWS CLIの動作確認(Chapter1, p.35)
A.
動作確認のコマンドにおいて、「--target-language」と「code」の間の「-」が抜けていました。誠に申し訳ありません。下記が正しいコマンドです。

aws translate translate-text --source-language-code en --target-language-code ja --text hello

2021/06/10
Q.Forecastにデータを取り込むプログラム(Chapter9, p.370)
A.
Forecastにデータを取り込むプログラム(forecast_import_dataset.py)の「#(10)データ取り込みジョブの進捗を表示」に誤りがあり、ジョブの進捗が表示されていませんでした。誠に申し訳ありません。修正案をお知らせいただきありがとうございます。下記が修正後のプログラムです(修正後の本書ダウンロードファイル)。

start = time.time()
while True:
  status = forecast.describe_dataset_import_job(
    DatasetImportJobArn=job_arn)['Status']
  print('{:7.2f} {}'.format(time.time()-start, status))
  if status in ['CREATE_PENDING', 'CREATE_IN_PROGRESS']:
    time.sleep(10)
  else:
    break

また関連して、p.373の説明を以下のように修正させていただけましたら幸いです。

修正前:戻り値(辞書)のキー'DatasetImportJob'から、ジョブの情報(辞書)を取得できます。この辞書からは、キー'Status'を使ってジョブの状態を取得できます。
修正後:戻り値(辞書)のキー'Status'を使って、ジョブの状態を取得できます。

プログラムの修正により、以下のように動作が修正および改良されます。

補足


2020/02/17→20210610追記
Q.データセットなどが削除できない(Chapter8, 9)
A.
Personalize(Chapter8)やForecast(Chapter9)において、データセットなどが削除できなくなることがあります。例えば、開始したデータ取り込みジョブが何らかの原因で進まなくなってしまい、ジョブが使用しているデータセットを削除することができず、ジョブを終わることもできないという状況に陥ることが、本書の執筆中にも一度ありました。例えば以下のようなエラーメッセージが見られる場合は、このような状況になっている可能性があります。

Bad request … ResourceInUseException : Operation not allowed when the resource arn:aws:…:dataset/MyDataset is being referenced by these resources : [ arn:aws:…:dataset-import-job/MyDataset/MyDatasetImport ]
(データ取り込みジョブがデータセットを参照中なので、指定された操作をすることができない。)

このような場合は、以下をお試しください。
  1. 本書のプログラムを使用してリソースを削除する。
    Personalizeの場合は8.9(p.343)、Forecastの場合は9.8(p.384)に掲載している、リソースを削除するための一連のプログラムを実行してみてください。これで削除に成功した場合には、再度データの登録から作業してみてください(Personalizeは8.3から、Forecastは9.3から)。

    20210610追記:Forecastについて、データ取り込みジョブを含めて削除するように、改良版の削除用プログラム(fore_delete_dataset.py)を用意しました。改良案をお知らせいただきありがとうございます。下記が削除用プログラムに追加した処理です(修正後の本書ダウンロードファイル)。

    for job in forecast.list_dataset_import_jobs()['DatasetImportJobs']:
      job_arn = job['DatasetImportJobArn']
      print('dataset import job ARN:', job_arn)
      forecast.delete_dataset_import_job(DatasetImportJobArn=job_arn)

  2. アカウントを削除する。
    上記のプログラムやAWSのコンソールを使って、リソースを削除しようと何度も試みても、削除できない場合があります。本書の執筆中にもこの状況に陥りました。ある程度の時間が経過すれば、データ取り込みジョブがタイムアウト(時間切れ)になって終了するかと思ったのですが、執筆時点では終了しないようでした。そこでやむなくAWSのアカウントを削除し、新しくアカウントを作成し直しました。アカウントを削除すれば、継続して課金されるということはありません。また、新しいメールアドレスで新しくアカウントを作成した場合には、新たに無償期間が付与されます。
  3. AWSのサポートに依頼する。
    もしアカウントを本書以外の目的にも使用しており、どうしても削除するのが難しい場合には、AWSのサポートにデータセットを削除してもらえるように依頼する、という方法も考えられます(筆者は試していません)。
PersonalizeやForecastは比較的最近導入された機能のためか、他の機能に比べてやや未成熟に感じる部分があります。復帰不可能な問題が生じたときにはアカウントを削除できるよう、本書用に新規のアカウントを作成していただくのがおすすめです。

2020/04/24
Q.データの登録で「Dataset Type:TARGET_TIME_SERIES is missing…」というエラーが出る(Chapter9, p.361)
A.
エラーメッセージは「Dataset type: TARGET_TIME_SERIES is missing the required field: item」(データセットタイプ:TARGET_TIME_SERIESに必要なフィールドitemがない)です。fore_create_dataset.pyの以下の部分において、「item_id」に大文字を混ぜると(「item_ID」「ITEM_id」「ITEM_ID」など)、このエラーが発生します。「item_id」に修正すれば、エラーは解消します。

schema_json = {
  "Attributes": [
    …
    {
      "AttributeName": "item_id",
      "AttributeType": "string"
    }
  ]
}

本書のプログラムを手作業で入力した場合、微妙な記述の違いで動作しないことがあります。もし動作しない場合には、以下の手順をお試しください。
  1. 手作業で入力するのではなく、本書のダウンロードファイルを利用し、そのまま変更せずに実行してみてください。
  2. ダウンロードファイルが動作する場合には、手作業で入力したファイルと比較してみてください。目で比較すると違いを見落としやすいので、ツールを使って比較するのがおすすめです。Windowsでは「WinMerge」などのツール、macOSやLinuxでは「diff」などのツールが使えます。テキストエディタがファイルの比較機能を持っている場合もあります。

2020/04/28
Q.データの登録で「A dataset already exists with the arn…」というエラーが出る(Chapter9, p.361)
A.
エラーメッセージは「An error occurred (ResourceAlreadyExistsException) when calling the CreateDataset operation: A dataset already exists with the arn…」(CreateDatasetにおいてエラーResourceAlreadyExistsExceptionが発生:次のようなARNのデータセットは既に存在している)です。fore_create_dataset.pyを重複して実行した場合などに発生します。

解決するには、本書p.361~p.362に記載されているように、fore_delete_dataset.pyを実行してから、もう一度fore_create_dataset.pyを実行してください。

それでも解決しない場合には、9.8(p.384)に掲載している、リソースを削除するための一連のプログラムを実行してみてください。これで削除に成功した場合には、再度fore_create_dataset.pyを実行してみてください。

さらにそれでも解決しない場合には、このQ&Aの「データセットなどが削除できない(Chapter8, 9)」をお試しください。

2021/01/30
Q.AWS CLIのインストール(Chapter1, p.32)
A.
最近の環境(Windows 10 Home 64bit、Python 3.9.1 64bit)を使って、コマンドプロンプトからAWS CLIのインストールを確認したところ、以下のようにインストールに成功しました。もしAWS CLIのインストールに失敗する場合は、一度Pythonをアンインストールしてから、本Q&Aと同じバージョン(Python 3.9.1 64bit)を使って、インストールをお試しいただけましたら幸いです。

>pip install awscli --upgrade

Successfully installed awscli-1.18.223 botocore-1.19.63

>aws --version
aws-cli/1.18.223 Python/3.9.1 Windows/10 botocore/1.19.63

なおAWS CLIのインストールは、AWSアカウントやIAMユーザの作成とは独立しています。例えば、AWSアカウントやIAMユーザが未作成や未設定の場合でも、AWS CLIをインストールして「aws --version」を実行するところまでは進めます。

2021/07/17
Q.プログラムの実行(Chapter2, p.42)
A.
p.42のプログラム(trans_text_ja.jp)が実行できない場合、以下をご確認ください。
  1. 「import boto3」でエラーが出た場合、Boto3のインストールに失敗している可能性があります。p.36-37の手順に沿ってBoto3をインストールし、p.37の動作確認に成功することを確かめてください。なおWindowsの場合、boto3のファイルはAppDataフォルダ(これはクラウドではなく、PCのローカルディスクです)以下に配置されますが、このファイルを手作業で他の場所にコピーや移動する必要は生じません(pipコマンドでインストールするだけで、boto3をimportできるようになります)。もし手作業でコピーや移動を行うことで「import boto3」が実行できても、他の問題が生じる可能性がありますので、p.36-37の手順に沿ってインストールし直してください。
  2. 「translate = boto3.client('translate')」でエラーが出た場合、前述のようにBoto3のインストールに失敗しているか、AWS CLIのインストールに失敗している可能性があります。p.32-35の手順に沿ってAWS CLIをインストールし、p.35の動作確認に成功することを確かめてください。なおp.35の動作確認コマンドについてはこの訂正をご覧ください。
  3. もしBoto3やAWS CLIの動作確認に失敗する場合には、Pythonのインストール(p.24)、IAMユーザの作成(p.14)、AWSアカウントの作成(p.9)に戻り、本書の手順に沿ってセットアップしてください。各段階について本書に記載された動作確認を行い、もし動作確認に失敗したら、その段階をやり直してください。
  4. もし各段階をやり直しても動作確認に失敗する場合、他のPCをお持ちならば、他のPCでお試しください。動作しない原因がPCにある場合に、問題を回避できる可能性があります。PCに他のバージョンのPythonがインストールされている場合や、会社用のPCなどで独自のセキュリティ設定がされている場合、その他環境設定などが原因で、特定のPCでは動作しない(あるいは動作させるために特別な手順が必要な)ことがあります。

最終更新 2022/11/02
トップページへ
©ひぐぺん工房 禁無断転載
最新刊『Java[完全]入門』 
このサイトはリンクフリーです。
このサイトはChromeで動作検証しています。ブラウザにかかわらず表示に乱れがありましたらどうぞお知らせ下さい。メールを送る