Tại sao không hình thành đám mây aws cài đặt các gói mà tôi chỉ định?


14

Tôi rất mới với các dịch vụ AWS. Tôi đang cố gắng sử dụng đội hình đám mây AWS và tôi đã tạo một mẫu. Mẫu không có lỗi và tôi có thể tạo máy bằng cách sử dụng.

Nhưng tôi đã thêm một số cấu hình trong mẫu để nó cài đặt tomcat, git và những thứ khác trong khi khởi động. Nhưng điều đó không xảy ra với tôi.

Đây là một phần của mã tôi đã sử dụng để cài đặt tomcat:

"Resources": {
    "Tomcat": {
        "Type": "AWS::EC2::Instance",
        "Metadata": {
            "AWS::CloudFormation::Init": {
                "config": {
                    "packages": {
                        "apt": {
                            "tomcat6": [],
                            "git": [],
                        }
                    }
                }
            }
        },

Nhưng khi tôi đăng nhập vào máy thì tomcatcũng không gitđược cài đặt!

Cảm ơn trước.


Tôi giả sử từ các thẻ của bạn rằng đây là Ubuntu AMI?
mattdm

Bạn đã thử xóa "," sau "git": [] chưa? Nó không đúng về mặt cú pháp.
Edwin

Câu trả lời:


23

Tôi tin rằng vấn đề của bạn ở đây là sự nhầm lẫn xung quanh rằng cloud-init không giống như cfn-init.

  • cloud-init là công cụ khởi đầu như một phần của Ubuntu AWS AMIs cho phép giải thích thành phần dữ liệu người dùng EC2 của siêu dữ liệu cá thể. Amazon Linux cũng đã áp dụng công cụ này và xây dựng nó thành AMI của họ.

  • cfn-init là một phần của bộ công cụ khác có tên Tập lệnh trợ giúp CloudFormation được tạo bởi AWS cho Amazon Linux , có thể đọc một phần bổ sung có tên Metadatatrong mẫu CloudFormation của bạn.

Vì vậy, cả Ubuntu và Amazon Linux đều có các công cụ khởi tạo đám mây được cài đặt sẵn để truy cập dữ liệu người dùng, nhưng chỉ Amazon Linux mới có Tập lệnh trợ giúp CloudFormation được cài đặt sẵn, ví dụ cfn-init để truy cập Siêu dữ liệu CloudFormation.

Tuy nhiên, AWS không phân phối các gói mà bạn có thể sử dụng để đọc Siêu dữ liệu CloudFormation. Cụ thể, hãy xem mẫu này để biết cách bạn có thể sử dụng tập lệnh dữ liệu người dùng trên nền tảng đám mây để cài đặt python-setuptools, tải xuống Tập lệnh trợ giúp CloudFormation, cài đặt chúng bằng easy_install và sau đó gọi cfn-init.

Lưu ý: Có các bản phân phối hoặc AMI khác có thể hỗ trợ cloud-init hoặc cfn-init, nhưng tôi chỉ đề cập đến các trường hợp chung ở đây.


12

Bạn cần gọi cfn-init ( http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-init.html ) bên trong thuộc tính UserData của ví dụ:

{
    "Resources": {
        "Tomcat": {
            "Type": "AWS::EC2::Instance",
            "Metadata": {
                "AWS::CloudFormation::Init": {
                    "config": {
                        "packages": {
                            "apt": {
                                "tomcat6": [],
                                "git": []
                            }
                        }
                    }
                }
            },
            "Properties": {
                "UserData": {
                    "Fn::Base64": {
                        "Fn::Join": ["", [
                            "#!/bin/bash\n",
                            "/opt/aws/bin/cfn-init -s ", {
                                "Ref": "AWS::StackName"
                            },
                            "    -r Tomcat",
                            "    --region ", {
                                "Ref": "AWS::Region"
                            }, "\n"
                        ]]
                    }
                }
            }
        }
    }
}

Thuộc tính UserData được mã hóa Base64 và cho phép bạn chỉ định một tập lệnh sẽ được chạy khi khởi chạy cá thể. Tại đây, bạn có thể gọi cfn-init sẽ đọc CloudFormation :: init Metadata và thiết lập mọi thứ được chỉ định ở đó.

Ngoài ra, khi tạo CF Stack, bạn có thể muốn đi vào cài đặt nâng cao trên trang thứ hai (sau khi đưa ra các tham số) và đảm bảo rằng Rollback on error được đặt thành "Không". Theo cách đó, nếu tập lệnh cfn-init không thành công vì bất kỳ lý do gì bạn có thể ssh vào cá thể và kiểm tra tệp /var/log/cfn-init.log để biết thêm thông tin.


Tôi nghĩ rằng đây nên là câu trả lời được chấp nhận.
Erik van Brakel


-3
    "UserData"       : { "Fn::Base64" : { "Fn::Join" : ["", [
      "#!/bin/bash\n",
      "export DEBIAN_FRONTEND=noninteractive\n",
      "apt-get update && apt-get upgrade -y\n",
      "apt-get -y install python-setuptools\n",
      "easy_install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz\n",
      "/usr/local/bin/cfn-init --stack ", { "Ref":"AWS::StackName" }, " --resource <REPLACE_WITH_RESOURCENAME>", " --region ", { "Ref": "AWS::Region" }, "\n",

4
Tôi không hiểu ...
Pierre.Vriens
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.