@@ -43,7 +43,132 @@ docker run --rm --env-file .env.docker split_pdf_go
43
43
2 . AWSの記述に従ってPushしてくれればOK
44
44
45
45
3 . 以下、split_pdf_goという名前のリポジトリを作ったと想定
46
- # 参考リンク
47
- - ECSでワンショットタスクを行う手順:https://tech.classi.jp/entry/one-shot-task-with-step-functions-and-ecs
48
46
47
+ ## ECSによる実行
48
+ ### 1. タスク定義の準備
49
+ JSONで記述すると以下の通り
50
+ ``` json
51
+ {
52
+ "taskDefinitionArn" : " arn:aws:ecs:ap-northeast-1:${AWS_ACCOUNT_ID}:task-definition/${TASK_DEFINITION_NAME}:3" ,
53
+ "containerDefinitions" : [
54
+ {
55
+ "name" : " app" ,
56
+ "image" : " ${AWS_ACCOUNT_ID}.dkr.ecr.ap-northeast-1.amazonaws.com/${IMAGE_NAME}:1730307307" ,
57
+ "cpu" : 0 ,
58
+ "portMappings" : [
59
+ {
60
+ "name" : " app-80-tcp" ,
61
+ "containerPort" : 80 ,
62
+ "hostPort" : 80 ,
63
+ "protocol" : " tcp" ,
64
+ "appProtocol" : " http"
65
+ }
66
+ ],
67
+ "essential" : true ,
68
+ "environment" : [
69
+ {
70
+ "name" : " PROD" ,
71
+ "value" : " true"
72
+ },
73
+ {
74
+ "name" : " START_PAGE" ,
75
+ "value" : " 2"
76
+ },
77
+ {
78
+ "name" : " PDF_PATH" ,
79
+ "value" : " arn:aws:s3:::${BACKET_NAME}/${PDF_NAME}"
80
+ },
81
+ {
82
+ "name" : " END_PAGE" ,
83
+ "value" : " 9"
84
+ },
85
+ {
86
+ "name" : " BACKET_NAME" ,
87
+ "value" : " ${BACKET_NAME}"
88
+ },
89
+ {
90
+ "name" : " FILE_NAME" ,
91
+ "value" : " ${PDF_NAME}"
92
+ }
93
+ ],
94
+ "environmentFiles" : [],
95
+ "mountPoints" : [],
96
+ "volumesFrom" : [],
97
+ "ulimits" : [],
98
+ "systemControls" : []
99
+ }
100
+ ],
101
+ "family" : " split-go-pdf0" ,
102
+ "taskRoleArn" : " arn:aws:iam::${AWS_ACCOUNT_ID}:role/${customRole}" ,
103
+ "executionRoleArn" : " arn:aws:iam::${AWS_ACCOUNT_ID}:role/ecsTaskExecutionRole" ,
104
+ "networkMode" : " awsvpc" ,
105
+ "revision" : 2 ,
106
+ "volumes" : [],
107
+ "status" : " ACTIVE" ,
108
+ "requiresAttributes" : [
109
+ {
110
+ "name" : " com.amazonaws.ecs.capability.ecr-auth"
111
+ },
112
+ {
113
+ "name" : " com.amazonaws.ecs.capability.task-iam-role"
114
+ },
115
+ {
116
+ "name" : " ecs.capability.execution-role-ecr-pull"
117
+ },
118
+ {
119
+ "name" : " com.amazonaws.ecs.capability.docker-remote-api.1.18"
120
+ },
121
+ {
122
+ "name" : " ecs.capability.task-eni"
123
+ }
124
+ ],
125
+ "placementConstraints" : [],
126
+ "compatibilities" : [
127
+ " EC2" ,
128
+ " FARGATE"
129
+ ],
130
+ "requiresCompatibilities" : [
131
+ " FARGATE"
132
+ ],
133
+ "cpu" : " 2048" ,
134
+ "memory" : " 4096" ,
135
+ "runtimePlatform" : {
136
+ "cpuArchitecture" : " X86_64" ,
137
+ "operatingSystemFamily" : " LINUX"
138
+ },
139
+ "registeredAt" : " 2024-10-30T17:14:57.555Z" ,
140
+ "registeredBy" : " arn:aws:iam::${AWS_ACCOUNT_ID}:user/${myName}" ,
141
+ "enableFaultInjection" : false ,
142
+ "tags" : []
143
+ }
144
+ ```
145
+ ちなみに環境変数はStepFunctions実行時に上書きできる。
146
+ 詳細は右の通り:https://qiita.com/piro-gxp/items/5202d6aba1523bcec685
147
+
148
+ ### 2. クラスターの準備
149
+ とりあえず名前だけ用意
150
+
151
+ ### 3. クラスターからタスクを一回実行
152
+ 以下を設定
153
+ - 環境
154
+ - キャパシティプロバイダ戦略
155
+ - あとはデフォルト
156
+ - デプロイ設定
157
+ - アプリケーションタイプ:タスク
158
+ - タスク定義のファミリー:task definition
159
+ - タスク数:1
160
+ - ネットワーキング
161
+ - VPC:S3にアクセスできる
162
+ - サブネット:S3にアクセスできる
163
+ - セキュリティグループ:デフォルトのものを指定(本当はよくないが、全開放で)
164
+ - パブリックIP:オフ
165
+
166
+ あとはそのまま実行
167
+
168
+ ### 4. S3を確認して、アップロードされていることを確認
169
+ 一応OK
170
+
171
+ # 参考リンク
172
+ - StepFunctions x ECSでワンショットタスクを行う手順:https://tech.classi.jp/entry/one-shot-task-with-step-functions-and-ecs
173
+ - 環境変数をオーバーライドする手順:https://qiita.com/piro-gxp/items/5202d6aba1523bcec685
49
174
- もっと複雑な処理:https://qiita.com/a_sh_blue/items/8ccf7502d1512933d226
0 commit comments