すべてのプロダクト
Search
ドキュメントセンター

関数

最終更新日: Mar 18, 2020

Resource Orchestration Service は、スタックの管理に役立つ複数の組み込み関数が用意されています。リソースと出力を指定するときは、組み込み関数を使用できます。

組み込み関数は、Fn :: Base64、Fn :: FindInMap、Fn :: GetAtt、Fn :: Join、Fn :: Select、Ref、Fn :: GetAZs、Fn :: Replace、Fn :: Split、Fn :: Equals、Fn :: And、Fn :: Or、Fn :: Not、Fn :: If、Fn :: ListMerge、Fn :: GetJsonValue、および Fn :: MergeMapToList。

Fn::Base64

組み込み関数 Fn::Base64 は、入力された文字列の Base64 でエンコードされた結果を返します。

ステートメント

  1. "Fn::Base64" : stringToEncode

パラメーター

stringToEncode: Base64 でエンコードされる文字列。

戻り値

Base64 の元の文字列。

  1. "Fn::Base64" : "string to encode"

Fn::FindInMap

組み込み関数 Fn::FindInMap は、マッピングで定義されている二重層マッピングのキーに対応する値を返します。

ステートメント

  1. "Fn::FindInMap" : [ "MapName", "TopLevelKey", "SecondLevelKey"]

パラメーター

MapName: マッピングで定義されたマッピング ID。キーと値を含みます。

TopLevelKey: 値がキー/値ペアリストである第 1 レベルのキー。

SecondLevelKey: 値が文字列または数字である第 2 レベルのキー。

戻り値

SecondLevelKey に割り当てられた値。

次の例は、Fn::FindInMap 使用方法を示しています。

次の例では、WebServer いう名前のリソースを作成するときにイメージ Id 属性を指定する必要があります。Mappings は、リージョン によって区別されたイメージ Id マッピングを記述します。パラメータには、テンプレートユーザーが指定する必要がある領域が記述されています。Fn::FindInMap は、テンプレートユーザーによって指定された領域に従って、RegionMap 内の対応するイメージ Id マッピングを検索します。次に、マッピングで 32 に対応するイメージ Id を見つけます。

  • MapName は自由に設定できます。この例では"RegionMap"です。

  • TopLevelKey は、この例では{"Ref": "regionParam"}を使用して決定されるスタックを作成するリージョンに設定されます。

  • SecondLevelKey は予想されるアーキテクチャに設定されています。この例では"32"です。

  1. {
  2. "ROSTemplateFormatVersion": "2015-09-01",
  3. "Parameters": {
  4. "regionParam": {
  5. "Description": " Select the region for creating an ECS",
  6. "Type": "String",
  7. "AllowedValues": ["hangzhou", "beijing"]
  8. }
  9. },
  10. "Mappings" : {
  11. "RegionMap" : {
  12. "hangzhou" : { "32" : "m-25l0rcfjo", "64" : "m-25l0rcfj1" },
  13. "beijing" : { "32" : "m-25l0rcfj2", "64" : "m-25l0rcfj3" }
  14. }
  15. },
  16. "Resources": {
  17. "WebServer": {
  18. "Type": "ALIYUN::ECS::Instance",
  19. "Properties": {
  20. "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "regionParam" }, "32"]},
  21. "InstanceType": "ecs.t1.small",
  22. "SecurityGroupId": "sg-25zwc3se0",
  23. "ZoneId": "cn-beijing-b",
  24. "Tags": [{
  25. "Key": "key1",
  26. "Value": "value1"
  27. },{
  28. "Key": "key2",
  29. "Value": "value2"
  30. }
  31. ]
  32. }
  33. }
  34. }
  35. }

サポートされている関数

Fn::FindInMap 関数では、次の関数を使用できます。

  • Fn::FindInMap

  • Ref

Fn::GetAtt

組み込み関数 Fn::GetAtt は、リソースの属性値を返します。

ステートメント

  1. "Fn::GetAtt": [ "resourceID", "attributeName" ]

パラメーター

resourceID: ターゲットリソースの ID。

attributeName: ターゲットリソースの属性名。

戻り値

属性値。

この例では、返されたリソース ID は MyEcsInstance のイメージ Id 属性です。

  1. "Fn::GetAtt" : [ "MyEcsInstance" , "ImageID" ]

Fn::Join

組み込み関数 Fn::Join は、特定の区切り文字を使用して区切られた値のグループを結合します。

ステートメント

  1. { "Fn::Join" : [ "delimiter", [ "string1", "string2", ... ] }

パラメータ

delimiter: セパレータ。区切り記号は空白のままにして、すべての値が直接結合されるようにすることができます。

[ "string1", "string2", ... ]: 結合された値のリスト。

戻り値

結合された文字列。

  1. "Fn::Join" : [ ",", [ "a", "b", "c" ] ]

戻り値: "a,b,c".

サポートされている関数

  • Fn::Base64

  • Fn::GetAtt

  • Fn::Join

  • Fn::Select

  • Ref

Fn::Select

組み込み関数 Fn::Select は、データ要素リスト内の単一のデータ要素をインデックスを通じて返します。

ステートメント

データ要素リストは配列です。

  1. "Fn::Select" : [ "index", [ "value1", "value2", ... ] ]

データ要素リストはマッピングテーブルです。

  1. "Fn::Select" : [ "index", { "key1": "value1", ... } ]

パラメーター

index: 検索されるデータ要素のインデックス。データ要素リストが配列の場合、インデックスは 0 から N-1 の間の値になります(N は配列内の要素の量を示します)。データ要素リストがマッピングテーブルである場合、インデックスはマッピングテーブル内のキーであります。

対応する index の値が見つからない場合、システムは空の文字列を返します。

戻り値

選択されたデータ要素。

データ要素リストが配列の場合は、次のように編集します。

  1. { "Fn::Select" : [ "1", [ "apples", "grapes", "oranges", "mangoes" ] ] }

この例で返される値は"grapes"です。

データ要素リストがマッピングテーブルの場合は、次のように編集します。

  1. { "Fn::Select" : [ "key1", [ "key1": "grapes", "key2": "mangoes" ] ] }

この例で返される値は"grapes"です。

データ要素リストが CommaDelimitedList の場合は、次のように編集します。

  1. "Parameters" : {
  2. "userParam": {
  3. "Type": "CommaDelimitedList",
  4. "Default": "10.0.100.0/24, 10.0.101.0/24, 10.0.102.0/24"
  5. }
  6. }
  7. "Resources": {
  8. "resourceID": {
  9. "Properties": {
  10. "CidrBlock": { "Fn::Select" : [ "0", {"Ref": "userParam"} ] }
  11. }
  12. }
  13. },

サポートされている関数

Fn::Select インデックス値の場合は、Ref 関数を使用できます。

オブジェクトの Fn::Select リストでは、次の機能を使用できます。

  • Fn::Base64

  • Fn::FindInMap

  • Fn::GetAtt

  • Fn::Join

  • Fn::Select

  • Ref

Ref

組み込み関数 Ref は、指定されたパラメーターまたはリソースの値を返します。

指定されたパラメータがリソース ID の場合、システムはリソースの値を返します。そうでない場合、システムは指定されたパラメータをパラメータとみなし、パラメータ値を返そうとします。

ステートメント

  1. "Ref" : "logicalName"

パラメーター

logicalName: 参照を作成するリソースまたはパラメータの論理名。

戻り値

リソースまたはパラメータの値。

次の例は、Ref 関数を使用して、WebServer の RegionMap のリージョンパラメータとして regionParam を指定する方法を示しています。

  1. {
  2. "ROSTemplateFormatVersion": "2015-09-01",
  3. "Parameters": {
  4. "regionParam": {
  5. "Description": " Select the region for creating an ECS",
  6. "Type": "String",
  7. "AllowedValues": ["hangzhou", "beijing"]
  8. }
  9. },
  10. "Mappings" : {
  11. "RegionMap" : {
  12. "hangzhou" : { "32" : "m-25l0rcfjo", "64" : "m-25l0rcfj1" },
  13. "beijing" : { "32" : "m-25l0rcfj2", "64" : "m-25l0rcfj3" }
  14. }
  15. },
  16. "Resources": {
  17. "WebServer": {
  18. "Type": "ALIYUN::ECS::Instance",
  19. "Properties": {
  20. "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "regionParam" }, "32"]},
  21. "InstanceType": "ecs.t1.small",
  22. "SecurityGroupId": "sg-25zwc3se0",
  23. "ZoneId": "cn-beijing-b",
  24. "Tags": [{
  25. "Key": "tiantt",
  26. "Value": "ros"
  27. },{
  28. "Key": "tiantt1",
  29. "Value": "ros1"
  30. }
  31. ]
  32. }
  33. }
  34. }
  35. }

サポートされている関数

Ref 関数では関数は使用できません。文字列は、リソースの論理 ID として指定する必要があります。

Fn::GetAZs

組み込み関数 Fn::GetAZs は、指定されたリージョンの利用可能なゾーンリストを返します。

ステートメント

  1. "Fn::GetAZs": "region"

パラメーター

region: リージョン ID です。

戻り値

指定されたリージョンの下にある使用可能なゾーンのリスト。

この例では、ECS インスタンスが指定されたリージョンの最初に使用可能なゾーンに作成されます。

  1. {
  2. "ROSTemplateFormatVersion" : "2015-09-01",
  3. "Resources" : {
  4. "WebServer": {
  5. "Type": "ALIYUN::ECS::Instance",
  6. "Properties": {
  7. "ImageId" : "centos7u2_64_40G_cloudinit_20160728.raw",
  8. "InstanceType": "ecs.n1.tiny",
  9. "SecurityGroupId": "sg-2zedcm7ep5quses05fs4",
  10. "Password": "Ros12345",
  11. "AllocatePublicIP": true,
  12. "InternetChargeType": "PayByTraffic",
  13. "InternetMaxBandwidthIn": 100,
  14. "InternetMaxBandwidthOut": 100,
  15. "SystemDiskCategory": "cloud_efficiency",
  16. "IoOptimized": "optimized",
  17. "ZoneId": {"Fn::Select": ["0", {"Fn::GetAZs": {"Ref": "ALIYUN::Region"}}]}
  18. }
  19. }
  20. },
  21. "Outputs": {
  22. "InstanceId": {
  23. "Value" : {"Fn::GetAtt": ["WebServer","InstanceId"]}
  24. },
  25. "PublicIp": {
  26. "Value" : {"Fn::GetAtt": ["WebServer","PublicIp"]}
  27. }
  28. }
  29. }

サポートされている関数

  • Fn::Base64

  • Fn::FindInMap

  • Fn::GetAtt

  • Fn::Join

  • Fn::Select

  • Ref

Fn::Replace

組込み関数 Fn::Replace は、文字列内の指定されたサブストリングを新しいサブストリングに置き換えます。

ステートメント

  1. { "Fn::Replace" : [ {"object_key": "object_value"}, "object_string"]

パラメーター

{"object_key": "object_value"}:

  • object_key: 書き換え前の文字列
  • object_value: 書き換え後の文字列

object_string: object_keyが置き換えられるターゲット文字列。

戻り値

置換後の文字列。

次の例は、UserData 内の指定されたスクリプトの"print""echo"で置き換える例です。

  1. {
  2. "ROSTemplateFormatVersion" : "2015-09-01",
  3. "Resources" : {
  4. "WebServer": {
  5. "Type": "ALIYUN::ECS::Instance",
  6. "Properties": {
  7. "ImageId" : "centos_7_2_64_40G_base_20170222.vhd",
  8. "InstanceType": "ecs.n1.medium",
  9. "SecurityGroupId": "sg-94q49gota",
  10. "Password": "MytestPassword1234",
  11. "IoOptimized": "optimized",
  12. "VSwitchId": "vsw-94vdvonyi",
  13. "VpcId": "vpc-949uzr8c9",
  14. "SystemDiskCategory": "cloud_ssd",
  15. "UserData": {"Fn::Replace": [{"print": "echo"},
  16. {"Fn::Join": ["\\n", [
  17. "#!/bin/sh",
  18. "mkdir ~/test_ros",
  19. "print hello > ~/1.txt"
  20. ]]}]}
  21. }
  22. }
  23. },
  24. "Outputs": {
  25. "InstanceId": {
  26. "Value" : {"Fn::GetAtt": ["WebServer","InstanceId"]}
  27. },
  28. "PublicIp": {
  29. "Value" : {"Fn::GetAtt": ["WebServer","PublicIp"]}
  30. }
  31. }
  32. }

サポートされている関数

  • Fn::Base64

  • Fn::GetAtt

  • Fn::Join

  • Fn::Select

  • Ref

Fn::Split

組み込み関数 Fn::Split は、指定された区切り文字列を分割し、すべての分割で構成されるリストを返します。

ステートメント

  1. "Fn::Split" : [ "delim", "original_string" ]

パラメーター

delim: コマス(、)、セミコロン(;)、\n、\t などの区切り文字。

original_string: 分割される文字列。

戻り値

すべての分割文字列で構成されるリスト。

メタデータリストが配列の場合は、次のように編集します。

  1. {"Fn::Split": [";", "foo; bar; achoo"]}

返される値は["foo", " bar", "achoo "]です。

次のテンプレートで、Fn::Split を使用して InstanceIds を分割します。

  1. "Parameters" : {
  2. "InstanceIds": {
  3. "Type": "String",
  4. "Default": "instane1_id,instance2_id,instance2_id"
  5. }
  6. },
  7. "Resources": {
  8. "resourceID": {
  9. "Type": "ALIYUN::SLB::BackendServerAttachment":
  10. "Properties": {
  11. "BackendServerList": { "Fn::Split" : [ ",", {"Ref": "InstanceIds"} ] }
  12. }
  13. }
  14. }

サポートされている関数

  • Fn::Base64

  • Fn::FindInMap

  • Fn::GetAtt

  • Fn::Join

  • Fn::Select

  • Fn::Replace

  • Fn::GetAZs

  • Fn::If

  • Ref

Fn::Equals

Fn::Equals は 2 つの値を比較します。2 つの値が等しい場合は、trueを返します。2 つの値が等しくなければ、falseを返します。

ステートメント

  1. {"Fn::Equals": ["value_1", "value_2"]}

パラメーター

value: 比較される任意の型の値。

戻り値

trueまたはfalseです。

条件で条件を定義するには、Fn::Equals を使用します。

  1. {
  2. "ROSTemplateFormatVersion" : "2015-09-01",
  3. "Parameters":{
  4. "EnvType":{
  5. "Default":"pre",
  6. "Type":"String"
  7. }
  8. },
  9. "Conditions": {
  10. "TestEqualsCond": {"Fn::Equals": ["prod", {"Ref": "EnvType"}]}
  11. }
  12. }

サポートされている関数

  • Fn::Or

  • Fn::Not

  • Fn::Equals

  • Fn::FindInMap

  • Fn::And

  • Ref

Fn::And

Fn::And は、AND 演算子を示します。少なくとも 2 つの条件が含まれています。指定されたすべての条件が真であると計算された場合、trueが返されます。いずれかの条件が false として計算された場合、falseが返されます。

ステートメント

  1. {"Fn::And": ["condition", {...}]}

パラメーター

condition: 計算されるべき条件。

戻り値

trueまたはfalseです。

条件で条件を定義するには、Fn::And を使用します。

  1. {
  2. "ROSTemplateFormatVersion" : "2015-09-01",
  3. "Parameters":{
  4. "EnvType":{
  5. "Default":"pre",
  6. "Type":"String"
  7. }
  8. },
  9. "Conditions": {
  10. "TestEqualsCond": {"Fn::Equals": ["prod", {"Ref": "EnvType"}]},
  11. "TestAndCond": {"Fn::And": ["TestEqualsCond", {"Fn::Equals": ["pre", {"Ref": "EnvType"}]}]}
  12. }
  13. }

サポートされている関数

  • Fn::Or

  • Fn::Not

  • Fn::Equals

  • Fn::FindInMap

  • Fn::And

  • Ref

Fn::Or

この関数は、OR 演算子を示します。 少なくとも2つの条件が含まれています。 指定された条件が真であると計算された場合、 trueが返されます。 すべての条件がfalseと計算された場合、 falseが返されます。

ステートメント

  1. {"Fn::Or": ["condition", {...}]}

パラメーター

condition: 計算される条件。

戻り値

true または false

条件を定義するには、Fn :: Or を使用します。

  1. {
  2. "ROSTemplateFormatVersion" : "2015-09-01",
  3. "Parameters":{
  4. "EnvType":{
  5. "Default":"pre",
  6. "Type":"String"
  7. }
  8. },
  9. "Conditions": {
  10. "TestEqualsCond": {"Fn::Equals": ["prod", {"Ref": "EnvType"}]},
  11. "TestOrCond": {"Fn::And": ["TestEqualsCond", {"Fn::Equals": ["pre", {"Ref": "EnvType"}]}]}
  12. }
  13. }

サポートされている関数

  • Fn::Or

  • Fn::Not

  • Fn::Equals

  • Fn::FindInMap

  • Fn::And

  • Ref

Fn::Not

この関数は、NOT 演算子を示します。 条件が真でない場合、 trueが返されます。 条件が真である場合、 falseが返されます。

ステートメント

  1. {"Fn::Not": "condition"}

パラメーター

condition: 計算されるべき条件。

戻り値

true または false.

条件を定義するには、Fn::Not を使用します。

  1. {
  2. "ROSTemplateFormatVersion" : "2015-09-01",
  3. "Parameters":{
  4. "EnvType":{
  5. "Default":"pre",
  6. "Type":"String"
  7. }
  8. },
  9. "Conditions": {
  10. "TestNotCond": {"Fn::Not": {"Fn::Equals": ["pre", {"Ref": "EnvType"}]}}
  11. }
  12. }

サポートする関数

  • Fn::Or

  • Fn::Not

  • Fn::Equals

  • Fn::FindInMap

  • Fn::And

  • Ref

Fn::If

テンプレートの Resources および Outputs 属性値は、組み込み関数 Fn::If をサポートしています。 指定した条件が true と計算された場合、値が返されます。 指定された条件が false として計算された場合は、別の値が返されます。 戻り値として疑似パラメータ ALIYUN :: NoValueを使用して、対応する属性を削除することができます。

ステートメント

  1. {"Fn::If": ["condition_name", "value_if_true", "value_if_false"]}

パラメーター

condition_name:条件の中の条件の名前です。条件は条件名によって参照されます。

value_if_true:指定された条件が真であると計算された場合、この値が返されます。

value_if_false:指定された条件がfalseとして計算された場合、この値が返されます。

次の例は、入力パラメータに基づいてデータディスクを作成するかどうかを決定する方法を示しています。

  1. {
  2. "ROSTemplateFormatVersion":"2015-09-01",
  3. "Parameters":{
  4. "EnvType":{
  5. "Default":"pre",
  6. "Type":"String"
  7. }
  8. },
  9. "Conditions":{
  10. "CreateDisk":{
  11. "Fn::Equals":[
  12. "prod",
  13. {
  14. "Ref":"EnvType"
  15. }
  16. ]
  17. }
  18. },
  19. "Resources":{
  20. "WebServer":{
  21. "Type":"ALIYUN::ECS::Instance",
  22. "Properties":{
  23. "DiskMappings":{
  24. "Fn::If":[
  25. "CreateDisk",
  26. [
  27. {
  28. "Category":"cloud_efficiency",
  29. "DiskName":"FirstDataDiskName",
  30. "Size":40
  31. },
  32. {
  33. "Category":"cloud_ssd",
  34. "DiskName":"SecondDataDiskName",
  35. "Size":40
  36. }
  37. ],
  38. {
  39. "Ref":"ALIYUN::NoValue"
  40. }
  41. ]
  42. },
  43. "VpcId":"vpc-2zew9pxh2yirtzqxdboi1",
  44. "SystemDiskCategory":"cloud_efficiency",
  45. "SecurityGroupId":"sg-2zece6wcqriejf1v91sr",
  46. "SystemDiskSize":40,
  47. "ImageId":"centos_6_8_64_40G_base_20170222.vhd",
  48. "IoOptimized":"optimized",
  49. "VSwitchId":"vsw-2zed9txvy7h2srqo6jmgq",
  50. "InstanceType":"ecs.n1.medium"
  51. }
  52. }
  53. },
  54. "Outputs":{
  55. "InstanceId":{
  56. "Value":{
  57. "Fn::GetAtt":[
  58. "WebServer",
  59. "InstanceId"
  60. ]
  61. }
  62. },
  63. "ZoneId":{
  64. "Value":{
  65. "Fn::GetAtt":[
  66. "WebServer",
  67. "ZoneId"
  68. ]
  69. }
  70. }
  71. }
  72. }

サポートする関数

  • Fn::Or

  • Fn::Not

  • Fn::Equals

  • Fn::FindInMap

  • Fn::And

  • Ref

Fn::ListMerge

この関数は、複数のリストを1つにマージします。

ステートメント

  1. {"Fn::ListMerge": [[list_1_item_1, list_1_imte_2, ...], [list_2_item_1, list_2_imte_2, ...]]}

パラメーター

[list_1_item_1, list_1_imte_2, ...]: マージする最初のリスト

[list_2_item_1, list_2_imte_2, ...]: 最初のリストにマージされるリスト

次の例は、2 つの ECS インスタンスグループを同じ Server Load Balancer インスタンスに接続する方法を示しています。

  1. {
  2. "ROSTemplateFormatVersion" : "2015-09-01",
  3. "Resources" : {
  4. "LoadBalancer": {
  5. "Type": "ALIYUN::SLB::LoadBalancer",
  6. "Properties": {
  7. "LoadBalancerName": "ros",
  8. "AddressType": "internet",
  9. "InternetChargeType": "paybybandwidth",
  10. }
  11. },
  12. "BackendServer1": {
  13. "Type": "ALIYUN::ECS::InstanceGroup",
  14. "Properties": {
  15. "ImageId" : "m-2ze9uqi7wo61hwep5q52",
  16. "InstanceType": "ecs.t1.small",
  17. "SecurityGroupId": "sg-2ze8yxgempcdsq3iucsi",
  18. "MaxAmount": 1,
  19. "MinAmount": 1
  20. }
  21. },
  22. "BackendServer2": {
  23. "Type": "ALIYUN::ECS::InstanceGroup",
  24. "Properties": {
  25. "ImageId" : "m-2ze9uqi7wo61hwep5q52",
  26. "InstanceType": "ecs.t1.small",
  27. "SecurityGroupId": "sg-2ze8yxgempcdsq3iucsi",
  28. "MaxAmount": 1,
  29. "MinAmount": 1
  30. }
  31. },
  32. "Attachment": {
  33. "Type": "ALIYUN::SLB::BackendServerAttachment",
  34. "Properties": {
  35. "LoadBalancerId": {"Ref": "LoadBalancer"},
  36. "BackendServerList": { "Fn::ListMerge": [
  37. {"Fn::GetAtt": ["BackendServer1", "InstanceIds"]},
  38. {"Fn::GetAtt": ["BackendServer2", "InstanceIds"]}
  39. ]
  40. }
  41. }
  42. }
  43. }
  44. }

サポートする関数

  • Fn::Base64

  • Fn::GetAtt

  • Fn::Join

  • Fn::Select

  • Ref

  • Fn::Join

  • Fn::If

Fn::GetJsonValue

この関数は、JSON 文字列を解決し、最初のレイヤーで指定された Key の値を取得します。

ステートメント

  1. {"Fn::GetJsonValue": ["key", "json_string"]}

パラメーター

key: キー値

json_string: 解決される JSON 文字列。

次の例は、WebServer インスタンスが UserData を実行し、JSON 文字列を返すと、WebServer2 インスタンスが文字列から対応する値を取得することを示しています。

  1. {
  2. "ROSTemplateFormatVersion" : "2015-09-01",
  3. "Resources" : {
  4. "WebServer": {
  5. "Type": "ALIYUN::ECS::Instance",
  6. "Properties": {
  7. "ImageId" : "m-2ze45uwova5fedlufpz7",
  8. "InstanceType": "ecs.n1.medium",
  9. "SecurityGroupId": "sg-2ze7pxymaix640qrg3vu",
  10. "Password": "Wenqiao1234",
  11. "IoOptimized": "optimized",
  12. "VSwitchId": "vsw-2zei67xd9nhcqxzec7qt7",
  13. "VpcId": "vpc-2zevx9ios1rszqv0azijb",
  14. "SystemDiskCategory": "cloud_ssd",
  15. "UserData": {"Fn::Join": ["", [
  16. "#!/bin/sh\n",
  17. "mkdir ~/test_ros\n",
  18. "print hello > ~/1.txt\n",
  19. "Fn::GetAtt": ["WaitConHandle", "CurlCli"],
  20. "\n",
  21. "Fn::GetAtt": ["WaitConHandle", "CurlCli"],
  22. " -d '{\\"id\\" : \\"1\\", \\"data\\": [\\"1111\\", \\"2222\\"]}'\n"
  23. ]]},
  24. "PrivateIpAddress": "192.168.2.110",
  25. "HostName": "userdata-1"
  26. }
  27. },
  28. "WaitConHandle": {
  29. "Type": "ALIYUN::ROS::WaitConditionHandle"
  30. },
  31. "WaitCondition": {
  32. "Type": "ALIYUN::ROS::WaitCondition",
  33. "Properties": {
  34. "Handle": {"Ref": "WaitConHandle"},
  35. "Timeout": 900
  36. }
  37. },
  38. "WebServer2": {
  39. "Type": "ALIYUN::ECS::Instance",
  40. "Properties": {
  41. "ImageId" : "m-2ze45uwova5fedlufpz7",
  42. "InstanceType": "ecs.n1.medium",
  43. "SecurityGroupId": "sg-2ze7pxymaix640qrg3vu",
  44. "Password": "Wenqiao1234",
  45. "IoOptimized": "optimized",
  46. "VSwitchId": "vsw-2zei67xd9nhcqxzec7qt7",
  47. "VpcId": "vpc-2zevx9ios1rszqv0azijb",
  48. "SystemDiskCategory": "cloud_ssd",
  49. "UserData":
  50. {"Fn::Join": ["", [
  51. "#!/bin/sh\n",
  52. "mkdir ~/test_ros\n",
  53. "echo hello > ~/1.txt\n",
  54. "server_1_token=",
  55. {"Fn::GetJsonValue": ["1", { "Fn::GetAtt": ["WaitCondition", "Data"]}]},
  56. "\n"
  57. ]]},
  58. "PrivateIpAddress": "192.168.2.111",
  59. "HostName": "userdata-2"
  60. }
  61. },
  62. },
  63. "Outputs": {
  64. "InstanceId": {
  65. "Value" : {"Fn::GetAtt": ["WebServer","InstanceId"]}
  66. },
  67. "PublicIp": {
  68. "Value" : {"Fn::GetAtt": ["WebServer","PublicIp"]}
  69. }
  70. }
  71. }

サポートする関数

  • Fn::Base64

  • Fn::GetAtt

  • Fn::Join

  • Fn::Select

  • Ref

  • Fn::Join

  • Fn::If

Fn::MergeMapToList

この関数は、複数のマッピングをリストにマージします。

ステートメント

  1. {"Fn::MergeMapToList": [{"key_1": ["key_1_item_1", "key_1_item_2", ...]}, {"key_2":["key_2_item_1", "key_2_item_2", ...]}, ... ]}

パラメーター

{“ key_1 “:[“ key_1_item_1 “、” key_1_item_2 “、…]}:マージする最初のマッピングでは、key_1の値はリストでなければなりません。 key_1 はマージされたマッピングのリスト内の各マッピングのキーです。 key_1 の値は、第1のマッピングでは key_1_item_1、第2のマッピングでは key_1_item_2 などです。 マージされたマッピングの最終リストの長さは、マージされるすべてのマッピングで最長のリストの長さです。 key_y リストが短い場合、リストの最後の要素が繰り返され、リストが最も長くなります。

{“ key_2 “:[“ key_2_item_1 “、” key_2_item_2 “、…]}:マージする2番目のマッピングでは、key_2 の値はリストでなければなりません。 key_2 はマージされたリストの各マッピングのキーです。 key_2の値は、第1のマッピングでは key_2_item_1、第2のマッピングでは key_2_item_2などです。

次の例は、3 つのマッピングをマージする方法を示しています。 各マッピングのキー値に対応するリストの長さは同じです。

  1. {
  2. "Fn::MeregMapToList": [
  3. {"key_1": ["kye_1_item_1", "kye_1_item_2"]},
  4. {"key_2": ["kye_2_item_1", "kye_2_item_2"]},
  5. {"key_3": ["kye_3_item_1", "kye_3_item_2"]}
  6. ]
  7. }

結果は以下となります。

  1. [
  2. {
  3. "key_1": "kye_1_item_1",
  4. "key_2": "kye_2_item_1",
  5. "key_3": "kye_3_item_1"
  6. },
  7. {
  8. "key_1": "kye_1_item_2",
  9. "key_2": "kye_2_item_2",
  10. "key_3": "kye_3_item_2"
  11. }
  12. ]

次の例では、各マッピングのキー値に対応するリストの長さが異なります。

  1. {
  2. "Fn::MeregMapToList": [
  3. {"key_1": ["kye_1_item_1", "kye_1_item_2"]},
  4. {"key_2": ["kye_2_item_1", "kye_2_item_2", "key_2_item_3"]},
  5. {"key_3": ["kye_3_item_1", "kye_3_item_2"]}
  6. ]
  7. }

結果は以下となります。

  1. [
  2. {
  3. "key_1": "kye_1_item_1",
  4. "key_2": "kye_2_item_1",
  5. "key_3": "kye_3_item_1"
  6. },
  7. {
  8. "key_1": "kye_1_item_2",
  9. "key_2": "kye_2_item_2",
  10. "key_3": "kye_3_item_2"
  11. },
  12. {
  13. "key_1": "kye_1_item_2",
  14. "key_2": "kye_2_item_3",
  15. "key_3": "kye_3_item_2"
  16. }
  17. ]

次の例では、Web サーバーで作成されたすべてのインスタンスを1台のサーバー負荷分散装置の Virtual Server グループに追加します。

  1. {
  2. "ROSTemplateFormatVersion": "2015-09-01",
  3. "Resources": {
  4. "WebServer": {
  5. "Type": "ALIYUN::ECS::InstanceGroupClone",
  6. "Properties": {
  7. "SourceInstanceId": "i-xxxxx",
  8. "Password": "Hello1234",
  9. "MinAmount": 1,
  10. "MaxAmount": 1
  11. }
  12. },
  13. "CreateVServerGroup": {
  14. "Type": "ALIYUN::SLB::VServerGroup",
  15. "Properties": {
  16. "LoadBalancerId": "lb-yyyy",
  17. "VServerGroupName": "VServerGroup-test",
  18. "BackendServers": {
  19. "Fn::MergeMapToList": [
  20. {"Port": [6666, 9090, 8080]},
  21. {"ServerId": {"Fn::GetAtt": ["WebServer", "InstanceIds"]}},
  22. {"Weight": [20, 100]}
  23. ]
  24. }
  25. }
  26. }
  27. }
  28. }

サポートする関数

  • Fn::Base64

  • Fn::GetAtt

  • Fn::Join

  • Fn::Select

  • Ref

  • Fn::Join

  • Fn::If

  • Fn::ListMerge

  • Fn::GetJsonValue