ゲレの工房

ゲーム好きの中の人が、自分が作りたいアプリを作る記録です

FF14雑記:言語を超える力Web環境構築:Windows環境でPython+AWS ECR(Amazon Elastic Container Registry)+Lambdaの勉強

前回の記事はこちらです

blog.gelehrte.com

前回の記事でWindows環境にDockerを入れられたので、Dockerで作られた環境をAWS ECRにアップロードし、Lambdaに入れる作業を学びたいと思います。Docker+pythonを使うのは、TensorFlowを動かしたいからです。
また、S3に「言語を超える力」で読み込ませたい画像をアップロードするのはPythonを使う必要は無いので、JavaScriptで構築したいと思います。その方がメンテナンスしやすいので。

参考記事

AWS ECR + Lambdaを使ってみる

基本このサイトの手順を使って練習を行いました。
zenn.dev

WindowscurlJSONをPOSTする際に困った話

テスト時にWindows版のcurlの仕様に悩んだのでメモを
qiita.com

AWS Tools for PowerShellの設定と認証

コマンドが途中で必要になったので設定
yoshinorin.net



やった練習

ecr-tutorial を使ってECRをテストする

Windows環境でのテスト

以下からソースを落とし
github.com


まずはWindows環境でビルド

docker-compose.exe up -d --build

スクリプトをテストしたときに、curlでのエスケープ処理に困ったのでググりながら以下をPOST

curl -d '{\"sentence\":\"I am Taro Yamada.\"}' -H "Content-Type: application/json" http://localhost:9000/2015-03-31/functions/function/invocations

正しくは自然言語処理をされているテストとしてはおかしいのですが、私はあくまでAWS ECR・Lambdaのテストをしたいので一応のこのコマンドで。WIndows版のDockerでは確かにecr-tutorialが動いていることがわかります。


ECRへpush

そもそもECRってAmazon Elastic Container Registryの略だと知る

ググったりしていると略称で紹介されていることが多いので、いきなりのつまづき。どれのことだと悩んだりしました。

PowerShell 向けの AWS Toolsが必要らしい

インストールしてみる
docs.aws.amazon.com


インストーラーをインストール

> Install-Module -Name AWS.Tools.Installer

ECR関連をインストール

> Install-AWSToolsModule AWS.Tools.ECR

テスト

> (Get-ECRLoginCommand).Password      
Get-ECRLoginCommand: No credentials specified or obtained from persisted/shell defaults.

No credentials specified or obtained from persisted/shell defaults.と怒られたので対応。

AWS Tools for PowerShellの設定と認証の記事に従い対応。
このときPowerShellは管理者で起動させなきゃいけないことに注意。

起動時に認証ファイルを読み込めるようにするには次の記事を参考に
yoshinorin.net

> Import-Module AWSPowerShell
Import-Module : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Program Files\WindowsPowerShell\Mod
ules\AWSPowerShell\4.1.89\ImportGuard.ps1 を読み込むことができません。
PowerShellでこのシステムではスクリプトの実行が無効になっているため、ファイル hoge.ps1 を読み込むことができません。となったときの対応方法

こちらを参考に対応
qiita.com


諸々再設定してテスト

> (Get-ECRLoginCommand).Password
Get-ECRLoginCommand : No region specified or obtained from persisted/shell defaults.

デフォルトのリージョンを設定する必要がある様子。

Get-SSMInstanceInformation : No region specified or obtained from persisted/shell defaults.

こちらの記事を参考に対応
awsjp.com

対応 done

> Set-DefaultAWSRegion ap-northeast-1
> (Get-ECRLoginCommand).Password
eyJwYXlsb2FkIjoiTVQw・・・・

うん動いた。

push done

なんとかpush できました。

AWS Lambdaでテスト

上記の「AWS ECR + Lambdaを使ってみる」のサイトのままテスト

動きました。あとサイトを参照しつつ、レポジトリの削除などを作業しました。

aws-cli で削除
> aws.exe ecr list-images --repository-name ecr-tutorial
{
    "imageIds": [
        {
            "imageDigest": "sha256:***",
            "imageTag": "latest"
        }
    ]
}

> aws.exe ecr batch-delete-image --repository-name ecr-tutorial --image-ids imageDigest=sha256:***
{
    "imageIds": [
        {
            "imageDigest": "sha256:***",
            "imageTag": "latest"
        }
    ],
    "failures": []
}
以下はAWS UI上で作業

イメージもUIで削除できたかもしれないけど

  • ECR:ecr-tutorialレポジトリ削除
  • Lambda:ecr-tutorial関数削除

次の目標

JavaScriptAmazon S3にファイルをアップロード

このあたりが参考になりそうです
qiita.com
S3に画像ファイルを置けば、Lambdaから読み込んで加工できるという寸法です。

Lambdaで画像を加工し、S3に書き込む

このあたりの記事が参考になりそうです。
business.ntt-east.co.jp

S3に処理された画像が書き込まれたら、画像を表示するWeb UIを作る

S3の特定のURLにファイルが書き込まれるはずです、Web UI側でファイルの存在をJavaScriptで(1秒ごとにチェックしにいくとかで)検知し、表示させます。

LambdaでTensorFlowを動かす

ファイル加工部分をTensorFlowにし、TensorFlowさえ動けば「言語を超える力」の処理が行なえます。書き込みはS3にそのまま書き込みます。

進捗

言語を超える力の学習が大分進みました

入力

こちらを入力して

出力

こちらを出力できるぐらいにはなりました。

早くWeb公開したいですね。

終わりに

少しずつ「言語を超える力」のWeb版の形が見えてきました。日々勉強ですね。


広告