Aws-cli: AWS ECS - كيفية تحديث تعريف المهمة

تم إنشاؤها على ٢٩ ديسمبر ٢٠١٧  ·  18تعليقات  ·  مصدر: aws/aws-cli

هل هناك طريقة لإضافة مراجعة جديدة إلى تعريف مهمة ECS؟

في حالتي ، أريد تحديث عنوان URL للحاوية في خط أنابيب القرص المضغوط الخاص بي باستخدام سطر الأوامر. إما أن الوثائق مفقودة كيفية القيام بذلك أم أنه ممكن فقط باستخدام وحدة التحكم الإدارية؟

راجع https://github.com/aws/amazon-ecs-cli/issues/91 (لكنني لا أستخدم تكوين عامل الإرساء)

guidance

التعليق الأكثر فائدة

شكرًا @ m-radzikowski لقد قمت بتعديل الحل الخاص بك قليلاً لذا فهو يعمل أيضًا عند استخدام تجزئة git كعلامة صورة بدلاً من "الأحدث". يحتاج إلى بعض المتغيرات البيئية للعمل بالرغم من ذلك
""

! / بن / باش

برنامج نصي للحصول على تعريف المهمة الحالي ، وبناءً على ذلك ، قم بإضافة عنوان صورة ecr جديد إلى القالب القديم وإزالة السمات غير المطلوبة ، ثم نرسل تعريف مهمة جديدًا ، ونحصل على رقم مراجعة جديد من خدمة الإخراج والتحديث

مجموعة ه
ECR_IMAGE = "$ {AWS_ACCOUNT_ID} .dkr.ecr. $ {AWS_DEFAULT_REGION} .amazonaws.com / $ {IMAGE_REPO_NAME}: $ {CODEBUILD_RESOLVED_SOURCE_VERSION}"
TASK_DEFINITION = $ (aws ecs وصف المهمة - تعريف المهمة - "$ TASK_FAMILY" - المنطقة "$ AWS_DEFAULT_REGION")
NEW_TASK_DEFINTIION = $ (echo $ TASK_DEFINITION | jq --arg IMAGE "$ ECR_IMAGE" '.taskDefinition | .containerDefinitions [0] .image = $ IMAGE | del (.taskDefinitionArn) | del (.revision) | del (.status) | del (.requiresAttributes) | del (. compatibility) ')
NEW_TASK_INFO = $ (aws ecs - تعريف المهمة - المنطقة "$ AWS_DEFAULT_REGION" --cli-input-json "$ NEW_TASK_DEFINTIION")
NEW_REVISION = $ (صدى $ NEW_TASK_INFO | jq '.taskDefinition.revision')
aws ecs update-service --cluster $ {ECS_CLUSTER} - الخدمة $ {SERVICE_NAME} - تعريف المهمة $ {TASK_FAMILY}: $ {NEW_REVISION} ``

ال 18 كومينتر

هم، لست متأكدا. بشكل عام ، سيكون أفضل مكان للأسئلة المتعلقة بالاستخدام هو تجاوز سعة المكدس ، كما هو مذكور في برنامج README الخاص بنا.

وبالنظر إلى المستندات ، يبدو أن مجرد استخدام register-task-definition سيؤدي إلى إنشاء مراجعة جديدة. من https://docs.aws.amazon.com/cli/latest/reference/ecs/register-task-definition.html#output :

          revision -> (integer)
              The revision of the task in a particular family. The revision is
              a version number of a task definition in a family. When you reg-
              ister  a task definition for the first time, the revision is 1 ;
              each time you register a new revision of a  task  definition  in
              the  same  family,  the  revision  value always increases by one
              (even if you have deregistered previous revisions in  this  fam-
              ily).

أود أن أعطي ذلك فرصة أولا.

شكرا آسف على الضوضاء. كنت أتوقع أن يكون أمرًا منفصلاً يتوافق مع أوامر أخرى مثل update-service

مرحبا Extrawurst لدي نفس المشكلة. كنت أتساءل إذا وجدت حلا.

مرحبا menocomp انظر jamesls الإجابة. فقط استخدم register-task-definition وسيتم إنشاء نسخة جديدة إذا كانت العائلة موجودة بالفعل

register-task-definition ليس طريقة مرضية لإنجاز مجرد نتوء في رقم المراجعة.

يتطلب register-task-definition معلمات تعريف المهمة أو JSON كإدخال. الحصول على ذلك من describe-task-definition يضيف طبقة قاموس إضافية _و_ الحقول غير الصالحة للاستخدام مع register-task-definition .

بعد تسوية قاموس المستوى الأعلى:

$ aws ecs register-task-definition --family name --cli-input-json file:///tmp/task-definition.json

Parameter validation failed:
Unknown parameter in input: "taskDefinitionArn", must be one of: family, taskRoleArn, executionRoleArn, networkMode, containerDefinitions, volumes, placementConstraints, requiresCompatibilities, cpu, memory, tags, pidMode, ipcMode, proxyConfiguration
Unknown parameter in input: "revision", must be one of: family, taskRoleArn, executionRoleArn, networkMode, containerDefinitions, volumes, placementConstraints, requiresCompatibilities, cpu, memory, tags, pidMode, ipcMode, proxyConfiguration
Unknown parameter in input: "status", must be one of: family, taskRoleArn, executionRoleArn, networkMode, containerDefinitions, volumes, placementConstraints, requiresCompatibilities, cpu, memory, tags, pidMode, ipcMode, proxyConfiguration
Unknown parameter in input: "requiresAttributes", must be one of: family, taskRoleArn, executionRoleArn, networkMode, containerDefinitions, volumes, placementConstraints, requiresCompatibilities, cpu, memory, tags, pidMode, ipcMode, proxyConfiguration
Unknown parameter in input: "compatibilities", must be one of: family, taskRoleArn, executionRoleArn, networkMode, containerDefinitions, volumes, placementConstraints, requiresCompatibilities, cpu, memory, tags, pidMode, ipcMode, proxyConfiguration

أعتقد أنه يجب إعادة فتح هذا كطلب ميزة. حاليًا ، CLI لتحديث مهام ECS ، المطلوب لـ CI / CD ، ليس مباشرًا ويتطلب حيلًا إضافية.

التدفق الأكثر شيوعًا على الويب هو استدعاء describe-task-definition ، والحصول على تعريف الحاوية منه ، وتغيير معلمة image ودفعها مرة أخرى باستخدام register-task-definition --family $FAMILY --container-definitions $UPDATED_DEFINITION .

باستخدام Fargate ، واجهت مشكلة في هذا التدفق - لا يمكن تحديث المهمة باستخدام نفس JSON ، فقد تطلبت معلمات إضافية ، وكان علي أن أضع جميع قيم المستوى الأعلى من describe-task JSON كـ register-task-definition معلمات

لذا كان الحل الأفضل بالنسبة لي هو استخدام JSON كمدخل كامل للمهمة ، لكن لها مشاكلها الخاصة التي ذكرهاshatil. أخيرًا انتهيت بنص مثل هذا:

TASK_DEFINITION=$(aws ecs describe-task-definition --task-definition "$TASK_FAMILY" --region "us-east-1")
NEW_TASK_DEFINTIION=$(echo $TASK_DEFINITION | jq --arg IMAGE "$NEW_IMAGE" '.taskDefinition | .containerDefinitions[0].image = $IMAGE | del(.taskDefinitionArn) | del(.revision) | del(.status) | del(.requiresAttributes) | del(.compatibilities)')
aws ecs register-task-definition --region "us-east-1" --cli-input-json "$NEW_TASK_DEFINTIION"

شكرًا @ m-radzikowski لقد قمت بتعديل الحل الخاص بك قليلاً لذا فهو يعمل أيضًا عند استخدام تجزئة git كعلامة صورة بدلاً من "الأحدث". يحتاج إلى بعض المتغيرات البيئية للعمل بالرغم من ذلك
""

! / بن / باش

برنامج نصي للحصول على تعريف المهمة الحالي ، وبناءً على ذلك ، قم بإضافة عنوان صورة ecr جديد إلى القالب القديم وإزالة السمات غير المطلوبة ، ثم نرسل تعريف مهمة جديدًا ، ونحصل على رقم مراجعة جديد من خدمة الإخراج والتحديث

مجموعة ه
ECR_IMAGE = "$ {AWS_ACCOUNT_ID} .dkr.ecr. $ {AWS_DEFAULT_REGION} .amazonaws.com / $ {IMAGE_REPO_NAME}: $ {CODEBUILD_RESOLVED_SOURCE_VERSION}"
TASK_DEFINITION = $ (aws ecs وصف المهمة - تعريف المهمة - "$ TASK_FAMILY" - المنطقة "$ AWS_DEFAULT_REGION")
NEW_TASK_DEFINTIION = $ (echo $ TASK_DEFINITION | jq --arg IMAGE "$ ECR_IMAGE" '.taskDefinition | .containerDefinitions [0] .image = $ IMAGE | del (.taskDefinitionArn) | del (.revision) | del (.status) | del (.requiresAttributes) | del (. compatibility) ')
NEW_TASK_INFO = $ (aws ecs - تعريف المهمة - المنطقة "$ AWS_DEFAULT_REGION" --cli-input-json "$ NEW_TASK_DEFINTIION")
NEW_REVISION = $ (صدى $ NEW_TASK_INFO | jq '.taskDefinition.revision')
aws ecs update-service --cluster $ {ECS_CLUSTER} - الخدمة $ {SERVICE_NAME} - تعريف المهمة $ {TASK_FAMILY}: $ {NEW_REVISION} ``

ما هو الوضع على هذا؟ كيف يمكننا إنشاء مراجعة تعريف المهمة؟ أعتقد أنه سيكون هناك شيء مثل:

aws ecs update-task-definition --task-definition "$task_fam" --revision "ecr/name:tag"

لذا نعم أنا أبحث عن:

_ تعريف مهمة تحديث النظام الأوروبي لمعلومات الأمن _

لقد تحققت باستخدام aws ecs help ولا توجد هذه الأداة المساعدة:


Screen Shot 2019-08-13 at 10 31 13 AM


لقد أنشأت هذه التذكرة: https://github.com/aws/aws-cli/issues/4401

دعم aws-cli ، إذا كنت لا ترغب في مناقشتنا ، فلا تستخدم جيثب ، آسف ، هذا لا يزال ساريًا ويجب إعادة فتحه

قد لا تحتاج إلى jq :

aws describe-task-definition --task-definition myapp \
     --query 'taskDefinition.{containerDefinitions:containerDefinitions}' \
     > /tmp/task-definitions.json 

قد يحتاج مستخدمو Fargate إلى أوامر طويلة مثل هذا:

aws ecs register-task-definition \
    --family myapp \
    --cli-input-json file:///tmp/task.json \
    --requires-compatibilities FARGATE \
    --network-mode awsvpc \
    --cpu 1024 --memory 2048 \
    --task-role-arn <arn> --execution-role-arn <arn>

بصفتي مستخدم fargate ، وجدت اختراقًا يستخدم لـ ecs cli و --tags.

أيًا كان ما أدخلته في رقم الإصدار ، فسيتم تعيين المراجعة على أنها النسخة التالية.

ecs-cli compose --project-name PROJECT-NAME --file DOCKER_COMPOSE_FILE --ecs-params ECS_PARAMS_FILE --region REGION create --launch-type FARGATE --tags 'TaskDefinition=TASK:VERSION_NUMBER'

لقد تحولت إلى Fargate CLI. يقوم تلقائيًا بتحديث تعريف المهمة المناسب.

https://github.com/awslabs/fargatecli

لقد تحولت إلى Fargate CLI. يقوم تلقائيًا بتحديث تعريف المهمة المناسب.

https://github.com/awslabs/fargatecli

شكرا لتقاسم ذلك - لم أره. نتطلع إلى التحقق من ذلك.

fargatecli لا يعمل إذا كان لديك مجلدات محددة

قد لا تحتاج إلى jq :

aws describe-task-definition --task-definition myapp \
     --query 'taskDefinition.{containerDefinitions:containerDefinitions}' \
     > /tmp/task-definitions.json 

قد يحتاج مستخدمو Fargate إلى أوامر طويلة مثل هذا:

aws ecs register-task-definition \
    --family myapp \
    --cli-input-json file:///tmp/task.json \
    --requires-compatibilities FARGATE \
    --network-mode awsvpc \
    --cpu 1024 --memory 2048 \
    --task-role-arn <arn> --execution-role-arn <arn>

هذه نسخة كاملة لا تتطلب JQ:

NEW_TASK_DEFINTION=\$(aws ecs describe-task-definition --task-definition {task def} 
      --query '{  containerDefinitions: taskDefinition.containerDefinitions,
                  family: taskDefinition.family,
                  taskRoleArn: taskDefinition.taskRoleArn,
                  executionRoleArn: taskDefinition.executionRoleArn,
                  networkMode: taskDefinition.networkMode,
                  volumes: taskDefinition.volumes,
                  placementConstraints: taskDefinition.placementConstraints,
                  requiresCompatibilities: taskDefinition.requiresCompatibilities,
                  cpu: taskDefinition.cpu,
                  memory: taskDefinition.memory}')

aws ecs register-task-definition --cli-input-json "$NEW_TASK_DEFINTION"

إضافة إلى إجابةsashokbg ، فإن تحديد مهمة التسجيل يشكو من أنه يحتاج إلى سلاسل لقيم وحدة المعالجة المركزية والذاكرة. يستخدم الأمر --query بناء جملة JMESPath ، والذي يدعم صب النوع to_string ($ arg) ، لذا قم فقط بلف هذين في to_string ()

إذا كنت تريد فقط تحديث مجموعة ECS الخاصة بك لاستخدام أحدث صورة (علامة بـ "الأحدث") ، فيجب أن يكون هذا كافيًا:

aws ecs update-service --cluster your-cluster-name --service your-service-name --force-new-deployment

تقوم المعلمة --force-new-deployment بتنفيذ الحيلة.

oalagtash شكرا للمعلومات. سأحاول ذلك.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات