傳遞資料到應用程式 - AWS OpsWorks

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

傳遞資料到應用程式

重要

該 AWS OpsWorks Stacks 服務於 2024 年 5 月 26 日終止使用壽命,並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載移轉至其他解決方案。如果您對移轉有任何疑問,請透過 AWS Re: post 或透過進AWS 階 Support 與 AWS Support 團隊聯絡。

通常將資料 (例如鍵/值對) 傳遞給伺服器上的應用程式很有用。若要執行此作業,請使用自訂 JSON 將資料新增至堆疊。 AWS OpsWorks 堆疊會針對每個生命週期事件將資料新增至每個執行個體的節點物件。

但是,請注意,雖然配方可透過 Chef 屬性從節點物件取得自訂 JSON 資料,應用程式則無法。其中一個將自訂 JSON 資料傳遞給一或多個應用程式的方式,便是實作自訂配方,從 node 物件擷取資料,然後將資料寫入應用程式可讀取的檔案中。本主題中的範例示範如何將資料寫入 YAML 檔案,但您可以針對其他格式 (例如 JSON 或 XML) 使用相同的基本方法。

若要將鍵/值資料傳遞給堆疊的執行個體,請新增如下的自訂 JSON 至堆疊。如需如何將自訂 JSON 新增至堆疊的詳細資訊,請參閱使用自訂 JSON

{ "my_app_data": { "app1": { "key1": "value1", "key2": "value2", "key3": "value3" }, "app2": { "key1": "value1", "key2": "value2", "key3": "value3" } } }

範例假設您有兩個應用程式,名稱分別為 app1app2,並且每一個皆有三個資料值。隨附的配方假設您使用應用程式的短名識別關聯資料。其他名稱則為任意。如需應用程式短名的詳細資訊,請參閱設定

下列範例中的配方示範如何為每個應用程式,從 deploy 屬性擷取資料,然後將其置放在 .yml 檔案中。配方假設您的自訂 JSON 包含每個應用程式的資料。

node[:deploy].each do |app, deploy| file File.join(deploy[:deploy_to], 'shared', 'config', 'app_data.yml') do content YAML.dump(node[:my_app_data][app].to_hash) end end

deploy 屬性包含每個應用程式的屬性,以應用程式的短名命名。每個應用程式屬性皆包含一組屬性,代表應用程式的各種資訊。此範例使用應用程式的部署目錄,以 [:deploy][:app_short_name][:deploy_to] 屬性代表。如需 [:deploy] 的詳細資訊,請參閱deploy 屬性

針對每個 deploy 中的應用程式,配方會執行下列作業:

  1. 在應用程式的 app_data.yml 目錄中的 shared/config 子目錄內,建立名為 [:deploy_to] 的檔案。

    如需「 AWS OpsWorks 堆疊」如何安裝 app 的詳細資訊,請參閱部署配方

  2. 將應用程式的自訂 JSON 值轉換成 YAML,並將格式化後的資料寫入 app_data.yml

將資料傳遞到應用程式
  1. 將應用程式新增至堆疊,然後記下其短名。如需詳細資訊,請參閱 新增應用程式

  2. 使用應用程式的資料,將自訂 JSON 新增至 deploy 屬性,如先前所述。如需如何將自訂 JSON 新增至堆疊的詳細資訊,請參閱使用自訂 JSON

  3. 建立技術指南,並將程式碼以先前範例做為基礎的配方新增至其中,針對您在自訂 JSON 中使用的屬性名稱,根據需求進行修改。如需如何建立技術指南和配方的詳細資訊,請參閱技術指南和配方。若您已有此堆疊的自訂技術指南,您也可以將配方新增至現有的技術指南,或是將程式碼新增至現有的部署配方。

  4. 在您的堆疊上安裝技術指南。如需詳細資訊,請參閱 安裝自訂技術指南

  5. 將配方指派給應用程式伺服器層的部署生命週期事件。 AWS OpsWorks 然後,堆棧將在啟動後在每個新實例上運行配方。如需詳細資訊,請參閱 執行配方

  6. 部署應用程式,同時也會安裝包含您資料的堆疊組態和部署屬性。

注意

若資料檔案必須在應用程式部署前便存在,您也可以將配方指派給 layer 的安裝生命週期事件。該事件只會在執行個體完成開機後執行一次。不過, AWS OpsWorks Stacks 尚未建立部署目錄,因此您的方案應在建立資料檔案之前明確建立必要的目錄。以下範例明確建立應用程式的 /shared/config 目錄,然後在該目錄中建立資料檔案。

node[:deploy].each do |app, deploy| directory "#{deploy[:deploy_to]}/shared/config" do owner "deploy" group "www-data" mode 0774 recursive true action :create end file File.join(deploy[:deploy_to], 'shared', 'config', 'app_data.yml') do content YAML.dump(node[:my_app_data][app].to_hash) end end

若要載入資料,您可以使用看起來像是下列 Sinatra 程式碼的內容:

#!/usr/bin/env ruby # encoding: UTF-8 require 'sinatra' require 'yaml' get '/' do YAML.load(File.read(File.join('..', '..', 'shared', 'config', 'app_data.yml'))) End

您可以透過更新自訂 JSON 來隨時更新應用程式的資料值,如下所示。

更新應用程式資料
  1. 編輯自訂 JSON 以更新資料值。

  2. 再次部署應用程式,指示 AWS OpsWorks Stack 在堆疊的執行個體上執行部署方法。配方會使用已更新堆疊組態及部署屬性的屬性,因此您的自訂配方會使用目前的值更新資料檔案。