2021年5月9日日曜日

AWS Step FunctionsのforループでLambdaPythonを実行したい

Mapを使った方が簡単だとその後分かりました。こちら↓

===

StepFunctionsで、Lambdaをforループ的に使います。 

ループ用と、ループの中で2つLambdaを作ります。
 こちらの公式ドキュメントの例に追加していく形です。


 state machineの定義JSONとダイアグラム

{
  "Comment": "Iterator State Machine Example",
  "StartAt": "ConfigureCount",
  "States": {
    "ConfigureCount": {
      "Type": "Pass",
      "Result": {
        "count": 3,
        "index": -1,
        "step": 1
      },
      "ResultPath": "$.iterator",
      "Next": "Iterator"
    },
    "Iterator": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:region:account:function:Iterator",
      "ResultPath": "$.iterator",
      "Next": "IsCountReached"
    },
    "IsCountReached": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.iterator.continue",
          "BooleanEquals": true,
          "Next": "ExampleWork"
        }
      ],
      "Default": "Done"
    },
    "ExampleWork": {
      "Comment": "Your application logic, to run a specific number of times",
      "Type": "Task",
      "Resource": "arn:aws:lambda:region:account:function:IteratorPython",
      "ResultPath": "$.iterator",
      "Next": "Iterator"
    },
    "Done": {
      "Type": "Pass",
      "End": true
    }
  }
}

ここからは、state machine    の各項目の説明です。

ConfigureCount

初期値の設定。 forループの範囲、ステップを決めます。 

 "count": 3, "index": -1, "step": 1 と変更しています。これはPythonでの for index in range(3): と同じループになります。 -1からスタートしているのは、判定前に+1するためです。 

Iterator 

ループ用のNode.js Lambdaを作っておきます(ドキュメント通り。関数名Iterator)。 

IsCountReached

Iteratorが渡す値$.iterator.continueが、trueならExampleWorkに進みます。 (ドキュメント通り)

ExampleWork 

forループで毎回実行するLambdaをここで指定します。boto3 Pythonで書いています。 関数名はIteratorPythonとしています。

例えばevent['iterator']['index']とすると、Iteratorから来たindex値を受け取ることができます。

ややこしいのですが、Lambda Pythonにおけるevent['iterator'] というのは、渡されたeventそのものです。Nodejsではiteratorという変数があるのですが、Pythonでは不要。

Lambda関数IteratorPythonの中身
import json

def lambda_handler(event, context):

    index = event['iterator']['index']
    step = event['iterator']['step']
    count = event['iterator']['count']
    
    # write your code

    response = {
        "index": index,
        "step": step,
        "count": count,
    }
    return response

IAMの設定

StepFunctionsを更新したとき(Lambda追加とか)、自動で作成すると便利です。

このようなIAM policyが追加されます。

        {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:region:account:function:IteratorPython",
                "arn:aws:lambda:region:account:function:Iterator"
             ]
        }

2021年5月5日水曜日

指定したタグをもつEC2インスタンスのIDを返すPythonスクリプト

指定したタグをもつEC2インスタンスのIDを返すPythonスクリプトです。boto3でdescribe するときにフィルターのパラメータ設定をしています。タグが複数になっても対応できるようにしています。

2021年5月3日月曜日

ミステルキーボードMD770の感想

Mistel BAROCCO MD770 RGB メカニカルキーボード 英語配列 85キー 左右分離型 CHERRY MX RGB 静音赤軸 ブラック MD770-PUSPDBBT1 


買いました。

前に使っていたものは、リアルフォースの静音30gモデルR2TLSA-JP3-BKです。

どちらもほぼ初期状態で使っていますので、カスタマイズすると変えられるのかもしれません。

感想

  • 左右に離れているのは最高です。肩甲骨が引っ張られる感じがなく、楽です。
  • 離れているのを繋ぐための付属のびょんびょんしたtype-cケーブルが邪魔。40センチくらい開くと引っ張られてしまう。小さいケーブルを買おうかと。
  • 英字配列は初めてですが、慣れればメリットの方が大きいのではないでしょうか
    • エンターが近くて押しやすい
    • :と;がシフトで切替。他も似たようなものがシフト切替なので分かりやすいかも
    • Capslockを半角全角切替に設定
  • ESC、ファンクションキーが近い。1の直上にF1、、という配置なのが良い
  • PrintScreenはFn+Pで押せるが、長押しができない?のでUbuntu再起動で困りそう
  • 静音性は正直微妙です。リアルフォースの断然静音性が良かったので、ちょっと期待はずれ。5000円くらい値段違うので仕方ないかなと。かなりバネが戻る音がします。Youtubeに打鍵している動画を上げている方がいて、その音そのままな感じです。(カスタマイズすれば変わるかも)
  • bluetoothモデルにすればよかったかも。