実施したこと
- JavaScriptでの非同期処理の復習
- Lambda上でのシンプルな非同期処理の書き方とCloudWatch上での確認方法。IAM等の関連サービスの設定方法の学習
開発したこと
- 学習のみで、今週は実装機能なし
学習したこと
- 非同期処理、スレッドを知るうえで把握しておくべきJavaScriptの仕組み
- コールスタック(Call Stack)
- 関数は呼び出されるとコールスタックに追加される
- メインスレッドが占有されている状態はコールスタックにコンテキストが積まれている状態とも言える
- コールスタックにコンテキストが積まれている時は、タスクキューは待ちの状態で、コールスタックにあるコンテクストがはけるまではタスクは処理されない
- また、コールスタックは、LIFO(Last In First Out)の構造を持った領域
- JavaScriptエンジンの内部に実装されている(メインスレッド)
- タスクキュー(Task Queue)
- 実行待ちの非同期処理の行列のことを指す。別の言い方をすれば、非同期処理の実行順序を管理しているとも言える
- 非同期処理はタスクキューに入った順番で処理は実行される
- また、タスクキューは、FIFO(First In First Out)の構造を持った領域
- JavaScriptエンジンの外部に実装されています(メインスレッド外)
- コールスタック(Call Stack)
- 重要なこと
- 非同期処理関連
- setTimeやPromiseのthen等で別スレッドにコールバックを仕込んだ場合、それはタスクキューに詰まれる
- JavaScriptはシングルスレッドのため、タスクキューに詰まれた処理が本処理と並行で走ることはない
- タスクキューの処理が実行されるのは、グローバルコンテクストで管理される本処理が終わった後になる
- AWS Lambda関数のログ
- console.log/info/warning等で出力した情報をCloudWatchで確認することができる
- コードを修正した後は、かならずデプロイしてからテスト、ログの確認を行うこと
- Lambda > 関数 > studyForAsyncのコード画面を見ると、テストボタンやデプロイボタン等のUIの配置から、デプロイする前に、現在のソースコードの実行結果をテストできるかのように見える。しかし、これは誤りで、実際にテストボタン押下で実行されるのは、以前にデプロイされた古いコードである。コード修正後は必ずデプロイを行ってから、テストを実行すること(n敗)
- S3へのアクセス権限設定
- 非同期処理関連
- 資料
- 資料1.特定のlambdaからのみS3のバケットを操作できるバケットポリシーを作りたい - Qiita
- 資料2.
- 非同期処理がJavaScript実行エンジン上のスレッドで、どのように処理されるのかが丁寧に説明されており、たいへん参考になる
所管
- 学習項目
- 学習の環境、手法
- 新たに契約したコワーキングスペースがとても快適で生産性が上がる
- アクセスが良く、設備がほどほどに良く、コストがとても安価
- 半年ほど、様々なコワーキングスペースを試していたが、ベストの環境を見つけてしまった
- デメリットとしては美味しいお店が周囲に多いこと。体重管理の観点で危険