天天看點

使用 Ecspresso 通過 CI/CD 将您的應用程式部署到 ECS

作者:科技狠活與軟體技術

您是否有興趣通過 CI/CD 将您的應用程式部署到 ECS?

如果是這樣,ecspresso 就是适合您的工具!

使用 Ecspresso 通過 CI/CD 将您的應用程式部署到 ECS
什麼是ecspresso ?

ecspresso 是一個幫助您将應用程式部署到 ECS 的工具,

并且可以輕松地将其輕松內建到您的 CI/CD 中。

濃縮咖啡

動機

為什麼您應該考慮使用 ecspresso 将應用程式部署到 ECS 而不是其他部署工具?

因為 ecspresso 可以将你的 ECS 資源作為代碼來管理。為什麼這有用?

想象一下,您的團隊經常部署您的應用程式,并且有時會更改與應用程式相關的 ECS 配置,例如記憶體或 CPU 等。如果您可以将 ECS 資源作為代碼來管理,則可以輕松地在每次部署中更改配置。

隻需保留,此工具适用于使用 Terraform 或 CloudFormation 等工具管理基礎設施資源的人。

用法

Usage: ecspresso <command>

Flags:

-h, --help Show context-sensitive help.

--envfile=ENVFILE,... environment files

--debug enable debug log

--ext-str=KEY=VALUE;

... external string values for Jsonnet

--ext-code=KEY=VALUE;... external code values for Jsonnet

--config="ecspresso.yml" config file

--assume-role-arn="" the ARN of the role to assume

--option=OPTIONCommands:

- deploy - deploy service - diff - show diff between task definition, service definition with current running service and task definition

- exec - execute command on task - init

--service=SERVICE - create configuration files from existing ECS service - register - register task definition - rollback - rollback service - run - run task - wait - wait until service stable

如何将 ecspresso 內建到 CI/CD 中?

我會一步一步為你解釋!

注意:

您需要設定您的 aws 憑證(~/.aws/credentials)

假設您的 ECS 已經在 AWS 上運作

安裝

// brewbrew install kayac/tap/ecspressoor// asdfasdf plugin add ecspressoasdf install ecspresso 2.0.0

init生成yml檔案

将您目前的 ECS 服務設定導入 yml 檔案。

ecspresso init --region ap-northeast-1 --cluster your-cluster-name --service your-service-name --config ecspresso.yml

運作上面的指令後,你可以看到下面生成的檔案。

- ecspresso.yml- ecs-service-def.json- ecs-task-def.json.

導入你的 tfstate

可以寫入一些外部資源資訊,比如VPC、安全組Id等。

但是會降低可維護性和可讀性。ecspresso 允許讀取 tfstate 來解決這個問題!

您可以在 ecspresso.yml 中将檔案路徑設定為 tfstate,然後能夠在 .json 檔案中讀取它。

更喜歡設定 func_prefix。

ecspresso.yml

region: ap-northeast-1cluster: your-cluster-nameservice: your-service-nameservice_definition: ecs-service-def.jsontask_definition: ecs-task-def.jsontimeout: "10m0s"plugins: - name: tfstate config: url: s3://path-to-terraform.tfstate func_prefix: sg - name: tfstate config: url: s3://path-to-terraform.tfstate func_prefix: network

ecs-service-def.json

"networkConfiguration": { "awsvpcConfiguration": { "assignPublicIp": "DISABLED", "securityGroups": [ "{{ sg_tfstate `aws_security_group.service.id` }}" ], "subnets": [ "{{ network_tfstate `aws_subnet.private['private'].id` }}", ] } },

設定 ci/cd

這很簡單,但重要的是,大多數情況下,想要為 ECS 任務設定最新的圖像,是以

需要動态設定最新的圖像。

看export IMAGE_TAG=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG

我定義的IMAGE_TAG。這将是關鍵。

在 ecs-task-def.json 中你可以使用 must_env 和 IMAGE_TAG 将動态加載!

ecs-task-def.json

"image": "{{ must_env `IMAGE_TAG` }}",

GitHubActions

deploy: runs-on: ubuntu-latest timeout-minutes: 10 steps: - name: checkout uses: actions/checkout@v3 - name: configure aws credentials uses: aws-actions/configure-aws-credentials@v1-node16 with: role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/role aws-region: ap-northeast-1 - name: login to ecr id: login-ecr uses: aws-actions/amazon-ecr-login@v1 - uses: actions/checkout@v3 - uses: kayac/ecspresso@v2 with: version: v2.0.0 # or latest # version-file: .ecspresso-version - name: deploy env: ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} ECR_REPOSITORY: dev IMAGE_TAG: api-${{ github.sha }} run: | export IMAGE_TAG=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG ecspresso deploy --config ecspresso/ecspresso.yal

結論

ecspresso 有助于管理應用程式并将其部署到 ECS。

您可以将您的 ECS 資源作為代碼進行管理,并且可以輕松地将您的部署流程內建到 CI/CD 中

感謝您閱讀我的文章,Happy Coding!

參考:

kayac/ecspresso:ecspresso 是 Amazon ECS 的部署工具

繼續閱讀