Closed16

Hasura on ECS(公式の「Quickstart with AWS ECS」の記事)で詰まったところのメモ

mongolyymongolyy

aws ecs create-cluster --cluster-name hasura-fargate-cluster は普通にできた
aws cliで手順が書いてあるのは、やり方がぶれないのでありがたい

せっかくであれば、security-groupとかsubnetとかもcliで作る手順を書いてくれるとありがたかったが、まあ個人の環境や起動したい構成にも依存するところもあるので仕方ないと言えば仕方ないか

mongolyymongolyy

wget https://raw.githubusercontent.com/hasura/graphql-engine/stable/install-manifests/enterprise/aws-ecs/hasura-fargate-task.json
windowsだったので、だめだった。

git bashでもwgetコマンドが入っておらず、
https://gnuwin32.sourceforge.net/packages/wget.htm
を入れて、wgetが実行できる環境を整えた

mongolyymongolyy

hasura-fargate-task.json の変更のために、RDSとElastiCacheの環境を作った
RDSのデータベース名が分からなくなったので、CLIから次の手順に従って確かめた

https://t.co/GiqBKFzvJs

mongolyymongolyy

Step5
aws ecs register-task-definition --cli-input-json file://hasura-fargate-task.json
も普通にできた

mongolyymongolyy

Step6

>aws ecs list-task-definitions
{
    "taskDefinitionArns": [
        "arn:aws:ecs:ap-northeast-1:776890984871:task-definition/hasura:1"
    ]
}

タスク定義が普通にあった

mongolyymongolyy

そのあとの手順でログが出ない感じがしたので、hasura-fargate-task.jsonに次の記載を追加

{
    ...
    "containerDefinitions": [
        {
            ...
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-create-group": "true",
                    "awslogs-group": "ecs/hasura",
                    "awslogs-region": "ap-northeast-1",
                    "awslogs-stream-prefix": "hasura"
                }
            },
            ...
        }
    ],
    "executionRoleArn": "arn:aws:iam::<AWS AccountID>:role/ecsTaskExecutionRole",
    ...
}

<AWS AccountID> は自分のAWSアカウントID

mongolyymongolyy

今回publicサブネットに置いたので

aws ecs create-service \
--cluster hasura-fargate-cluster \
--service-name hasura-fargate-service \
--task-definition hasura:1 \
--desired-count 1 \
--launch-type "FARGATE" \
--network-configuration "awsvpcConfiguration={subnets=[subnet-abcd1234],securityGroups=[sg-abcd1234],assignPublicIp=ENABLED}"

を実行
(subnetsとsecurityGroupsの部分は自分の環境の値に変更

mongolyymongolyy

サービス、タスクは起動していた
タスクのパブリックIPにアクセスしてみると

何も出ない。
:8080 をつけてみたが、同様の状態

mongolyymongolyy

タスクのログでは、/healthz へのリクエストが受けつられているようだったので、コンテナ自体は立ち上がっていそう

mongolyymongolyy

ALBとかを立ててみたが、状況は変わらず
VPC Reachability Analyzerを使ってみる

mongolyymongolyy

eniのsecurity groupがよくなさそう
eniにsecurity groupを設定した覚えとかはないが、、

mongolyymongolyy

taskかserviceのsecurity groupを変更すれば良さそう

今まで設定していたsecurity groupががばがば過ぎて、エラーが発生しているようだったので、新しくsecurity groupを作ってみた
新しく作ったうえで、新しくserviceを作った

aws ecs create-service \
--cluster hasura-fargate-cluster \
--service-name hasura-fargate-service \
--task-definition hasura:1 \
--desired-count 1 \
--launch-type "FARGATE" \
--network-configuration "awsvpcConfiguration={subnets=[subnet-abcd1234],securityGroups=[sg-new-abcd1234],assignPublicIp=ENABLED}"

igwからのリクエストが疎通するようになった模様!!

mongolyymongolyy

今度はタスクが起動失敗するようになった。。
ログを確認してみると、、

mongolyymongolyy

postgresが接続できない?
これまでこのようなことはなかったので、怪しいのは新しく作ったsecurity group、、、

postgresのsecurity groupを見ると、同一のsecurity groupからのリクエストしか受け付けないようになっていた
新しく作ったsecurity groupからのリクエストを受け付けるように変更してみる

mongolyymongolyy

タスクは起動した!
そして、Hasuraにもアクセスできるようになったでい!


このスクラップは2023/04/09にクローズされました