هل هناك طريقة لإضافة مراجعة جديدة إلى تعريف مهمة ECS؟
في حالتي ، أريد تحديث عنوان URL للحاوية في خط أنابيب القرص المضغوط الخاص بي باستخدام سطر الأوامر. إما أن الوثائق مفقودة كيفية القيام بذلك أم أنه ممكن فقط باستخدام وحدة التحكم الإدارية؟
راجع https://github.com/aws/amazon-ecs-cli/issues/91 (لكنني لا أستخدم تكوين عامل الإرساء)
هم، لست متأكدا. بشكل عام ، سيكون أفضل مكان للأسئلة المتعلقة بالاستخدام هو تجاوز سعة المكدس ، كما هو مذكور في برنامج 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_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
ولا توجد هذه الأداة المساعدة:
لقد أنشأت هذه التذكرة: 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. يقوم تلقائيًا بتحديث تعريف المهمة المناسب.
لقد تحولت إلى Fargate CLI. يقوم تلقائيًا بتحديث تعريف المهمة المناسب.
شكرا لتقاسم ذلك - لم أره. نتطلع إلى التحقق من ذلك.
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 شكرا للمعلومات. سأحاول ذلك.
التعليق الأكثر فائدة
شكرًا @ 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} ``