0
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?

CloudFormationのテンプレートを書こう

Last updated at Posted at 2024-12-09

初めに・・・

CloudFormationテンプレート作成に困ったので、以下にサンプルと各項目の説明を記載しました

CloudFormationテンプレートの構成解説

トップレベル構成

AWSTemplateFormatVersion:

CloudFormationテンプレートのバージョンを指定します。
"2010-09-09" は現行バージョンで、テンプレートの構文をAWSが認識します。

AWSTemplateFormatVersion: "2010-09-09"

Description:

テンプレートの目的を説明する任意の文字列です。
ここでは、「template state machine」と簡潔に説明されています。

Description: Sample template for an AWS Step Functions State Machine.

Metadata:

CloudFormationスタックのUIでの表示設定をカスタマイズします。
AWS::CloudFormation::Interface を使用し、入力パラメータをグループ化・ラベル付けして見やすくしています。

  • ParameterGroups:
    parameterをグループ化して、コンソール上で見やすく整理できる

  • ParameterLabels:
    各パラメータの表示名を決定する

Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      - Label:
          default: "Step Functions Configuration"
          Parameters:
            - StateMachineName
            - ExecRoleArn
      - Label:
          default: "Definition Configuration"
          Parameters:
            - ClusterArn
            - TaskDefinitionArn
    ParameterLabels:
      StateMachineName:
        default: State Machine Name
      ExecRoleArn:
        default: StateMachine Execution Role ARN
      ClusterArn:
        default: ECS Cluster ARN
      TaskDefinitionArn:
        default: ECS Task Definition ARN

Parameterセクション

ステートマシンの動作に必要な値を外部から設定する

parameterlabelsで定義したパラメータ名を元に解説

  • StateMachineName:
      ⇒ステートマシンの名前を指定
  • ExecRoleArn:
      ⇒リソースにアクセスするためのIAMロールのARN
  • ClusterArn:
      ⇒クラスターのARN
  • TaskDefinitionArn:
       ⇒タスク定義のARN
Parameters:
  StateMachineName:
    Type: String
    Default: SampleStateMachine
    Description: The name of the Step Functions state machine.
  ExecRoleArn:
    Type: String
    Default: arn:aws:iam::123456789012:role/sample-role-step-functions
    Description: The ARN of the IAM role for Step Functions execution.
  ClusterArn:
    Type: String
    Default: arn:aws:ecs:region:123456789012:cluster/sample-ecs-cluster
    Description: The ARN of the ECS cluster.
  TaskDefinitionArn:
    Type: String
    Default: arn:aws:ecs:region:123456789012:task-definition/sample-task:latest
    Description: The ARN of the ECS task definition.

Resourcesセクション

Resourcesセクションでは実際にIaC化したいすべてのリソース定義を記載する必要があります。

以下はステートマシン(Stepfunction)を例にとっています。

  • StateMachineName:

ステートマシンの名前を指定(例: パラメータから参照)。

  • DefinitionString:

ステートマシンのワークフロー定義(JSON形式)。

サンプルテンプレートファイル

以上の解説を踏まえたサンプルテンプレートファイルが以下になります

AWSTemplateFormatVersion: "2010-09-09"
Description: Sample template for an AWS Step Functions State Machine.
Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      - Label:
          default: "Step Functions Configuration"
          Parameters:
            - StateMachineName
            - ExecRoleArn
      - Label:
          default: "Definition Configuration"
          Parameters:
            - ClusterArn
            - TaskDefinitionArn
    ParameterLabels:
      StateMachineName:
        default: State Machine Name
      ExecRoleArn:
        default: StateMachine Execution Role ARN
      ClusterArn:
        default: ECS Cluster ARN
      TaskDefinitionArn:
        default: ECS Task Definition ARN
Parameters:
  StateMachineName:
    Type: String
    Default: SampleStateMachine
    Description: The name of the Step Functions state machine.
  ExecRoleArn:
    Type: String
    Default: arn:aws:iam::123456789012:role/sample-role-step-functions
    Description: The ARN of the IAM role for Step Functions execution.
  ClusterArn:
    Type: String
    Default: arn:aws:ecs:region:123456789012:cluster/sample-ecs-cluster
    Description: The ARN of the ECS cluster.
  TaskDefinitionArn:
    Type: String
    Default: arn:aws:ecs:region:123456789012:task-definition/sample-task:latest
    Description: The ARN of the ECS task definition.
Resources:
  SampleStateMachine:
    Type: "AWS::StepFunctions::StateMachine"
    Properties:
      StateMachineName: !Ref StateMachineName
      DefinitionString:
        !Sub |
          {
            "Comment": "Sample Step Functions State Machine",
            "StartAt": "RunEcsTask",
            "States": {
              "RunEcsTask": {
                "Type": "Task",
                "Resource": "arn:aws:states:::ecs:runTask.sync",
                "Parameters": {
                  "LaunchType": "FARGATE",
                  "Cluster": "${ClusterArn}",
                  "TaskDefinition": "${TaskDefinitionArn}",
                  "NetworkConfiguration": {
                    "AwsvpcConfiguration": {
                      "AssignPublicIp": "DISABLED",
                      "SecurityGroups": [
                        "sg-0123456789abcdef0"
                      ],
                      "Subnets": [
                        "subnet-0123456789abcdef0"
                      ]
                    }
                  }
                },
                "Catch": [
                  {
                    "ErrorEquals": [
                      "States.ALL"
                    ],
                    "Next": "HandleTaskFailure"
                  }
                ],
                "Next": "TaskSuccess"
              },
              "HandleTaskFailure": {
                "Type": "Task",
                "Resource": "arn:aws:lambda:region:123456789012:function:sample-failure-handler",
                "Retry": [
                  {
                    "ErrorEquals": [
                      "States.TaskFailed"
                    ],
                    "IntervalSeconds": 2,
                    "MaxAttempts": 1,
                    "BackoffRate": 2
                  }
                ],
                "Next": "FailState"
              },
              "TaskSuccess": {
                "Type": "Succeed"
              },
              "FailState": {
                "Type": "Fail",
                "Error": "TaskFailed",
                "Cause": "ECS task execution failed."
              }
            }
          }
      RoleArn: !Ref ExecRoleArn


0
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
0
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?