برنامه خود را از طریق 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 است