6

Khi tôi chạy CloudFormation deploy sử dụng mẫu có tài nguyên Cổng API, lần đầu tiên tôi chạy nó, nó tạo và triển khai các giai đoạn. Lần sau tôi chạy nó, nó cập nhật các tài nguyên nhưng không triển khai đến các giai đoạn.CloudFormation không triển khai các giai đoạn cổng API khi cập nhật

Hành vi đó có được dự định không? Nếu có, làm thế nào tôi có được nó để triển khai đến các giai đoạn bất cứ khi nào nó cập nhật?

(Terraform đề cập đến một vấn đề tương tự: https://github.com/hashicorp/terraform/issues/6613)

Trả lời

5

Có vẻ như không có cách nào để dễ dàng tạo ra một triển khai mới bất cứ khi nào một trong những thay đổi Tài Cloudformation của bạn.

Một cách để giải quyết vấn đề đó là sử dụng Tài nguyên tùy chỉnh được Lambda hỗ trợ (xem http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html).

Lambda sẽ tạo Triển khai mới, chỉ khi một trong các Tài nguyên của bạn đã được cập nhật. Để xác định xem một trong những nguồn lực của bạn đã được cập nhật,
bạn có thể sẽ phải thực hiện logic tùy chỉnh xung quanh cuộc gọi API này: http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeStackEvents.html

Để kích hoạt bản cập nhật về tài nguyên Tuỳ chỉnh của bạn, tôi đề nghị bạn cung cấp một Cloudformation Parameter rằng sẽ được sử dụng để buộc cập nhật Tài nguyên tùy chỉnh của bạn (ví dụ: thời gian hiện tại hoặc số phiên bản).

Lưu ý rằng bạn sẽ phải thêm mệnh đề DependsOn vào Tài nguyên tùy chỉnh sẽ bao gồm tất cả các tài nguyên có liên quan đến API của bạn. Nếu không, triển khai của bạn có thể được tạo trước khi tất cả Tài nguyên API của bạn được cập nhật.

Hy vọng điều này sẽ hữu ích.

+0

Chắc chắn giúp. :) Amazon đề nghị một cách khác - có thể chia sẻ nếu quan tâm. – bjfletcher

+1

@bjfletcher chắc chắn muốn biết! – spg

+1

@bjfletcher Chạy vào vấn đề này, bạn tìm thấy gì từ Amazon? –

2

CloudFormation nói cách của Amazon là:

AWS CloudFormation sẽ chăm sóc của việc cung cấp và cấu hình những nguồn lực cho bạn http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html

tái triển khai các API không phải là một nhiệm vụ cung ... Đó là một hoạt động quảng cáo là một phần của giai đoạn trong quá trình phát hành phần mềm của bạn.

AWS CodePipeline là dịch vụ chuyển phát liên tục mà bạn có thể sử dụng để lập mô hình, trực quan hóa và tự động hóa các bước cần thiết để phát hành phần mềm. http://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html

CodePipeline cũng hỗ trợ thực hiện hàm Lambda từ các hành động trong đường ống. Vì vậy, như đã thông báo trước, hãy tạo một hàm Lambda để triển khai API của bạn nhưng gọi nó từ Codepipeline thay vì CloudFormation.

Tư vấn trang này để biết chi tiết: http://docs.aws.amazon.com/codepipeline/latest/userguide/actions-invoke-lambda-function.html

Các vấn đề liên quan