برنامه نویسی

برنامه خود را از طریق CI/CD با Ecspresso در ECS قرار دهید

آیا شما علاقه مند هستید که برنامه خود را از طریق CI/CD در ECS مستقر کنید؟
اگر چنین است، اسپرسو ابزاری برای شماست!

اسپرسو چیست؟

ecspresso ابزاری است که به استقرار برنامه شما در ECS کمک می کند.
و به راحتی آن را به راحتی در CI/CD خود ادغام کنید.

اسپرسو

انگیزه

چرا باید از اکسپرسو برای استقرار برنامه خود در ECS به جای ابزار استقرار دیگری استفاده کنید؟
زیرا اکسپرسو می تواند منبع 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=OPTION

Commands:

  - 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

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

چگونه اسپرسو را در CI/CD ادغام کنیم؟

مرحله به مرحله براتون توضیح میدم!

توجه داشته باشید:
شما باید اعتبار aws خود را تنظیم کنید (~/.aws/credentials)
فرض کنید ECS شما قبلاً روی AWS اجرا می شود

نصب

// brew
brew install kayac/tap/ecspresso

or

// asdf
asdf plugin add ecspresso
asdf install ecspresso 2.0.0
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای تولید فایل 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، شناسه گروه امنیتی و غیره…
با این حال، قابلیت نگهداری و خوانایی را کاهش می دهد. ecspresso اجازه می دهد تا به خواندن tfstate برای حل این مشکل!

می توانید مسیر فایل خود را در ecspresso.yml روی tfstate تنظیم کنید و سپس بتوانید آن را در فایل json. بخوانید.
تنظیم func_prefix را ترجیح می دهد.

ecspresso.yml

region: ap-northeast-1
cluster: your-cluster-name
service: your-service-name
service_definition: ecs-service-def.json
task_definition: ecs-task-def.json
timeout: "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 ادغام کنید

با تشکر از شما برای خواندن مقاله من، کد نویسی مبارک!

ارجاع:

kayac/ecspresso: ecspresso یک ابزار استقرار برای Amazon ECS است

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا