Terraform を使用して Step Functions にステートマシンをデプロイする - AWS Step Functions

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Terraform を使用して Step Functions にステートマシンをデプロイする

Terraform by HashiCorp は、Infrastructure as Code (IaC) を使用してアプリケーションを構築するためのフレームワークです。Terraform では、ステートマシンを作成したり、インフラストラクチャデプロイのプレビューや再利用可能なテンプレートの作成などの機能を使用したりできます。Terraform テンプレートを使用すると、コードが小さなチャンクに分割されるため、コードを保守して再利用しやすくなります。

Terraform に精通していれば、Terraform でステートマシンを作成してデプロイするためのモデルとして、このトピックで説明する開発ライフサイクルをたどることができます。Terraform に慣れていない場合は、まず「AWS Introduction to Terraform on 」というワークショップを完了して Terraform をよく知っておくことをお勧めします。

ヒント

Terraform を使用して構築されたステートマシンの例を にデプロイするには AWS アカウント、「ワークショップ」の「Infrastructure as Code を使用したステートマシンの管理」モジュールを参照してください。 AWS Step Functions

前提条件

開始するには、以下の前提条件を満たしていることを確認する必要があります。

  • Terraform をマシンにインストールします。Terraform のインストールについて詳しくは、「Terraform をインストールする」を参照してください。

  • マシンに Step Functions Local をインストールします。Step Functions Local を使用するには、Step Functions Local の Docker イメージをインストールすることをお勧めします。詳細については、「Step Functions でステートマシンをローカルでテストする」を参照してください。

  • をインストールします AWS SAM CLI。インストールの詳細については、「 AWS Serverless Application Model デベロッパーガイド」の AWS SAM CLI「 のインストール」を参照してください。

  • をインストール AWS Toolkit for Visual Studio Code して、ステートマシンのワークフロー図を表示します。インストールの情報については、「AWS Toolkit for Visual Studio Code ユーザーガイド」の「AWS Toolkit for Visual Studio Codeのインストール」を参照してください。

Terraform を使用したステートマシンの開発ライフサイクル

以下の手順では、Step Functions コンソールの Workflow Studio を使用してビルドしたステートマシンプロトタイプを、Terraform と AWS Toolkit for Visual Studio Code によるローカル開発の開始点として使用する方法について説明します。

Terraform を使ったステートマシン開発について説明してベストプラクティスの詳細を示す完全な例を見るには、「Best Practices for Writing Step Functions Terraform Projects」を参照してください。

Terraform を使ってステートマシンの開発ライフサイクルを開始するには
  1. 次のコマンドを使用して、新しい Terraform プロジェクトをブートストラップします。

    terraform init
  2. Step Functions コンソールを開き、ステートマシンのプロトタイプを作成します。

  3. Workflow Studio で、以下を実行します。

    1. ワークフロープロトタイプを作成します。

    2. ワークフローの Amazon States Language (ASL) 定義をエクスポートします。これを行うには、インポート/エクスポートドロップダウンリストを選択し、エクスポートJSON定義 を選択します。

  4. エクスポートしたASL定義をプロジェクトディレクトリに保存します。

    エクスポートされたASL定義を入力パラメータとして、 templatefile関数を使用する aws_sfn_state_machine Terraform リソースに渡します。この関数は、エクスポートされた定義と変数の置換を渡すASL定義フィールド内で使用されます。

    ヒント

    ASL 定義ファイルには長いテキストブロックが含まれている可能性があるため、インラインEOFメソッドは避けることをお勧めします。これにより、ステートマシン定義へのパラメータ代入が容易になります。

  5. (オプション) 内のASL定義を更新IDEし、 を使用して変更を視覚化します AWS Toolkit for Visual Studio Code。

    Visual Studio Code でのワークフローASLの定義とその視覚的表現のスクリーンショット。

    定義を継続的にエクスポートしてプロジェクトにリファクタリングしないように、ローカルで更新を行い、Git でこれらの更新IDEを追跡することをお勧めします。

  6. Step Functions Local を使用してワークフローをテストします。

    ヒント

    ローカル を使用して、ステートマシン内の Lambda 関数とAPIゲートウェイとのサービス統合をAWS SAM CLIローカルAPIsでテストすることもできます。

  7. ステートマシンをデプロイする前に、ステートマシンやその他の AWS リソースをプレビューします。これを行うには、以下のコマンドを実行します。

    terraform plan
  8. 以下のコマンドを使用して、ローカル環境または CI/CD パイプラインからステートマシンをデプロイします。

    terraform apply
  9. (オプション) 以下のコマンドを使用して、リソースをクリーンアップし、ステートマシンを削除します。

    terraform destroy

IAM ステートマシンの ロールとポリシー

Terraform サービス統合ポリシーを使用して、Lambda 関数を呼び出すIAMアクセス許可など、必要なアクセス許可をステートマシンに追加します。ロールやポリシーを明示的に定義し、ステートマシンに関連付けることもできます。

次のIAMポリシー例では、 という名前の Lambda 関数を呼び出すためのアクセスをステートマシンに付与しますmyFunction

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-east-1:123456789012:function:myFunction" } ] }

また、Terraform でステートマシンのIAMポリシーを定義するときは、aws_iam_policy_documentデータソースを使用することをお勧めします。これにより、ポリシーの形式に誤りがないかどうかを確認し、リソースを変数に置き換えることができます。

次のIAMポリシー例では、 aws_iam_policy_documentデータソースを使用し、ステートマシンに という名前の Lambda 関数を呼び出すためのアクセス権を付与しますmyFunction

data "aws_iam_policy_document" "state_machine_role_policy" { statement { effect = "Allow" actions = [ "lambda:InvokeFunction" ] resources = ["${aws_lambda_function.[[myFunction]].arn}:*"] } }
ヒント

Terraform でデプロイされたより高度な AWS アーキテクチャパターンを確認するには、「サーバーレスランドワークフローコレクション」の「Terraform の例」を参照してください。