1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

StepFunctionsで、サービスAPIに渡すパラメーターの、フィールド名の記述方法

Posted at

はじめに

StepFunctionsを使っていて、パラメーターを指定する際、フィールド名にAPIリファレンスの文字列を使うように指示されます。しかしそれでは動かない場合もあるため、個人的に分かりづらい点を備忘録的にまとめました。

概要

  • .Nの場合は複数形にする
  • ネストしている構造でも、同様に指定
  • 指定したパラメーターがエラーになる場合、CLIやSDKのリファレンスのフィールド名を試す

指定の仕方

パラメーターが配列".N"の場合

公式の解説にあるように、APIリファレンスのパラメーター名を複数形にします。

例として、DescribeSnapshotsSnapshotId.Nを指定してみます。

image.png

パラメーターには、フィールド名をSnapshotIdsとして指定します。

    "DescribeSnapshots": {
      "Type": "Task",
      "Parameters": {
        "SnapshotIds": [
          "snap-xxxxxxxxxx",
          "snap-yyyyyyyyyy"
        ]
      },
      "Resource": "arn:aws:states:::aws-sdk:ec2:describeSnapshots",
      "End": true
    }

配列の中がすべて固定であれば、['hoge','moge']で指定します。
$マークを使ってパスを指定する場合は、States.Array($.hoge,$.moge)で指定します。

パラメーターがネストしている場合

パラメーターがネストしている場合でも、落ち着いて作っていきます。

ここでは、ModifyNetworkInterfaceAttributeAttachmentを指定して、(EC2の)終了時にENI削除のON/OFFの設定を変更します。

image.png

Attachmentに指定する内容は、以下を使います。

    "ModifyNetworkInterfaceAttribute": {
      "Type": "Task",
      "End": true,
      "Parameters": {
        "NetworkInterfaceId": "eni-xxxxxxxxxx",
        "Attachment": {
          "AttachmentId": "eni-attach-yyyyyyyyyyyy",
          "DeleteOnTermination": "true/false"
        }
      },
      "Resource": "arn:aws:states:::aws-sdk:ec2:modifyNetworkInterfaceAttribute"
    }

フィールド名がない、とエラーになる場合

APIリファレンスにあるパラメーターを指定しても、The field hogehoge is not supported by Step Functions.とエラーになってしまう場合があります。

例として、CreateNetworkInterfaceSecurityGroupId.Nを指定してみます。ENIの作成の際にSecurityGroupを指定するパラメーターです。

image.png

最初の例のように、複数形にしてSecurityGroupIdsを指定しようとします。

    "CreateNetworkInterface": {
      "Type": "Task",
      "End": true,
      "Parameters": {
        "SubnetId": "subnet-xxxxxxxxxx",
        "SecurityGroupIds": [
          "sg-yyyyyyyyyy"
        ]
      },
      "Resource": "arn:aws:states:::aws-sdk:ec2:createNetworkInterface"
    }

エラーになってしまいます。
image.png

正しいパラメーター名は、CLIリファレンスにあるGroups(キャメルケースで表記する模様)になります。

    "CreateNetworkInterface": {
      "Type": "Task",
      "End": true,
      "Parameters": {
        "SubnetId": "subnet-xxxxxxxxxx",
        "Groups": [
          "sg-yyyyyyyyyy"
        ]
      },
      "Resource": "arn:aws:states:::aws-sdk:ec2:createNetworkInterface"
    }

そのため、APIリファレンスでうまくいかない場合は、CLIやSDKのリファレンスのフィールド名を試してみてください。

おわりに

フィールド名でわかりづらい点をまとめてみました。これがわかっておけば、StepFunctionsは色々な場面で使っていけるかと思います。
この記事がどなたかのお役に立てれば幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?