Help us understand the problem. What is going on with this article?

利用AWS Fargate5分鐘部署你的Gin/Flask API Cluster

0. Prerequisite

在前面的文章我們已經介紹過目前在AWS上相關的container服務,而這篇文章想讓大家體驗Fargate的power,也將會帶著各位透過Cloudformation來部署一個API Cluster,以便提供給你的mobile或是web作為資料的來源。

無論你的API語言是透過Golang gin 或是 Python Flask 開發,只要最後透過包裝成docker image後,都可以透過本篇所教學的方法快速的部署API Cluster。

此外,我們將透過CloudFormation的方式來快速部署我們所需要的架構以及Cluster,如果對於CloudFormation還不熟悉的話也沒關係,可以先跟著本篇的範例先做嘗試,稍後我們也會部分裡面的內容。

1. 部署VPC環境

vpc.png

首先我們需要先建立VPC相關的環境,在這個範例中我們將會各自建立兩個public和private的subnet,同時也會建立相關的Gateway來初始化整個VPC對內與對外的網路與後續Cluster所需要的Load Balancer。

請先下載VPC CloudFormation Temaplte,然後再透過你的Command line interface輸入以下指令!

BTW,如果你不熟悉AWS CLI,也可以將template下載下來後,從AWS Web console中匯入

aws cloudformation create-stack --stack-name api-cluster-infra --template-body file://public-private-vpc.yml

畫面中會顯示已經開始部署的StackID, 如果需要知道目前的進度的話,可以輸入

aws cloudformation describe-stacks --stack-name api-cluster-infra --capabilities CAPABILITY_IAM  

等到StackStatus的欄位顯示CREATE_COMPLETE的話,就代表已經部署完成囉:)

2. 部署Fargate Cluster

接著來部署我們的API Cluster了請先下載API Cluster Template,然後再透過你的Command line interface輸入以下指令

aws cloudformation create-stack --stack-name api-cluster-service --template-body file://private-subnet-public-loadbalancer.yml

一樣可以透過下面的command來確認部署的狀態

aws cloudformation describe-stacks --stack-name api-cluster-service  

3. 測試你的API Cluster

部署完成後,我們接著可以來測試我們的API Cluster,先輸入

aws cloudformation describe-stacks --stack-name api-cluster-infra  

接著複製顯示的ExternalUrl欄位中的網址,再輸入

curl <ExternalUrlValue>/ping

就可以看到畫面中顯示的成功訊息,就完成了我們快速的Fargate API Cluster部署!

{"message":"pong"}

4. 了解Deploy的內容

在目前AWS所提供的ECS有兩種不同的部署方式,而本篇所採用的是Fargate來快速部署我們的API Cluster,因此可以看到在配置的RequiresCompatibilities中可以看到目前所選擇的是Fargate。

另外我們可以看到在ContainerDefinitions中,在本次的範例中我們選擇的是kakakakakku/gin-example這個現成的gin hello example來做示範,並且依照這個image的內容配置了ContainerPort以及相關的cpu/mem等資源。

如果你有自己透過Flask的API image需要部署,記得要針對ContainerDefinitions這個部分來做修改,在image的registry上會建議是public的docker image registry或是直接將image push上AWS ECR,在部署上可以減省不少config與加快速度。

  TaskDefinition:
    Type: AWS::ECS::TaskDefinition
    Properties:
      Family: !Ref 'ServiceName'
      Cpu: !Ref 'ContainerCpu'
      Memory: !Ref 'ContainerMemory'
      NetworkMode: awsvpc
      RequiresCompatibilities:
        - FARGATE
      ExecutionRoleArn:
        Fn::ImportValue:
          !Join [':', [!Ref 'StackName', 'ECSTaskExecutionRole']]
      TaskRoleArn:
        Fn::If:
          - 'HasCustomRole'
          - !Ref 'Role'
          - !Ref "AWS::NoValue"
      ContainerDefinitions:
        - Name: !Ref 'ServiceName'
          Cpu: !Ref 'ContainerCpu'
          Memory: !Ref 'ContainerMemory'
          Image: !Ref 'ImageUrl'
          PortMappings:
            - ContainerPort: !Ref 'ContainerPort'

另外,Cluster的部署內容中,DesiredCount目前的配置是2個fargate的task,如果有需要部署更多的resource,除了修改DesiredCount的值之外,也記得要一併修改DeploymentConfiguration.MaximumPercentDeploymentConfiguration.MinimumHealthyPercent的內容。

最後,因為有配置了auto scaling group,所以如果image內容有變動的話,記得也要修改TargetGroup中的HealthCheck相關的config,不過Cluster的task會一直反覆的被Fargate stop掉。

5. Summary

透過CloudFormation我們已經了解到Fargate可以提供的快速部署方式,在每個user自己的實際環境中如果有部署還有一些小地方需要特別注意。

  1. VPC的網路環境
    大部分的使用者AWS環境中大多已經有存在的VPC,如果需要將本篇的範例部署到現有的VPC環境中的話,在修改load balancer與targat group的部分,需要特別注意VPCId與Subnet的配置。

  2. 啟用https
    如果要運用本篇所提供的範例來部署production環境的API Cluster,記得要更進一步透過AWS ACM讓API Cluster的連線方式從http -> https,才能更安全的提供服務。

  3. EndPoint整合
    如果API的container中需要對其他AWS service存取以便獲取資料,ex: DynamoDB,記得要開啟VPC Endpoint以便能夠成功的連線。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした