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

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

Terraform を使用する、ステートマシンのデプロイ

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

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

ヒント

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

前提条件

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

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

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

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

  • 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. (オプション) IDE 内の ASL 定義を更新し、AWS Toolkit for Visual Studio Code を使用して変更内容を視覚化します。

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

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

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

    ヒント

    AWS SAM CLI Local を使用して、ステートマシンで Lambda 関数および API Gateway API とのサービス統合をローカルでテストすることもできます。

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

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

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

    terraform destroy

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

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

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

{ "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 データソースを使用して、myFunction という Lambda 関数を呼び出すためのアクセス権をステートマシンに付与します。

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

Terraform でデプロイされた、より高度な AWS アーキテクチャパターンを表示するには、「Terraform examples at Serverless Land Workflows Collection」を参照してください。