حذر
لم تعد تتم صيانة هذا المستودع الخاص بـ aws-nuke بشكل نشط. نوصي المستخدمين بالتبديل إلى الشوكة النشطة لهذا المشروع على ekristen/aws-nuke. نحن نقدر كل الدعم والمساهمات التي تلقيناها طوال حياة هذا المشروع. نعتقد أن الشوكة ستستمر في توفير الوظائف والدعم الذي تتوقعه من aws-nuke. يرجى ملاحظة أن هذا الإيقاف يعني أننا لن نقوم بمعالجة المشكلات أو قبول طلبات السحب أو إصدار إصدارات مستقبلية من هذا المستودع. شكرا لتفهمك ودعمك.
قم بإزالة جميع الموارد من حساب AWS.
حالة التطوير aws-nuke مستقرة، ولكن من المحتمل ألا تغطيها جميع موارد AWS. يتم تشجيعك على إضافة الموارد المفقودة وإنشاء طلب سحب أو إنشاء مشكلة.
انتبه إلى أن aws-nuke هي أداة مدمرة للغاية، لذا عليك توخي الحذر الشديد أثناء استخدامها. وإلا فقد تقوم بحذف بيانات الإنتاج.
ننصحك بشدة بعدم تشغيل هذا التطبيق على أي حساب AWS، حيث لا يمكنك تحمل خسارة جميع الموارد.
لتقليل نصف قطر الانفجار للحوادث، هناك بعض احتياطات السلامة:
--no-dry-run
لحذف الموارد فعليًا.prod
. هذه السلسلة مشفرة بشكل ثابت ومن المستحسن إضافتها إلى كل حساب إنتاج فعلي (على سبيل المثال، mycompany-production-ecr
).لا تتردد في إنشاء مشكلة، إذا كان لديك أي أفكار لتحسين إجراءات السلامة.
نقوم عادةً بإصدار إصدار جديد بمجرد تجميع التغييرات الكافية واختبارها لفترة من الوقت.
يمكنك العثور على ثنائيات Linux وmacOS وWindows في صفحة الإصدارات، لكننا نوفر أيضًا إصدارات محتواة على quay.io/rebuy/aws-nuke وdocker.io/rebuy/aws-nuke. كلاهما متاح لمعماريات متعددة (amd64، وarm64، وarmv7).
تحتاج أولاً إلى إنشاء ملف تكوين لـ aws-nuke . وهذا هو الحد الأدنى:
regions :
- eu-west-1
- global
account-blocklist :
- " 999999999999 " # production
accounts :
" 000000000000 " : {} # aws-nuke-example
باستخدام هذا التكوين يمكننا تشغيل aws-nuke :
$ aws-nuke -c config/nuke-config.yml --profile aws-nuke-example
aws-nuke version v1.0.39.gc2f318f - Fri Jul 28 16:26:41 CEST 2017 - c2f318f37b7d2dec0e646da3d4d05ab5296d5bce
Do you really want to nuke the account with the ID 000000000000 and the alias 'aws-nuke-example'?
Do you want to continue? Enter account alias to continue.
> aws-nuke-example
eu-west-1 - EC2DHCPOption - 'dopt-bf2ec3d8' - would remove
eu-west-1 - EC2Instance - 'i-01b489457a60298dd' - would remove
eu-west-1 - EC2KeyPair - 'test' - would remove
eu-west-1 - EC2NetworkACL - 'acl-6482a303' - cannot delete default VPC
eu-west-1 - EC2RouteTable - 'rtb-ffe91e99' - would remove
eu-west-1 - EC2SecurityGroup - 'sg-220e945a' - cannot delete group 'default'
eu-west-1 - EC2SecurityGroup - 'sg-f20f958a' - would remove
eu-west-1 - EC2Subnet - 'subnet-154d844e' - would remove
eu-west-1 - EC2Volume - 'vol-0ddfb15461a00c3e2' - would remove
eu-west-1 - EC2VPC - 'vpc-c6159fa1' - would remove
eu-west-1 - IAMUserAccessKey - 'my-user -> ABCDEFGHIJKLMNOPQRST' - would remove
eu-west-1 - IAMUserPolicyAttachment - 'my-user -> AdministratorAccess' - [UserName: "my-user", PolicyArn: "arn:aws:iam::aws:policy/AdministratorAccess", PolicyName: "AdministratorAccess"] - would remove
eu-west-1 - IAMUser - 'my-user' - would remove
Scan complete: 13 total, 11 nukeable, 2 filtered.
Would delete these resources. Provide --no-dry-run to actually destroy resources.
كما نرى، فإن aws-nuke يسرد فقط جميع الموارد والمخارج التي تم العثور عليها. وذلك لأن علامة --no-dry-run
مفقودة. كما يريد حذف المسؤول. لا نريد القيام بذلك، لأننا نستخدم هذا المستخدم للوصول إلى حسابنا. لذلك يتعين علينا توسيع التكوين بحيث يتجاهل هذا المستخدم:
regions :
- eu-west-1
account-blocklist :
- " 999999999999 " # production
accounts :
" 000000000000 " : # aws-nuke-example
filters :
IAMUser :
- " my-user "
IAMUserPolicyAttachment :
- " my-user -> AdministratorAccess "
IAMUserAccessKey :
- " my-user -> ABCDEFGHIJKLMNOPQRST "
$ aws-nuke -c config/nuke-config.yml --profile aws-nuke-example --no-dry-run
aws-nuke version v1.0.39.gc2f318f - Fri Jul 28 16:26:41 CEST 2017 - c2f318f37b7d2dec0e646da3d4d05ab5296d5bce
Do you really want to nuke the account with the ID 000000000000 and the alias 'aws-nuke-example'?
Do you want to continue? Enter account alias to continue.
> aws-nuke-example
eu-west-1 - EC2DHCPOption - 'dopt-bf2ec3d8' - would remove
eu-west-1 - EC2Instance - 'i-01b489457a60298dd' - would remove
eu-west-1 - EC2KeyPair - 'test' - would remove
eu-west-1 - EC2NetworkACL - 'acl-6482a303' - cannot delete default VPC
eu-west-1 - EC2RouteTable - 'rtb-ffe91e99' - would remove
eu-west-1 - EC2SecurityGroup - 'sg-220e945a' - cannot delete group 'default'
eu-west-1 - EC2SecurityGroup - 'sg-f20f958a' - would remove
eu-west-1 - EC2Subnet - 'subnet-154d844e' - would remove
eu-west-1 - EC2Volume - 'vol-0ddfb15461a00c3e2' - would remove
eu-west-1 - EC2VPC - 'vpc-c6159fa1' - would remove
eu-west-1 - IAMUserAccessKey - 'my-user -> ABCDEFGHIJKLMNOPQRST' - filtered by config
eu-west-1 - IAMUserPolicyAttachment - 'my-user -> AdministratorAccess' - [UserName: "my-user", PolicyArn: "arn:aws:iam::aws:policy/AdministratorAccess", PolicyName: "AdministratorAccess"] - would remove
eu-west-1 - IAMUser - 'my-user' - filtered by config
Scan complete: 13 total, 8 nukeable, 5 filtered.
Do you really want to nuke these resources on the account with the ID 000000000000 and the alias 'aws-nuke-example'?
Do you want to continue? Enter account alias to continue.
> aws-nuke-example
eu-west-1 - EC2DHCPOption - 'dopt-bf2ec3d8' - failed
eu-west-1 - EC2Instance - 'i-01b489457a60298dd' - triggered remove
eu-west-1 - EC2KeyPair - 'test' - triggered remove
eu-west-1 - EC2RouteTable - 'rtb-ffe91e99' - failed
eu-west-1 - EC2SecurityGroup - 'sg-f20f958a' - failed
eu-west-1 - EC2Subnet - 'subnet-154d844e' - failed
eu-west-1 - EC2Volume - 'vol-0ddfb15461a00c3e2' - failed
eu-west-1 - EC2VPC - 'vpc-c6159fa1' - failed
eu-west-1 - S3Object - 's3://rebuy-terraform-state-138758637120/run-terraform.lock' - triggered remove
Removal requested: 2 waiting, 6 failed, 5 skipped, 0 finished
eu-west-1 - EC2DHCPOption - 'dopt-bf2ec3d8' - failed
eu-west-1 - EC2Instance - 'i-01b489457a60298dd' - waiting
eu-west-1 - EC2KeyPair - 'test' - removed
eu-west-1 - EC2RouteTable - 'rtb-ffe91e99' - failed
eu-west-1 - EC2SecurityGroup - 'sg-f20f958a' - failed
eu-west-1 - EC2Subnet - 'subnet-154d844e' - failed
eu-west-1 - EC2Volume - 'vol-0ddfb15461a00c3e2' - failed
eu-west-1 - EC2VPC - 'vpc-c6159fa1' - failed
Removal requested: 1 waiting, 6 failed, 5 skipped, 1 finished
--- truncating long output ---
كما ترى، يحاول aws-nuke الآن حذف جميع الموارد التي لم تتم تصفيتها، دون الاهتمام بالتبعيات بينها. وينتج عن هذا أخطاء في واجهة برمجة التطبيقات (API) والتي يمكن تجاهلها. تظهر هذه الأخطاء في نهاية تشغيل aws-nuke ، إذا استمرت في الظهور.
يعيد aws-nuke محاولة حذف جميع الموارد حتى يتم حذف جميع الموارد المحددة أو حتى لا يتبقى سوى الموارد التي تحتوي على أخطاء.
هناك طريقتان للمصادقة على aws-nuke . هناك بيانات اعتماد وملفات تعريف ثابتة. يمكن تكوين الإصدار الأحدث في ملف بيانات الاعتماد المشتركة (أي ~/.aws/credentials
) أو ملف التكوين المشترك (أي ~/.aws/config
).
لاستخدام بيانات الاعتماد الثابتة، يلزم وضع علامتي سطر الأوامر --access-key-id
و- --secret-access-key
. العلامة --session-token
مطلوبة فقط للجلسات المؤقتة.
لاستخدام ملفات التعريف المشتركة، يلزم وجود علامة سطر الأوامر --profile
. يجب تعريف ملف التعريف إما ببيانات اعتماد ثابتة في ملف بيانات الاعتماد المشترك أو في ملف تكوين مشترك مع دور مفترض.
من الممكن تكوين aws-nuke للتشغيل على نقاط نهاية AWS غير الافتراضية. يمكن استخدامه لاختبار التكامل الذي يشير إلى نقطة نهاية محلية مثل جهاز S3 أو مجموعة Stratoscale على سبيل المثال.
لتكوين aws-nuke لاستخدام نقاط النهاية المخصصة، قم بإضافة توجيهات التكوين كما هو موضح في المثال التالي:
regions :
- demo10
# inspired by https://www.terraform.io/docs/providers/aws/guides/custom-service-endpoints.html
endpoints :
- region : demo10
tls_insecure_skip_verify : true
services :
- service : ec2
url : https://10.16.145.115/api/v2/aws/ec2
- service : s3
url : https://10.16.145.115:1060
- service : rds
url : https://10.16.145.115/api/v2/aws/rds
- service : elbv2
url : https://10.16.145.115/api/v2/aws/elbv2
- service : efs
url : https://10.16.145.115/api/v2/aws/efs
- service : emr
url : https://10.16.145.115/api/v2/aws/emr
- service : autoscaling
url : https://10.16.145.115/api/v2/aws/autoscaling
- service : cloudwatch
url : https://10.16.145.115/api/v2/aws/cloudwatch
- service : sns
url : https://10.16.145.115/api/v2/aws/sns
- service : iam
url : https://10.16.145.115/api/v2/aws/iam
- service : acm
url : https://10.16.145.115/api/v2/aws/acm
account-blocklist :
- " account-id-of-custom-region-prod " # production
accounts :
" account-id-of-custom-region-demo10 " :
ويمكن بعد ذلك استخدام هذا على النحو التالي:
$ aws-nuke -c config/my.yaml --access-key-id <access-key> --secret-access-key <secret-key> --default-region demo10
aws-nuke version v2.11.0.2.gf0ad3ac.dirty - Tue Nov 26 19:15:12 IST 2019 - f0ad3aca55eb66b93b88ce2375f8ad06a7ca856f
Do you really want to nuke the account with the ID account-id-of-custom-region-demo10 and the alias 'account-id-of-custom-region-demo10'?
Do you want to continue? Enter account alias to continue.
> account-id-of-custom-region-demo10
demo10 - EC2Volume - vol-099aa1bb08454fd5bc3499897f175fd8 - [tag:Name: "volume_of_5559b38e-0a56-4078-9a6f-eb446c21cadf"] - would remove
demo10 - EC2Volume - vol-11e9b09c71924354bcb4ee77e547e7db - [tag:Name: "volume_of_e4f8c806-0235-4578-8c08-dce45d4c2952"] - would remove
demo10 - EC2Volume - vol-1a10cb3f3119451997422c435abf4275 - [tag:Name: "volume-dd2e4c4a"] - would remove
demo10 - EC2Volume - vol-1a2e649df1ef449686ef8771a078bb4e - [tag:Name: "web-server-5"] - would remove
demo10 - EC2Volume - vol-481d09bbeb334ec481c12beee6f3012e - [tag:Name: "volume_of_15b606ce-9dcd-4573-b7b1-4329bc236726"] - would remove
demo10 - EC2Volume - vol-48f6bd2bebb945848b029c80b0f2de02 - [tag:Name: "Data volume for 555e9f8a"] - would remove
demo10 - EC2Volume - vol-49f0762d84f0439da805d11b6abc1fee - [tag:Name: "Data volume for acb7f3a5"] - would remove
demo10 - EC2Volume - vol-4c34656f823542b2837ac4eaff64762b - [tag:Name: "wpdb"] - would remove
demo10 - EC2Volume - vol-875f091078134fee8d1fe3b1156a4fce - [tag:Name: "volume-f1a7c95f"] - would remove
demo10 - EC2Volume - vol-8776a0d5bd4e4aefadfa8038425edb20 - [tag:Name: "web-server-6"] - would remove
demo10 - EC2Volume - vol-8ed468bfab0b42c3bc617479b8f33600 - [tag:Name: "web-server-3"] - would remove
demo10 - EC2Volume - vol-94e0370b6ab54f03822095d74b7934b2 - [tag:Name: "web-server-2"] - would remove
demo10 - EC2Volume - vol-9ece34dfa7f64dd583ab903a1273340c - [tag:Name: "volume-4ccafc2e"] - would remove
demo10 - EC2Volume - vol-a3fb3e8800c94452aff2fcec7f06c26b - [tag:Name: "web-server-0"] - would remove
demo10 - EC2Volume - vol-a53954e17cb749a283d030f26bbaf200 - [tag:Name: "volume-5484e330"] - would remove
demo10 - EC2Volume - vol-a7afe64f4d0f4965a6703cc0cfab2ba4 - [tag:Name: "Data volume for f1a7c95f"] - would remove
demo10 - EC2Volume - vol-d0bc3f2c887f4072a9fda0b8915d94c1 - [tag:Name: "physical_volume_of_39c29f53-eac4-4f02-9781-90512cc7c563"] - would remove
demo10 - EC2Volume - vol-d1f066d8dac54ae59d087d7e9947e8a9 - [tag:Name: "Data volume for 4ccafc2e"] - would remove
demo10 - EC2Volume - vol-d9adb3f084cd4d588baa08690349b1f9 - [tag:Name: "volume_of_84854c9b-98aa-4f5b-926a-38b3398c3ad2"] - would remove
demo10 - EC2Volume - vol-db42e471b19f42b7835442545214bc1a - [tag:Name: "lb-tf-lb-20191126090616258000000002"] - would remove
demo10 - EC2Volume - vol-db80932fb47243efa67c9dd34223c647 - [tag:Name: "web-server-5"] - would remove
demo10 - EC2Volume - vol-dbea1d1083654d30a43366807a125aed - [tag:Name: "volume-555e9f8a"] - would remove
--- truncating long output ---
يحذف aws-nuke الكثير من الموارد وقد تتم إضافة المزيد منها في أي إصدار. في النهاية، يجب حذف كل الموارد. قد ترغب في تقييد الموارد التي تريد حذفها. هناك طرق متعددة لتكوين هذا.
إحدى الطرق هي المرشحات، والتي تم ذكرها بالفعل. وهذا يتطلب معرفة معرف كل مورد. من الممكن أيضًا منع حذف أنواع الموارد بأكملها (مثل S3Bucket
) بطريقتين.
--target
استخدام الأسلحة النووية في أنواع الموارد المحددة.--exclude
استخدام الأسلحة النووية لأنواع الموارد المحددة.من الممكن أيضًا تكوين أنواع الموارد في ملف التكوين كما في هذه الأمثلة:
---
regions:
- "eu-west-1"
account-blocklist:
- 1234567890
resource-types:
# only nuke these three resources
targets:
- S3Object
- S3Bucket
- IAMRole
accounts:
555133742: {}
---
regions:
- "eu-west-1"
account-blocklist:
- 1234567890
resource-types:
# don't nuke IAM users
excludes:
- IAMUser
accounts:
555133742: {}
إذا تم تحديد الأهداف في أماكن متعددة (على سبيل المثال، واجهة سطر الأوامر (CLI) وحساب محدد)، فيجب تحديد نوع المورد في جميع الأماكن. وبعبارة أخرى، فإن كل تكوين يحد من التكوينات السابقة.
إذا تم استخدام الاستبعاد، فلن يتم حذف جميع أنواع الموارد الخاصة به.
تلميح: يمكنك رؤية جميع أنواع الموارد المتاحة باستخدام هذا الأمر:
aws-nuke resource-types
لم يتم إصدار هذه الميزة بعد وربما تكون جزءًا من
v2.18
.
يدعم aws-nuke إزالة الموارد عبر AWS Cloud Control API. عند تنفيذ aws-nuke، سيؤدي تلقائيًا إلى إزالة مجموعة من الموارد المُدارة يدويًا عبر Cloud Control.
ستتم إزالة مجموعة فرعية فقط من الموارد المدعومة للتحكم في السحابة تلقائيًا، لأنه قد تكون هناك موارد تم تنفيذها بالفعل وستؤدي إضافتها أيضًا إلى تجاوز عوامل التصفية الموجودة في تكوينات المستخدم نظرًا لأن Cloud Control لديه نظام تسمية آخر ومجموعة مختلفة من الخصائص. علاوة على ذلك، هناك بعض موارد التحكم السحابي التي تحتاج إلى معالجة خاصة والتي لم يتم دعمها بعد بواسطة aws-nuke .
على الرغم من أن المجموعة الفرعية من موارد التحكم السحابي المدعومة تلقائيًا محدودة، يمكنك تكوين aws-nuke لجعله يجرب أي مورد إضافي. إما عبر إشارات سطر الأوامر أو عبر ملف التكوين.
بالنسبة لملف التكوين، يجب عليك إضافة المورد إلى قائمة resource-types.cloud-control
:
resource-types :
cloud-control :
- AWS::EC2::TransitGateway
- AWS::EC2::VPC
إذا كنت تريد استخدام سطر الأوامر، فيجب عليك إضافة علامة --cloud-control
لكل مورد تريد إضافته:
aws-nuke
-c nuke-config.yaml
--cloud-control AWS::EC2::TransitGateway
--cloud-control AWS::EC2::VPC
ملاحظة: هناك بعض الموارد التي يدعمها Cloud Control ويتم تنفيذها أصلاً بواسطة aws-nuke . إذا قمت بتكوين استخدام Cloud Control لهذه الموارد، فلن يتم تنفيذ التعليمات البرمجية المطبقة محليًا لهذا المورد. على سبيل المثال، مع --cloud-control AWS::EC2::VPC
لن يستخدم مورد EC2VPC
.
هناك بعض الميزات التي يتم رأيها تمامًا. لجعل هذه الميزات مناسبة للجميع، يحتوي aws-nuke على علامات لتمكين هذه الميزات يدويًا. يمكن تهيئتها على المستوى الجذري للتكوين، مثل هذا:
---
feature-flags :
disable-deletion-protection :
RDSInstance : true
EC2Instance : true
CloudformationStack : true
force-delete-lightsail-addons : true
من الممكن تصفية هذا الأمر المهم لعدم حذف المستخدم الحالي على سبيل المثال أو لموارد مثل S3 Buckets التي تحتوي على مساحة اسم مشتركة عالميًا وقد يكون من الصعب إعادة إنشائها. تعتمد التصفية حاليًا على معرف المورد. ستتم طباعة المعرف كخطوة أولى في aws-nuke (على سبيل المثال i-01b489457a60298dd
لمثيل EC2).
ملاحظة: حتى مع استخدام المرشحات، يجب ألا تقوم بتشغيل aws-nuke على أي حساب AWS، حيث لا يمكنك تحمل خسارة جميع الموارد. من السهل ارتكاب الأخطاء في تكوين الفلتر. أيضًا، نظرًا لأن aws-nuke قيد التطوير المستمر، فهناك دائمًا إمكانية لإدخال أخطاء جديدة، بغض النظر عن مدى حرصنا على مراجعة التعليمات البرمجية الجديدة.
تعد عوامل التصفية جزءًا من التكوين الخاص بالحساب ويتم تجميعها حسب أنواع الموارد. هذا مثال على التكوين الذي يحذف جميع الموارد باستثناء المستخدم admin
الذي يتمتع بأذونات الوصول ومفتاحي الوصول:
---
regions :
- global
- eu-west-1
account-blocklist :
- 1234567890
accounts :
0987654321 :
filters :
IAMUser :
- " admin "
IAMUserPolicyAttachment :
- " admin -> AdministratorAccess "
IAMUserAccessKey :
- " admin -> AKSDAFRETERSDF "
- " admin -> AFGDSGRTEWSFEY "
سيتم تخطي أي مورد يتطابق معرف المورد الخاص به تمامًا مع أي من عوامل التصفية الموجودة في القائمة. سيتم وضع علامة "تمت تصفيتها بواسطة التكوين" عند تشغيل aws-nuke .
تدعم بعض الموارد التصفية عبر الخصائص. عندما يدعم أحد الموارد هذه الخصائص، سيتم إدراجها في المخرجات كما في هذا المثال:
global - IAMUserPolicyAttachment - 'admin -> AdministratorAccess' - [RoleName: "admin", PolicyArn: "arn:aws:iam::aws:policy/AdministratorAccess", PolicyName: "AdministratorAccess"] - would remove
لاستخدام الخصائص، يلزم تحديد كائن له properties
value
بدلاً من السلسلة البسيطة.
يمكن استخدام هذه الأنواع لتبسيط التكوين. على سبيل المثال، من الممكن حماية جميع مفاتيح الوصول لمستخدم واحد:
IAMUserAccessKey :
- property : UserName
value : " admin "
هناك أيضًا أنواع مقارنة إضافية بدلاً من المطابقة التامة:
exact
- يجب أن يتطابق المعرف تمامًا مع السلسلة المحددة. هذا هو الافتراضي.contains
- يجب أن يحتوي المعرف على السلسلة المحددة.glob
– يجب أن يتطابق المعرف مع نمط الكرة الأرضية المحدد. هذا يعني أن السلسلة قد تحتوي على أحرف بدل مثل *
و ?
. لاحظ أن التمرير مصمم لمسارات الملفات، لذا فإن أحرف البدل لا تتطابق مع فاصل الدليل ( /
). يمكن العثور على تفاصيل حول نمط الكرة الأرضية في وثائق المكتبة.regex
– يجب أن يتطابق المعرف مع التعبير العادي المحدد. يمكن العثور على تفاصيل حول بناء الجملة في وثائق المكتبة.dateOlderThan
- يتم تحليل المعرف كطابع زمني. بعد إضافة الإزاحة إليها (المحددة في حقل value
)، يجب أن يكون الطابع الزمني الناتج بعد الوقت الحالي. يمكن العثور على تفاصيل حول بناء جملة الإزاحة في وثائق المكتبة. تنسيقات التاريخ المدعومة هي Epoch time و 2006-01-02
و 2006/01/02
و 2006-01-02T15:04:05Z
و 2006-01-02T15:04:05.999999999Z07:00
و 2006-01-02T15:04:05Z07:00
. لاستخدام نوع مقارنة غير افتراضي، يلزم تحديد كائن type
value
بدلاً من السلسلة العادية.
يمكن استخدام هذه الأنواع لتبسيط التكوين. على سبيل المثال، من الممكن حماية كافة مفاتيح الوصول لمستخدم واحد باستخدام glob
:
IAMUserAccessKey :
- type : glob
value : " admin -> * "
من الممكن أيضًا استخدام خصائص التصفية وأنواع التصفية معًا. على سبيل المثال، لحماية جميع المناطق المستضافة لنطاق TLD محدد:
Route53HostedZone :
- property : Name
type : glob
value : " *.rebuy.cloud. "
يمكن عكس أي نتيجة مرشح باستخدام invert: true
، على سبيل المثال:
CloudFormationStack :
- property : Name
value : " foo "
invert : true
في هذه الحالة، سيتم تصفية أي CloudFormationStack باستثناء تلك التي تسمى "foo". انتبه إلى أن aws-nuke يأخذ كل الموارد داخليًا ويطبق كل مرشح عليه. إذا تطابق عامل التصفية، فإنه يضع علامة على العقدة على أنها تمت تصفيتها.
قد يكون الأمر كذلك أن بعض عوامل التصفية هي نفسها عبر حسابات متعددة. يمكن أن يحدث هذا بشكل خاص، إذا تم استخدام أدوات التوفير مثل Terraform أو إذا كانت موارد IAM تتبع نفس النمط.
في هذه الحالة، يدعم aws-nuke الإعدادات المسبقة للمرشحات، التي يمكن تطبيقها على حسابات متعددة. يمكن أن يبدو التكوين كما يلي:
---
regions :
- " global "
- " eu-west-1 "
account-blocklist :
- 1234567890
accounts :
555421337 :
presets :
- " common "
555133742 :
presets :
- " common "
- " terraform "
555134237 :
presets :
- " common "
- " terraform "
filters :
EC2KeyPair :
- " notebook "
presets :
terraform :
filters :
S3Bucket :
- type : glob
value : " my-statebucket-* "
DynamoDBTable :
- " terraform-lock "
common :
filters :
IAMRole :
- " OrganizationAccountAccessRole "
brew install aws-nuke
أسهل طريقة لتثبيته هي تنزيل أحدث إصدار من GitHub.
تنزيل واستخراج $ wget -c https://github.com/rebuy-de/aws-nuke/releases/download/v2.25.0/aws-nuke-v2.25.0-linux-amd64.tar.gz -O - | tar -xz -C $HOME/bin
قم بتشغيل $ aws-nuke-v2.25.0-linux-amd64
لتجميع aws-nuke من المصدر، تحتاج إلى بيئة تطوير Golang عاملة. يجب استنساخ المصادر إلى $GOPATH/src/github.com/rebuy-de/aws-nuke
.
تحتاج أيضًا إلى تثبيت golint و GNU Make.
ثم تحتاج فقط إلى تشغيل make build
لتجميع ملف ثنائي في دليل المشروع أو make install
go install aws-nuke في $GOPATH/bin
. باستخدام make xc
يمكنك ترجمة aws-nuke لمنصات أخرى.
يمكنك تشغيل aws-nuke باستخدام Docker باستخدام أمر مثل هذا:
$ docker run
--rm -it
-v /full-path/to/nuke-config.yml:/home/aws-nuke/config.yml
-v /home/user/.aws:/home/aws-nuke/.aws
quay.io/rebuy/aws-nuke:v2.25.0
--profile default
--config /home/aws-nuke/config.yml
ولتنفيذ ذلك، تحتاج إلى ضبط مسارات تكوين AWS وتكوين aws-nuke .
تحتاج أيضًا إلى تحديد ملف تعريف AWS الصحيح. بدلاً من تثبيت دليل AWS، يمكنك استخدام علامتي --access-key-id
و- --secret-access-key
.
تأكد من استخدام أحدث إصدار في علامة الصورة. بدلاً من ذلك، يمكنك استخدام main
لأحدث إصدار تطوير، لكن كن على دراية بأن هذا من المرجح أن يتعطل في أي وقت.
لاختبار الوحدة aws-nuke ، تتطلب بعض الاختبارات تشغيل gomock. سيتم تشغيل هذا عبر go generate ./...
، ولكن سيتم تشغيله تلقائيًا عبر make test
. لإجراء اختبارات الوحدة:
make test
لا تتردد في إنشاء مشكلة GitHub لأية تقارير أخطاء أو طلبات ميزات. الرجاء استخدام قائمتنا البريدية للأسئلة: [email protected]. يمكنك أيضًا البحث في أرشيف القائمة البريدية عما إذا كان شخص ما لديه نفس المشكلة بالفعل: https://groups.google.com/d/forum/aws-nuke
يمكنك المساهمة في aws-nuke عن طريق تقسيم هذا المستودع وإجراء التغييرات وإنشاء طلب سحب مقابل مستودعنا. إذا لم تكن متأكدًا من كيفية حل مشكلة ما أو كانت لديك أسئلة أخرى حول إحدى المساهمات، فيرجى إنشاء مشكلة على GitHub.