您是否有興趣通過 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 的部署工具