初めに・・・
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