どこにでもいる30代SEの学習ブログ

主にプログラミング関連の学習内容。読んだ本の感想や株式投資についても書いてます。

【AWS】Lambdaをスケジュール起動する方法

今回は、AWS Lambdaで作成した関数をスケジュール起動する方法に挑戦しました。前回作成したHello, Worldを3分周期で起動させますす。

https://predora005.hatenablog.com/entry/2021/05/02/190000predora005.hatenablog.com

[1] トリガーの追加

Lambdaの画面から[トリガーを追加]を選択します。

f:id:predora005:20210411014225p:plain

トリガーの種類の中から「EventBridge (CloudWatch Events)」を選択します。ルール名は任意でOKです。

f:id:predora005:20210411014229p:plain

ルールタイプを「スケジュール式」にし、スケジュール式に「rate(3 minitus)」を入力します。入力が終わったら[追加]を押します。

f:id:predora005:20210411014233p:plain

これですぐに3分周期の起動が開始されます。

f:id:predora005:20210411014237p:plain

[2] ログで確認

ちゃんと3分周期で起動されているのかログで確認します。問題なく起動されているのが確認できました。

f:id:predora005:20210411014241p:plain

CloudWatchでログを確認しても、3分周期で起動されていることが分かります。

f:id:predora005:20210411014246p:plain

終わりに

スケジュール起動は非常に簡単で、5分もあれば設定できることが分かりました。今回使ったのはrate式ですが、cronを使えば指定時刻での起動もできます。色々な場面で使えそうです。

出典

【AWS】Lambdaの使い方や料金(初めて使うとき気になったこと)

AWS Lambda」はAWSのサーバーレスコンピューティングサービスです。

定期的に実行する処理や、イベントで起動する処理を作りたいと思い、使ってみることにしました。例えば、1日に1回株価のチャート分析をしたり、Webアプリからの入力があったらデータベースに登録したり等です。

初めて使うにあたり、気になる料金や使い方をまとめました。使い方はPythonでの使い方を紹介しています。

[1] 料金

初めて使う際に動作確認程度で使用する場合、料金を気にする必要はありません。AWS Lambdaの料金は「割り当てるメモリ」「リクエスト数」「実行時間」で決まります。

  • 100万リクエストあたり $0.20
  • 1GBメモリ1秒実行当たり $0.0000166667

しかし、無料枠が設けられています。

  • 1 か月ごとに 100 万リクエスト / 1ヶ月
  • 1GBメモリ40万秒の実行時間 / 1ヶ月

実行時間としては、1ヶ月あたり以下を下回れば無料で使い続けられます。

メモリ 無料枠終了までの実行時間
128MB 888時間
512MB 222時間
1GB 111時間
4GB 28時間

個人で試しに使う分には、無料枠の範囲内で済みそうです。

料金 - AWS Lambda |AWS

[2] Hello, World

まずは、Hello, Worldを返すだけのコードを作りました。ちなみに、公式のチュートリアルにもHello, Worldの実行手順が載っています。しかし、少し内容が古いので細かい点はアレンジした方が良さそうです。

[2-1] 関数の作成(Python)

まずは、関数を作成します。

f:id:predora005:20210410145057p:plain

今回は「一から作成」を選びます。

f:id:predora005:20210410145102p:plain

任意の関数名を入力し、ランタイムをPythonに変更して[関数の作成]を押下します。

f:id:predora005:20210410145108p:plain

以上で、関数の作成は終了です。

f:id:predora005:20210410151521p:plain

[2-2] Hello, Worldを実行する

Hello, Worldのソースコードが自動で作成されているので、[Test]を押して早速実行してみます。

f:id:predora005:20210410151545p:plain

テストを実行するためには、イベントの設定が必要です。ここではイベント名はデフォルトのまま作成します。

f:id:predora005:20210410151551p:plain

実行後に実行結果が表示されます。「Response」が呼び出し元に返す結果、「Function Logs」がログです。

f:id:predora005:20210410151556p:plain

[2-3] ソースコードの変更

引数として受け取っている「event」と「context」の中身をprint文でログに出力してみます。ソースコードの変更後は[Deply]を押して変更を反映します。

f:id:predora005:20210410152455p:plain

反映されると"Changes deployed"の表示に変わります。

f:id:predora005:20210410152501p:plain

実行してみると「Function Logs」にeventとcontextの中身が出力されています。

f:id:predora005:20210410152504p:plain

contextの詳細は以下に載っています。

Python の AWS Lambda context オブジェクト - AWS Lambda

[2-4] ログの確認

[モニタリング]タブの[ログ]をクリックすると、これまでに登録されたログが表示されます。そのうちの一つをクリックすると、Cloud Watchの画面に移動します。

f:id:predora005:20210410154526p:plain

Lambdaの実行結果(ログ)は、Cloud Watchに登録されるようになっています。

f:id:predora005:20210410154532p:plain

終わりに

料金と簡単な使い方を紹介しました。AWS Lambdaは上手に使えば、色々なことに有効活用できそうです。どのような使い方があるのか今後も調べていきたいと思います。

出典

【読書】「データ分析人材になる。目指すは「ビジネストランスレーター」 」の感想

f:id:predora005:20210328235309j:plain
*1

「データ分析人材になる。 」という書籍を読んだので、感想を書いていきます。

https://www.amazon.co.jp/%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%E4%BA%BA%E6%9D%90%E3%81%AB%E3%81%AA%E3%82%8B%E3%80%82-%E7%9B%AE%E6%8C%87%E3%81%99%E3%81%AF%E3%80%8C%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B9%E3%83%AC%E3%83%BC%E3%82%BF%E3%83%BC%E3%80%8D-%E6%9C%A8%E7%94%B0-%E6%B5%A9%E7%90%86/dp/4296107631/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%E4%BA%BA%E6%9D%90%E3%81%AB%E3%81%AA%E3%82%8B&qid=1616913258&sr=8-1www.amazon.co.jp

[1] データサイエンティストは目指さなくていい

そもそも、企業が求めているのは「高度なデータ分析ができるデータサイエンティスト」ではないということです。データ分析があるに越したことはありませんが、ビジネス力を持った人材を求めています。

企業はデータ分析をビジネスに役立てることを求めています。なので、全員がデータサイエンティストを目指す必要はなく「ビジネスに役立つデータ分析人材」になればいい、というのが筆者たちの主張です。

[2] 5Dフレームワーク

筆者たちの経験を元に生み出した方法論が「5Dフレームワーク」です。

  1. Demand (要求を聞く)
  2. Design (全体の絵を描く)
  3. Data (データを集める)
  4. Develop (分析する)
  5. Deploy (展開する)

[3] 筆者らの成功/失敗エピソードがリアル

Dフレームワークを作るに至った成功/失敗のエピソード集が、本書の第1章になっています。私はシステムエンジニアでありデータサイエンティストではありません。しかし、エピソードを読んでいると「ああ、こういうことある」と思うところが多々ありました。ソフトウェア開発あるあるは、データ分析にも当てはまるということでしょう。

第1章のエピソードがリアルなので、第2章以降が説得力を増していました。

[4] データ分析のノウハウ本では無い

本書にデータ分析の具体的なノウハウは載っていません。第2章は5Dフレームワークをどのように実践していけばよいか、第3章はデータ分析人材育成法であり、抽象度の高い内容になっています。

データ分析に携わった経験のない人や、直接データ分析を行わない管理職の方を想定して書かれています。

終わりに

データ分析が実際にどのように進められているのか、どのような問題が起こりがちでどのような人材が求められているのか、知るのに良い本でした。

データ分析やAIは、実態にそぐわない過度な期待を持たれがちです。ですが、実際にデータ分析をしてみると、意外と地道な作業が多かったりもします。

データサイエンティストを目指す方や、データ分析を支持する経営層や管理職の方が、データ分析の実態を把握するのに良い本ではないかと思いました。

*1:DeedsterによるPixabayからの画像

【AWS】IAMユーザのパスワードが切れたときの復旧方法

AWSに久々にログインしようとしたところ「パスワードの有効期限が切れました。管理者に連絡してパスワードの再設定を行ってください。」と表示されてしまいました。

IAMユーザのパスワード有効期限が切れた場合は、rootユーザで復旧します。

f:id:predora005:20210331233435p:plain

rootユーザでコンソールにサインインし、IAMの画面を開きます。パスワードが切れたユーザを選択し[認証情報]タブの[コンソールのパスワード]の[管理]をクリックします。

f:id:predora005:20210331232437p:plain

[パスワードの設定]を「自動生成パスワード」か「カスタムパスワード」にします。どちらでも構いません。

[パスワードのリセットが必要]ば任意です。必要に応じてチェックしてください。

f:id:predora005:20210331232845p:plain

適用すると、新しいパスワードが取得できます。控えるのを忘れないようにしましょう。

f:id:predora005:20210331232859p:plain

新しいパスワードで再度サインインすると無事に認証が通りました。

f:id:predora005:20210331233247p:plain

参考資料

AWS アカウントのパスワードを復旧する

【読書】「ゼロ秒思考 頭がよくなる世界一シンプルなトレーニング」の感想

f:id:predora005:20210331083229j:plain
*1

「ゼロ秒思考 頭がよくなる世界一シンプルなトレーニング」という書籍を読みました。概要と感想を書いていきます。

https://www.amazon.co.jp/%E3%82%BC%E3%83%AD%E7%A7%92%E6%80%9D%E8%80%83-%E9%A0%AD%E3%81%8C%E3%82%88%E3%81%8F%E3%81%AA%E3%82%8B%E4%B8%96%E7%95%8C%E4%B8%80%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%83%88%E3%83%AC%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-%E8%B5%A4%E7%BE%BD-%E9%9B%84%E4%BA%8C/dp/447802099Xwww.amazon.co.jp

[1] 人は考えているつもりで考えていない

本書の冒頭で、筆者の赤羽さんは述べている。

一生懸命考えているつもりで、実際は立ち止まっている、という人が意外に多い

これは正におっしゃる通りで、私も一生懸命悩んでいるけどアウトプットが全然出てこないというのも何度も目にしてきました。その方が決して悪気があるとか人間としてダメとか言うつもりはありませんが、本人の意思とは裏腹に結果は出ていませんでした。

[2] ゼロ秒思考とは

ゼロ秒思考とは、考えを言葉にし書き出すまでの時間がゼロ秒であるというのが私の解釈です。赤羽さんは「ゼロ秒」について、第2章で次のように書いています。

ゼロ秒とは、すなわち、瞬時に現状を認識をし、瞬時に課題を整理し、瞬時に解決策を考え、瞬時にどう動くべきか意思決定できることだ。迷っている時間はゼロ、思い悩んでいる時間はゼロとなる。

では、どうすればゼロ秒に近づけるのか。それは、メモを書くことです。頭に浮かぶことをA4用紙に1件1ページで書く。メモを書くことで考える力が鍛えられ、ゼロ秒思考に近づけるという内容です。

[3] メモを1ページ1分以内で書く

メモの書き方には具体的なルールがあります。

  1. A4用紙を横置きにする
  2. 左上にタイトルを書いてした線を引く
  3. 本文は4〜6行(各行20〜30字)
  4. 右上に日付(年月日)を書く
  5. 上記を1分以内に書く

実際にやってみましたが、1分以内というのが大事なポイントだと思いました。1分以内にタイトル・本文・日付を書くのは大変で迷っているヒマはありません。迷う時間がないからこそ思ったことがそのまま書き出せます。

試しに書いてみたものが次の画像です。見やすいように電子化していますが、実際に書くときは手書きです。

f:id:predora005:20210331172001j:plain

私の場合は、手書きのスピードが遅くて1分だと書くのが間に合わなかったです。20〜30字書くと2行でタイムアップでした。書くのが遅くてどうしても1分で書けない人は、淀みなく書き続けてギリギリ間に合う時間まで伸ばすのがよいのかもしれません。

[4] メモを書く際のポイント

  • 書く順番は気にしない
  • メモのフォーマットは必ず守る
  • 思いついたことは、とにかくなんでも書く
  • メモは毎日10ページ書く
  • 1ページ1分で、思いついた瞬間に書く
  • 人には見せない

思ったことを何でも書くというのが重要です。頭の中のもやもやを言葉にしてみる、それが愚痴であれ悪口であれ何であれ構わず書き出す。メモを書くことで頭が整理され、自分が何を気にしていたかに気づいたり、大事なこととそうでないことの区別が付きます。

また、人には見せないことが前提なので、何を書いてもOKです。書いた後に見直して修正する必要もありません。最低限のルールだけ守って後は書くだけです。

[5] ビジネスマン全員に役立つ内容

本書は5章で構成されていますが、第3章からがメモ書きの実践方法です。すぐにメモの書き方が知りたい方は、第1, 2章は読み飛ばしても問題ありません。ですが、第1, 2章に書かれている内容が実はとても良かったです。考えるとはどういうことなのか、ビジネスマンであれば全員に知っていてほしい内容です。読んでみてこんなの当たり前だろう、と思う人以外はぜひ読んでみてください。

終わりに

文章が読みやすく、理解しやすい構成になっていました。行き詰まることなく読めましたし、メモ書きの内容も具体的なところが良かったです。

自分の考えを具体化できない人は意外と多いですし、入社1年目の方など若い方に特に多い気がします。長時間悩んでもなかなか成果が出ない、自分の考えが上手くまとめられない方にオススメの本でした。

*1:Arek SochaによるPixabayからの画像

【AWS】CLIからバージョニングされたS3バケットを削除する方法

S3バケットは空にしてからでないと削除できません。それはバージョニングされたバケットでも同様です。

問題は、バージョニングされたオブジェクトを削除しても、実は消えていないことです。DeleteMarkerが追加されるだけで、オブジェクトが完全に消えるわけではありません。完全に削除するためには、DeleteMarkerとバージョンも削除する必要があります。

マネージメントコンソールであれば削除するのは難しくありません。しかし、AWS CLIから少々面倒なので手順をまとめました。

[1] オブジェクトの削除

[1-1] バケットとファイルの作成

試しにバージョニングされたバケットを作成し、test.txtをアップロードします。

$ aws s3 ls s3://{バケット名}
2021-04-17 13:19:12          4 test.txt

バージョンを確認します。

$ aws s3api list-object-versions --bucket {バケット名}
{
    "Versions": [
        {
            "LastModified": "2021-04-17T13:19:12.000Z", 
            "VersionId": "Goie_timWFWXJTwHv9swGAyjbIrDI6cQ", 
            "ETag": "\"033bd94b1168d7e4f0d644c3c95e35bf\"", 
            "StorageClass": "STANDARD", 
            "Key": "test.txt", 
            "Owner": {
                "DisplayName": "{所有者の表示名}", 
                "ID": "{所有者のID}"
            }, 
            "IsLatest": true, 
            "Size": 4
        }
    ]
}

[1-2] オブジェクトの削除

aws s3 rmでオブジェクトを削除します。

$ aws s3 rm s3://{バケット名}/ --recursive
delete: s3://{バケット名}/test.txt

aws s3 lsで確認すると削除されたように見えます。

$ aws s3 ls s3://{バケット名}

しかし、バケットを削除しようとするとエラーが発生します。

$ aws s3 rb s3://{バケット名} --force
remove_bucket failed: s3://{バケット名} An error occurred (BucketNotEmpty) when calling the DeleteBucket operation: The bucket you tried to delete is not empty. You must delete all versions in the bucket.

[1-3] バージョンの確認

バージョンを確認すると、完全には削除されていないことが分かります。DeleteMarkersが追加されています。

$ aws s3api list-object-versions --bucket {バケット名}
{
    "DeleteMarkers": [
        {
            "Owner": {
                "DisplayName": "{所有者の表示名}", 
                "ID": "{所有者のID}"
            }, 
            "IsLatest": true, 
            "VersionId": "mfYZIOM57MlB_8BkvG7YcNuKWJz0geHS", 
            "Key": "test.txt", 
            "LastModified": "2021-04-17T13:35:10.000Z"
        }
    ], 
    "Versions": [
        {
            "LastModified": "2021-04-17T13:19:12.000Z", 
            "VersionId": "Goie_timWFWXJTwHv9swGAyjbIrDI6cQ", 
            "ETag": "\"033bd94b1168d7e4f0d644c3c95e35bf\"", 
            "StorageClass": "STANDARD", 
            "Key": "test.txt", 
            "Owner": {
                "DisplayName": "{所有者の表示名}", 
                "ID": "{所有者のID}"
            }, 
            "IsLatest": false, 
            "Size": 4
        }
    ]
}

"DeleteMarkers", "Versions"を削除する必要があります。

[2] 完全な削除

以下のシェルスクリプトを作成・実行して削除します。コマンドは下記記事を参考にさせていただきました。

バージョニングが有効なS3バケットをAWS CLIで空にする手順(オブジェクト1000個以下) - のぴぴのメモ

#!/bin/bash

BUCKET_NAME={バケット名}

# バケット内の全オブジェクト削除
aws s3 rm s3://${BUCKET_NAME}/ --recursive

# DeleteMarkersの削除
aws s3api list-object-versions --bucket ${BUCKET_NAME} \
        | jq -r -c '.["DeleteMarkers"][] | [.Key,.VersionId]' \
        | while read line
do
        key=`echo $line | jq -r .[0]`
        versionid=`echo $line | jq -r .[1]`
        aws s3api delete-object --bucket ${BUCKET_NAME} \
               --key ${key} --version-id ${versionid}
done

# Versionsの削除
aws s3api list-object-versions --bucket ${BUCKET_NAME} \
        | jq -r -c '.["Versions"][] | [.Key,.VersionId]' \
        | while read line
do
        key=`echo $line | jq -r .[0]`
        versionid=`echo $line | jq -r .[1]`
        aws s3api delete-object --bucket ${BUCKET_NAME} \
               --key ${key} --version-id ${versionid}
done

実行すると、以下のような結果が返ってきます。

$ sh delete_s3_object.sh 
{
    "VersionId": "mfYZIOM57MlB_8BkvG7YcNuKWJz0geHS", 
    "DeleteMarker": true
}
{
    "VersionId": "Goie_timWFWXJTwHv9swGAyjbIrDI6cQ"
}

バージョンを再度確認すると、今度は削除されています。

$ aws s3api list-object-versions --bucket {バケット名}

バケット削除を実行すると今度は削除に成功します。

$ aws s3 rb s3://{バケット名} --force
remove_bucket: {バケット名}

出典

【政府統計】家賃の金額別分布、居住室の畳数別分布[e-Stat(政府統計): 住宅・土地統計調査]

f:id:predora005:20210327172627j:plain
*1

今回は、政府統計の総合窓口(e-Stat)の「平成30年 住宅・土地統計調査)」より、全国の都道府県の家賃を取得しました。

「住宅・土地統計調査」では家賃の金額のみではなく、家賃の金額別分布や、居住室の畳数ごとの家賃なども載っています。

[1] 家賃の金額別分布

[1-1] 金額別分布の全国平均

「平成30年 住宅・土地統計調査」によれば、住宅用借家の総数は約1,800万戸*2あります。

これらを家賃の金額別で見ると、4〜6万円未満が全体の30%を占めています。また、全体の7割は2〜8万円にかたまっていることが分かります。

f:id:predora005:20210328104109p:plain

一方、東京都の分布を見ると6〜8万円未満が最も多く、全国との違いが見られます。

f:id:predora005:20210328104113p:plain

[1-2] 都道府県別の金額別分布

家賃が全国の中でも高額な東京都、神奈川県、京都府の分布を比較してみます。家賃0円〜6万円未満で見ると、全国は約60%、東京都は約30%、神奈川県は約40%、京都府は約60%となっています。

f:id:predora005:20210328104639p:plain

一方、家賃が低額な青森県、宮崎県、北海道についてです。家賃0円〜6万円未満は、3道県ともに80%前後を占めています。

f:id:predora005:20210328104645p:plain

[1-3] 京都府の分布が全国と似通っている理由

京都の分布が全国と似通っていますが、これは全国平均が押し上げられた結果です。以下のグラフは、全国の借家数のうち各都道府県がどれくらいの割合を占めているのか示したものです。

f:id:predora005:20210328110258p:plain

家賃が高い都道府県は人口が多く、借家数も多い傾向にあります。東京都、大阪府、神奈川県、愛知県だけで全国の40%を占めています。そのため、全国平均が高額家賃の都道府県の方に偏ったと言えます。

[2] 居住室の畳数別家賃

[2-1] 居住室の定義

居住室の定義は、その名の通り居住空間です。なので、トイレや廊下、洗面所や浴室は含みません。

「居住室」とは、居間・茶の間・寝室・書斎・客間・仏間・食事室兼台所などをいいます。

統計局ホームページ/平成30年住宅・土地統計調査 調査の概要

[2-2] 畳数別家賃の全国平均

居住室の畳数別家賃の全国平均は次の通りです。当たり前ですが、広くなるほど家賃が高くなっています。

f:id:predora005:20210328105046p:plain

居住室の定義から考えると、下記が大まかな目安になります。

  • 5.9畳以下 → 狭いワンルーム
  • 6.0~11.9畳 → 1R, 1K, 1DK
  • 12.0~17.9畳 → 1DK, 1LDK, 2DK
  • 18.0~23.9畳 → 1LDK, 2DK, 2LDK
  • 24.0~29.9畳 → 2LDK, 3DK, 3LDK
  • 30.0畳以上 → 上記以上

[2-3] 都道府県別の畳数別家賃

家賃が高額な都道府県と全国平均を比較すると、東京都が群を抜いて高いことが分かります。

f:id:predora005:20210328105158p:plain

家賃が低額な都道府県は、東京都と比べると劇的に低くなっていると感じられます。一人暮らしが6.0〜11.9畳だとすれば、東京都は約6.5万円、青森県は約3.5万円と3万円の差がありました。

f:id:predora005:20210328105055p:plain

終わりに

今回は、人口の多い都道府県の結果に全国平均が押し上げられていました。平均を見る際にはデータの偏りを考慮する必要があると実感できました。

出典

*1:PIRO4DによるPixabayからの画像

*2:正確には18,976,200戸