Skip to content

Commit fedb58b

Browse files
committed
【ECS】タスク定義&サービス定義を作成して実行してみる(手動)#9
1 parent 07e956a commit fedb58b

File tree

1 file changed

+127
-2
lines changed

1 file changed

+127
-2
lines changed

README.md

+127-2
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,132 @@ docker run --rm --env-file .env.docker split_pdf_go
4343
2. AWSの記述に従ってPushしてくれればOK
4444

4545
3. 以下、split_pdf_goという名前のリポジトリを作ったと想定
46-
# 参考リンク
47-
- ECSでワンショットタスクを行う手順:https://tech.classi.jp/entry/one-shot-task-with-step-functions-and-ecs
4846

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
49174
- もっと複雑な処理:https://qiita.com/a_sh_blue/items/8ccf7502d1512933d226

0 commit comments

Comments
 (0)