範例 3:建立目錄 - AWS OpsWorks

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

範例 3:建立目錄

重要

AWS OpsWorks Stacks不再接受新客戶。現有客戶可以正常使用 OpsWorks 主控台、API、CLI 和 CloudFormation 資源,直到 2024 年 5 月 26 日為止,屆時他們將停止使用。為了為此轉換做好準備,我們建議您AWS Systems Manager盡快將堆疊轉換為。如需詳細資訊,請參閱 AWS OpsWorks Stacks壽命終止常見問題將應用程式移轉至AWS OpsWorks Stacks應用AWS Systems Manager程式管

當您在執行個體上安裝套件時,通常需要建立一些組態檔案並將它們放置在適當的目錄中。不過,這些目錄可能還不存在。您可能還需要建立資料、日誌檔等等的目錄。例如,您首先啟動用於大多數示例的 Ubuntu 系統,該目/srv錄沒有子目錄。如果您要安裝應用程式伺服器,您可能希望有資料檔案、日誌等等的 /srv/www/ 目錄,可能還有一些子目錄。下列配方在執行個體上建立 /srv/www/

directory "/srv/www/" do mode 0755 owner 'root' group 'root' action :create end

您使用 directory 資源在 Linux 和 Windows 系統上建立並設定目錄,但某些屬性的用法不盡相同。資源名稱是用於將資源的 path 屬性預設值,因此本範例會建立 /srv/www/ 並指定其 modeownergroup 屬性。

執行配方
  1. opsworks_cookbooks 中建立名為 createdir 的目錄,導覽至它。

  2. 初始化及設定 Test Kitchen (如範例 1:安裝套件中所述),並在 recipes 中新增 createdir 目錄。

  3. 將具有配方程式碼的 default.rb 檔案新增至技術指南的 recipes 子目錄。

  4. 執行 kitchen converge 以執行配方。

  5. 執行 kitchen login,導覽至 /srv 並驗證它是否有 www 子目錄。

  6. Run exit 返回到工作站,但保持執行個體執行。

注意

在執行個體中建立主目錄的相對目錄,使用 #{ENV['HOME']} 表示主目錄。例如,下列內容會建立 ~/shared 目錄。

directory "#{ENV['HOME']}/shared" do ... end

假設您想要建立更深的巢狀目錄,例如 /srv/www/shared。您可以修改前述配方,如下所示。

directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' action :create end
執行配方
  1. 以前述配方取代 default.rb 中的程式碼。

  2. kitchen converge 目錄執行 createdir

  3. 若要確認已確實建立目錄,請執行 kitchen login、導覽至 /srv/www,然後驗證它是否包含 shared 子目錄。

  4. 執行 kitchen destroy 關閉執行個體。

您會發現 kitchen converge 命令執行速度更快了。這是因為執行個體已在執行,所以不需要開機執行個體、安裝 Chef 等等。Test Kitchen 只是將更新的技術指南複製到執行個體,並啟動 Chef 執行。

現在再次執行 kitchen converge,這會在全新的執行個體中執行配方。您現在會看到下列結果。

Chef Client failed. 0 resources updated in 1.908125788 seconds [2014-06-20T20:54:26+00:00] ERROR: directory[/srv/www/shared] (createdir::default line 1) had an error: Chef::Exceptions::EnclosingDirectoryDoesNotExist: Parent directory /srv/www does not exist, cannot create /srv/www/shared [2014-06-20T20:54:26+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1) >>>>>> Converge failed on instance <default-ubuntu-1204>. >>>>>> Please see .kitchen/logs/default-ubuntu-1204.log for more details >>>>>> ------Exception------- >>>>>> Class: Kitchen::ActionFailed >>>>>> Message: SSH exited (1) for command: [sudo -E chef-solo --config /tmp/kitchen/solo.rb --json-attributes /tmp/kitchen/dna.json --log_level info] >>>>>> ----------------------

發生了什麼? 問題是,directory 資源預設一次只能建立一個目錄,無法建立目錄鏈。此配方之前可以運作是因為您在執行個體上執行的最初配方已建立 /srv/www,因此建立 /srv/www/shared 只會建立一個子目錄。

注意

當您執行 kitchen converge 時,請確定您知道您是在新的或現有的執行個體上執行您的配方。您可能會得到不同的結果。

若要建立子目錄鏈,請將 recursive 屬性新增至 directory 並將它設為 true。下列配方會在乾淨的執行個體上建立 /srv/www/shared 目錄。

directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end