[ AWS EKS編 ] AWS Fargate & ECR で Golang の Webアプリをデプロイする
はじめに
コンテナ基盤でwebサービスを運用する際には、kubernetesというコンテナオーケストレーションサービスを用いることが多いそうなので、kubernetesの基本的な部分に関して学習をしたのち、
AWS EKSにてwebアプリをデプロイしてみた。
kubernetesについて
kubernetesの基本的な概念について把握をするために、まずはじめに公式のチュートリアルをざっとこなしてみた。
公式チュートリアルを一通りこなした後は、EKSにてデプロイすることに挑戦した。
以前、AWS ECSにてコンテナ基盤でwebアプリをデプロイしたことがあったため、
デプロイするための大まかな流れについてはイメージがしやすかった。
EKSにデプロイ
AWS EKSへのデプロイについては基本的にAWSの公式ドキュメントを参考にして試行錯誤しながら行なった。
事前準備
EKSのリソースを操作するためには、ローカル上で実行する、 kubectl
, eksctl
コマンドをインストールする必要がある。
(参考)AWS公式ドキュメント
EKSクラスターの作成
EKSクラスターを以下のコマンドで作成する。
クラスターの作成は結構時間がかかるので気長に待つ。
eksctl create cluster \
--name go-cluster \
--region us-west-2 \
--with-oidc \
--ssh-access \
--ssh-public-key <your-key> \
--managed
上記のコマンドでクラスターを作成すると、同時にクラスター内にノードが作成されるので、以下のコマンドでノードが作成されたかどうかを確認する。
コマンドをうって、以下のしょうな出力があればノードの作成が無事に完了しているのでOK。
$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
fargate-ip-192-168-141-147.us-west-2.compute.internal Ready <none> 8m3s v1.18.8-eks-7c9bda 192.168.141.147 <none> Amazon Linux 2 4.14.209-160.335.amzn2.x86_64 containerd://1.3.2
fargate-ip-192-168-164-53.us-west-2.compute.internal Ready <none> 7m30s v1.18.8-eks-7c9bda 192.168.164.53 <none> Amazon Linux 2 4.14.209-160.335.amzn2.x86_64 containerd://1.3.2
(参考)AWS公式ドキュメント
namespaceを作成する
namespaceを作成する。
namespaceとはクラスター内をいくつかの領域に区切るために定義するものである。
VPCをサブネットで区切るイメージに近いのかもしれない。
kubectl create namespace go-namespace
serviceとdeploymentを定義する設定ファイル作成
kubernetesではマニュフェストと言われる、設定ファイルを作成する。
ローカル上で go-service.yml
を作成。
ブラウザから閲覧するためには spec
部分に type : LoadBalancer
を追加する必要があるようなので忘れずに追加する。
apiVersion: v1
kind: Service
metadata:
name: go-service
namespace: go-namespace
labels:
app: go-app
spec:
----- 追加 ----------
type: LoadBalancer
--------------------
selector:
app: go-app
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: go-deployment
namespace: go-namespace
labels:
app: go-app
spec:
replicas: 3
selector:
matchLabels:
app: go-app
template:
metadata:
labels:
app: go-app
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: beta.kubernetes.io/arch
operator: In
values:
- amd64
- arm64
containers:
- name: web
image: <自分がデプロイしたいECRにpushされている docker imageのuriを記述する>
ports:
- containerPort: 80
デプロイする
以下のコマンドで、EKSクラスターにデプロイする
kubectl apply -f go-service.yaml
(参考)AWS公式ドキュメント
(参考) DevelopersIO produced by Classmethod
ブラウザで確認
以下コマンドの出力内容の中に EXTERNAL-IP
というものがあるのでこのエンドポイントを取得して、ブラウザでwebアプリが表示されればデプロイ成功です!
$ kubectl get service -n go-namespace
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
go-namespace LoadBalancer 10.100.111.70 a988439dfjsjlfa1dca04c3e5ff60-221349856.us-west-1.elb.amazonaws.com 80:31363/TCP 10s
終わりに
自分で作成したwebアプリを何とか自力でEKSにデプロイすることができました。
今回は最低限の設定を用いてデプロイを行いましたが、細かなパラメータを設定したりして、もっと色んなことができるのだと思います。
今後も継続的にkubernetesについて学習をしてある程度習熟できるようになりたいですね。
Author And Source
この問題について([ AWS EKS編 ] AWS Fargate & ECR で Golang の Webアプリをデプロイする), 我々は、より多くの情報をここで見つけました https://qiita.com/takuyanagai0213/items/6c14979fb76327d3c321著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .