背景
GolangのSDKからFargate起動タイプのECSタスクを起動したかったが、意外と情報が無かったのでまとめます。
検証環境
- goバージョン
- go version go1.14.2 darwin/amd64
- OS
- macOS Catalina バージョン 10.15.1
コード
package main
import (
"fmt"
"github.com/aws/aws-sdk-go/service/ecs"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/aws/session"
)
func main() {
svc := ecs.New(session.New(aws.NewConfig().WithRegion("ap-northeast-1")))
input := &ecs.RunTaskInput{
Cluster: aws.String("ClusterName"), // クラスター名
TaskDefinition: aws.String("TaskDefinitionName"), // バージョン指定しない場合はLATESTが選択される
}
input.NetworkConfiguration = &ecs.NetworkConfiguration{
AwsvpcConfiguration: &ecs.AwsVpcConfiguration{
Subnets: aws.StringSlice([]string{"subnetId"}), // サブネットID
AssignPublicIp: aws.String("DISABLED"), // 必要に応じて
},
}
input.LaunchType = aws.String("FARGATE")
result, err := svc.RunTask(input)
if err != nil {
if aerr, ok := err.(awserr.Error); ok {
fmt.Println(aerr.Error())
}
fmt.Println(err.Error())
return
}
fmt.Println(result)
}
- 下記項目は各自の環境に読み替えてください
- Cluster
- TaskDefinition
- Subnets
- AssignPublicIp
ポイント
input.NetworkConfiguration = &ecs.NetworkConfiguration{
AwsvpcConfiguration: &ecs.AwsVpcConfiguration{
Subnets: aws.StringSlice([]string{"subnetId"}), // サブネットID
AssignPublicIp: aws.String("DISABLED"), // 必要に応じて
},
}
input.LaunchType = aws.String("FARGATE") // Fargateで起動する為に必須
Fargateはawsvpcで動くのでネットワーク構成の指定が必要なようです。
他にパラメータを足したい時は&ecs
にRequest Syntaxのキー名を参考に必要なtypeを足すといいようです。
参考記事
example_ECS_RunTask_shared00
Types(直リンクに出来なかったのでTypesの項目を参照ください)
Request Syntax