Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WLS2:Ubuntu上でのAWS Step Functions(Python)開発環境の構築

Saito5656
December 20, 2021

WLS2:Ubuntu上でのAWS Step Functions(Python)開発環境の構築

社内技術講習用の資料作成を兼ねてスキルの棚卸をしました。

未経験者がSAM templateでStep Functionsを選択した際に添付されるSampleをcliで実装するのを補助するために、必要なcli操作の手順をスクショで説明した資料となります。

2021.12.20修正
2点説明が欠落していた個所を追記しました。
・sshキーの生成とssh再起動の2行追記(p. 12)
・「VS Code Http: Proxyの設定解除」のページを追加(p. 22)

Saito5656

December 20, 2021
Tweet

More Decks by Saito5656

Other Decks in Programming

Transcript

  1. 実施内容 1.概要説明 2.WLS2 Python開発環境構築 3.AWS SAM によるLambdaの実装 ①HelloWorldFunction templateの実装 ②AWS

    explorerによるLambda Functionの実行 4.AWS SAM によるStep Functionsの実装 ①Step Functions templateの実装 ②template.yamlとstate machine ③State Machineのasl.json ④AWS explorerによるStep Functionsの実行
  2. SAMのprefix/key構造とstate machine state machine flow chart 各関数の格納先 関数の集合 ③state machine:step定義するjson

    State machineの格納先 ② template.yaml:Resource/Outpu定義 ①Lambda関数:実行プログラム state machineによる実行定義 Lambda関数による実行定義 directory構造
  3. WSLのVERSIONを確認 #コマンドプロンプトより C:¥Users¥saito_2414>wsl -l -v NAME STATE VERSION Ubuntu Running

    1 VERSIONは1のはずなのでVERSION 2に変更 C:¥Users¥saito_2414>wsl --set-version Ubuntu 2 #「WSL 2を実行するには、カーネルコンポーネントの更新が必要です」が表示されたら、 https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel⇒「wsl_update_x64.msi」を ダウンロードして実行して、再度「wsl --set-version Ubuntu 2」を実行 VERSIONの確認 #コマンドプロンプトより C:¥Users¥saito_2414>wsl -l -v NAME STATE VERSION Ubuntu Running 2 UbuntuをWSL2用に変換 ←変らなかったら再起動してVERSION再確認
  4. 再度「wsl.exe --set-version Ubuntu 2」と入力して下記メッセージが出た場合 # または「 Windowsの機能の有効化または無効化」で「仮想マシンプラットフォーム」 が表示されない場合、BIOSの仮想化支援機能を有効化する BIOSで有効化する項目 intel

    CPU: VT-x VT-d AMD CPU: AMD-V(UEFI上ではSVM Mode、CPU Configurationにある) IOMMU(Advanced>AMD CBS>NBIO Common Options等、深い場所) 【参考】https://jp.finalfantasyxiv.com/lodestone/character/6584870/blog/4364798?order=2 仮想化支援機能の有効化が必要な場合
  5. WSL:Ubuntuのssh設定① sshのBASIC認証許可 # Ubuntuターミナルを起動 $ sudo nano /etc/ssh/sshd_config PasswordAuthentication yes

    $ sudo ssh-keygen –A $ sudo service ssh restart #以下のスクリプトをWindowsで起動時実行するバッチファイルとして作成(下例はssh_bat.bat) wsl -d Ubuntu -u root exec service ssh restart for /F %%i in (‘wsl -d Ubuntu exec hostname -I’) do set ip=%%i netsh interface portproxy delete v4tov4 listenport=22 netsh interface portproxy add v4tov4 listenport=22 connectaddress=%ip% #バッチファイルを任意の場所に保存 ssh_bat.bat
  6. 【補足】WSL2のssh設定 • P.10、11の手順でWSL2のssh接続ができない場合はタスクスケジューラーの設定を削除し て、Ubuntuで起動時実行するスクリプトを作成してcronで実行させる • 以下はファイル名「ssh_start」で起動時実行する場合の例 /home/ {ユーザーdirectory}でファイル作成 $ sudo

    nano ssh_start /binにコピーして実行権限付与 $ sudo cp ssh_start /bin $ cd /bin $ sudo chmod u+x ssh_start crontab起動 $ crontab –e ⇒editorを選択しろと言ってきたら好きなの選ぶ 推奨はnano 最終行に以下の一文を登録 @reboot sudo ssh_start ・ ・ ・ ssh_start sudo ssh-keygen –A sudo service ssh start コピペで実行ファイル作成
  7. Docker Desktopのインストール インストールとセットアップ # https://www.docker.com/get-startedより「Windows用にダウンロード」をクリック # 「Enable WSL 2 Windows

    Features 」をチェックしたままインストールを続ける #インストール完了後に「setting」⇒「General」でExpose deamon とWSL2 engineの有効を確認 # 「setting」⇒「Resources」⇒「WSL INTEGRATION」でUbuntuをonにしてRestart docker
  8. WSL:UbuntuのPython開発環境構築 User groupsの確認 $ groups $ adm dialout cdrom floppy

    sudo audio dip video plugdev netdev docker Sudo実行時のpass word入力省略 $ sudo visudo #一番最後の行として追加 {username} ALL=(ALL) NOPASSWD: ALL Update/upgrade/python仮想環境(venv)インストール $ sudo apt update && sudo apt upgrade -y && sudo apt install python3-venv -y 仮想環境(venv)の作成 $ python3 -m venv myenv Python開発環境の構築 $ sudo apt install python3-pip python3-dev git awscli pipenv -y $ sudo pip3 install launchpadlib==1.10.13 six==1.15 jmespath~=0.10.0 $ sudo pip3 install pip autopep8 numpy pandas boto3 cfn-lint setuptools awscli aws-sam-cli --upgrade ←Dockerが追加されてるのを確認 ←仮想環境名をmyenvとする場合
  9. WSL:Ubuntu userのパラメーター設定 Git user設定 $ git config --global user.name “任意のユーザー名"

    $ git config --global user.email “任意のemailアドレス” AWS access key / secret access key / default region / default output設定 $ aws configure AWS Access Key ID []: 各自のアクセスキー AWS Secret Access Key []: 各自のシークレットアクセスキー Default region name []: ap-northeast-1 Default output format []: json ←Dockerが追加されてるのを確認
  10. WSL:UbuntuよりVS CodeのPATHを追加 .bashrcへPATHを追加 $ sudo nano .bashrc #一番最後の行として追加 export PATH=$PATH:'/mnt/c/Users/{$username}/AppData/Local/Programs/Microsoft

    VS Code/bin’ WSL2をreboot #Windowsのコマンドプロンプトより以下を実行 C:¥Users¥saito_2414> wsl --shutdown #実行するとUbuntuターミナルが閉じる、処理が完了するとコマンドプロンプトにカーソルが戻ってくる C:¥Users¥saito_2414> #再度Ubuntuターミナルを立ち上げるとPATHが反映されている $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Program ・・・・ft/WindowsApps:/mnt/c/Users/saito_2414/AppData/Local/Programs/Microsoft VS Code/bin:/snap/bin:/mnt/c/Users/saito_2414/AppData/Local/Programs/Microsoft VS Code/bin
  11. WSL:Ubuntu仮想環境でVS Code起動 Venvのアクティベート $ cd myenv myenv~$ source bin/activate VS

    Code起動 $ code . #初回起動時、update時は以下のようなダウンロードと展開が始まる ←自分が作った仮想環境名でdirectoryが作られているのでそこに移動 ←仮想環境のアクティベート
  12. VS Code拡張機能インストール Remoto Developmentのインストール # 「 Ctrl-Sihft-x」(拡張機能)から「remote」と入力してRemote Developmentをインストール PythonとPylanceのインストール #

    「 Ctrl-Sihft-x」(拡張機能)から「py」と入力して候補からPython/Pylance拡張機能をインストール AWS Toolkitのインストール # 「 Ctrl-Sihft-x」(拡張機能)から「aws」と入力して候補からAWS Toolkit拡張機能をインストール
  13. VS Code Http:Proxyの設定解除 Http: ProxyとHttp: Proxy Strict SSLの設定解除 VSCodeによるAWS TOOLKITへのプロキシ制御を回避するために

    ・Http: Proxy ⇒ 削除 ・Http: Proxy Strict SSL ⇒ チェックを外す ・Http: Proxy Support ⇒ offにする
  14. VS Codeターミナルから仮想環境をactivate 自分の作った仮想環境をactivate Ubuntu:~/myenv$ source bin/activate (myenv) Ubuntu:~/myenv$ Home directoryを作成して移動

    (myenv) Ubuntu:~/myenv$ mkdir home (myenv) Ubuntu:~/myenv$ cd home (myenv) Ubuntu:~/myenv/home$ ↑仮想環境がアクティベート
  15. AWS SAM SAMとは # サーバーレス アプリケーションのデプロイに特化したAWS CloudFormation の拡張機能 # AWS

    Serverless Application Modelの略称 参考資料: https://d1.awsstatic.com/webinars/jp/pdf/services/20190814_AWS-Blackbelt_SAM_rev.pdf : https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/Welcome.html 今回のHands Onで使うSAM template # AWS Quick Start Templates - Hello World Example - Step Functions Sample App (Stock Trader)
  16. sam init でHello World templateを選択 sam init コマンドを実行 (myenv) Ubuntu:~/myenv/home$

    sam init templateを選択してHello World Projectを作成 sam-app-saito ↓関数名に「-名前」を追加
  17. buildとAWSへCloudFormation stack deploy Dockerを使ってProjectをLocalでbuild (myenv) Ubuntu:~/myenv/home/sam-app$ sam build --use-container Local環境からAWSにHello

    World Functionを実行するCloudformation stackデプロイ (myenv) Ubuntu:~/myenv/home/sam-app$ sam deploy --guided ←任意のstack名 ←reagion名
  18. event.jsonを使ったLocal実行 --eventスイッチでevent.jsonのPATHを指定してLambda関数(HelloWorldFunction)をLocal実行 (myenv) Ubuntu:~/myenv/home/sam-app$ sam local invoke HelloWorldFunction --event events/event.json

    # event.jsonにはLambdaとAPI Gateway実行時にやり取りされるrequests/response等が格納されている ↑Localにmountして権限を渡している ←本番環境と同様のlog/responseが返ってくる
  19. API emulatorでの動作確認 Local port:3000からのrequestへのresponseを確認する (myenv) Ubuntu:~/myenv/home/sam-app$ sam local start-api #

    Local:3000でAPI GatewayのemulatorがGETで待ちになっている Ubuntuターミナルからrequestを実行 (myenv) Ubuntu:~/myenv/$ curl http://localhost:3000/hello # Lambdaが実行されてresponseが返ってくる↓→
  20. pytestで単体テスト/結合テスト requirements.txtのインストール (myenv) Ubuntu:~/myenv/home/sam-app$ sudo pip3 install -r tests/requirements.txt --user

    Lambda関数単体テストの実行 (myenv) Ubuntu:~/myenv/home/sam-app $ python3 -m pytest tests/unit –v Stack結合テストの実行 (myenv) Ubuntu:~/myenv/home/sam-app $ export AWS_SAM_STACK_NAME=sam-app (myenv) Ubuntu:~/myenv/home/sam-app $ python3 -m pytest tests/integration -v
  21. 参考:SAMとCloudFormationのtemplate比較 SAM CloudFormation 自動変換 SAMを使うメリット # Stack構築時にtemplateを大幅に簡略化できる # PC LocalでLambda関数をdebug~deploy出来る

    # Resource をyaml/jsonをテンプレート定義できる # テンプレート定義を使い展開できる # 修正してもLocalから上書きdeploy出来る # CloudFormation Stackなので一括削除可能 SAM利用時の注意点 # 既存のAPI Gateway や S3をtriggerに使えない
  22. AWS Step Functions Step Functionsとは # AWS Lambda関数と他の AWS サービスを使用したserverlessオーケストレーションサービス

    #ステートマシンとタスクで構成される #ステートマシンはワークフロー #タスクは別の AWS サービスが実行する 1 つの作業単位を表すワークフロー内の状態 参考資料: https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/welcome.html https://qiita.com/kojiro_ueda/items/901e730a83d73bc0baa3 https://qiita.com/kinzal/items/843c4659a887a9af7499 https://dev.classmethod.jp/articles/aws-step-functions-choice-state-end-field/
  23. SAM Step Functions templateの概要 AWS Step Functions workflow AWS Cloud

    Amazon DynamoDB Transaction Table Amazon EventBridge AWS Lambda Stock checker AWS Lambda Stock seller AWS Lambda Stock buyer AWS IAM AWS IAM AWS IAM 乱数でダミー株価を設定して50以下なら買い、50より高ければ売り処理して記録する
  24. sam init でStep Functions Sample Appを選択 sam init コマンドを実行 (myenv)

    Ubuntu:~/myenv/home$ sam init templateを選択してStep Functions Projectを作成 sam-app-saito-SF ↓関数名に「-名前-SF」を追加
  25. buildとAWSへCloudFormation stack deploy Dockerを使ってProjectをLocalでbuild (myenv) Ubuntu:~/myenv/home/sam-app-saito-SF$ sam build --use-container Local環境からAWSにHello

    World Functionを実行するCloudformation stackデプロイ (myenv) Ubuntu:~/myenv/home/sam-app-saito-SF$ sam deploy --guided ←stack名
  26. pytestで単体テスト/結合テスト requirements.txtのインストール (myenv) Ubuntu:~/myenv/home/sam-app-saito-SF$ sudo pip3 install -r tests/requirements.txt --user

    Lambda関数単体テストの実行 (myenv) Ubuntu:~/myenv/home/sam-app-saito-SF$ python3 -m pytest tests/unit –v Stack結合テストの実行 (myenv) Ubuntu:~/myenv/home/sam-app-saito-SF$ export AWS_SAM_STACK_NAME=sam-app-saito-SF (myenv) Ubuntu:~/myenv/home/sam-app-saito-SF$ python3 -m pytest tests/integration -v
  27. Resourcesセクション(State machine) ←state machine url デプロイするState machineのResource詳細定義を記述 ←state machine 内の

    Resource/Parameter 定義 ←state machine Resource名 ←Event名 ←定時実行 ←定時実行内容
  28. Resourcesセクション(Lambda) デプロイするLambdaの詳細定義を記述 ←Resource type(Function) ←Resource 名(check) 保存先url ←ハンドラーのlibrary/method Runtime ←Resource

    type(Function) ←Resource 名(seller) 保存先url ←ハンドラーのlibrary/method Runtime ←Resource type(Function) ←Resource 名(buyer) 保存先url ←ハンドラーのlibrary/method Runtime
  29. END