cfndk 0.0.7 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +79 -0
  3. data/.gitignore +1 -1
  4. data/.rspec +2 -0
  5. data/.rspec_parallel +6 -0
  6. data/.simplecov +9 -0
  7. data/Gemfile +11 -1
  8. data/Gemfile.lock +815 -0
  9. data/README.md +269 -76
  10. data/bin/cfndk +3 -18
  11. data/cfndk.gemspec +15 -6
  12. data/docker/Dockerfile +8 -0
  13. data/docker/build.sh +3 -0
  14. data/docker/cfndk.sh +14 -0
  15. data/lib/cfndk.rb +36 -0
  16. data/lib/cfndk/change_set_command.rb +103 -0
  17. data/lib/cfndk/command.rb +125 -119
  18. data/lib/cfndk/config_file_loadable.rb +13 -0
  19. data/lib/cfndk/credential_provider_chain.rb +12 -42
  20. data/lib/cfndk/credential_resolvable.rb +10 -0
  21. data/lib/cfndk/diff.rb +38 -0
  22. data/lib/cfndk/global_config.rb +46 -0
  23. data/lib/cfndk/key_pair.rb +66 -14
  24. data/lib/cfndk/key_pair_command.rb +60 -0
  25. data/lib/cfndk/key_pairs.rb +22 -5
  26. data/lib/cfndk/logger.rb +12 -3
  27. data/lib/cfndk/stack.rb +427 -126
  28. data/lib/cfndk/stack_command.rb +128 -0
  29. data/lib/cfndk/stacks.rb +48 -22
  30. data/lib/cfndk/subcommand_help_returnable.rb +16 -0
  31. data/lib/cfndk/template_packager.rb +210 -0
  32. data/lib/cfndk/uuid.rb +10 -0
  33. data/lib/cfndk/version.rb +1 -1
  34. data/skel/cfndk.yml +4 -0
  35. data/spec/.gitignore +1 -0
  36. data/spec/cfndk_change_set_create_spec.rb +436 -0
  37. data/spec/cfndk_change_set_destroy_spec.rb +160 -0
  38. data/spec/cfndk_change_set_execute_spec.rb +179 -0
  39. data/spec/cfndk_change_set_report_spec.rb +107 -0
  40. data/spec/cfndk_change_set_spec.rb +37 -0
  41. data/spec/cfndk_create_spec.rb +504 -0
  42. data/spec/cfndk_destroy_spec.rb +148 -0
  43. data/spec/cfndk_keypiar_spec.rb +397 -0
  44. data/spec/cfndk_report_spec.rb +164 -0
  45. data/spec/cfndk_spec.rb +103 -0
  46. data/spec/cfndk_stack_create_spec.rb +814 -0
  47. data/spec/cfndk_stack_destroy_spec.rb +225 -0
  48. data/spec/cfndk_stack_report_spec.rb +181 -0
  49. data/spec/cfndk_stack_spec.rb +133 -0
  50. data/spec/cfndk_stack_update_spec.rb +553 -0
  51. data/spec/fixtures/big_vpc.yaml +533 -0
  52. data/spec/fixtures/empty_resource.yaml +2 -0
  53. data/spec/fixtures/iam.json +8 -0
  54. data/spec/fixtures/iam.yaml +38 -0
  55. data/spec/fixtures/iam_different.json +8 -0
  56. data/spec/fixtures/invalid_vpc.yaml +21 -0
  57. data/spec/fixtures/lambda_function/index.js +4 -0
  58. data/spec/fixtures/lambda_function/lambda_function.json +4 -0
  59. data/spec/fixtures/lambda_function/lambda_function.yaml +28 -0
  60. data/spec/fixtures/nested_stack.json +35 -0
  61. data/spec/fixtures/nested_stack.yaml +20 -0
  62. data/spec/fixtures/serverless_function/index.js +4 -0
  63. data/spec/fixtures/serverless_function/serverless_function.json +4 -0
  64. data/spec/fixtures/serverless_function/serverless_function.yaml +21 -0
  65. data/spec/fixtures/sg.json +8 -0
  66. data/spec/fixtures/sg.yaml +27 -0
  67. data/spec/fixtures/sg_different.yaml +22 -0
  68. data/spec/fixtures/stack.json +8 -0
  69. data/spec/fixtures/stack.template.json +39 -0
  70. data/spec/fixtures/stack.yaml +22 -0
  71. data/spec/fixtures/vpc.json +8 -0
  72. data/spec/fixtures/vpc.template.json +40 -0
  73. data/spec/fixtures/vpc.yaml +21 -0
  74. data/spec/fixtures/vpc_different.yaml +21 -0
  75. data/spec/spec_helper.rb +14 -0
  76. data/spec/support/aruba.rb +6 -0
  77. data/vagrant/Vagrantfile +89 -0
  78. metadata +259 -31
data/README.md CHANGED
@@ -1,13 +1,16 @@
1
1
  # AWS CloudFormation Development Kit
2
2
 
3
3
  This is easy operation/integration support tool for AWS CloudFormation.
4
+ This tool drives DevOps and Infrastructure as Code.
5
+
6
+ [![CircleCI](https://circleci.com/gh/Amakata/cfndk/tree/master.svg?style=svg)](https://circleci.com/gh/Amakata/cfndk/tree/master)
4
7
 
5
8
  このツールは、AWS CloudFromationのための簡単な運用/構築サポートツールです。
6
9
 
7
10
  kumogata, SparkleFormation, CoffeeFormation など、CloudFormationのテンプレートを書かずにDSLで表現するツールには様々な物があります。
8
11
  しかし、これらのツールはサードパーティツールであるため、CloudFormationの対応への追従に不安がのこります。
9
- 本ツールは、標準のCloudFromationテンプレートの枠組みを変えずに、その利用を支援するツールとなっています。
10
- 最悪このツールが使えなくなっても僅かなコストで標準のAWS CLIを使ってオペレーションを続行することが可能です。
12
+ 本ツールは、標準のCloudFromationテンプレートの枠組みを変えずに、その利用を支援するツールをを目指しています。
13
+ 最悪の場合、このツールが使えなくなっても僅かなコストで標準のAWS CLIを使いオペレーションを続行することが可能です
11
14
 
12
15
  ## ハイライト
13
16
 
@@ -15,14 +18,20 @@ kumogata, SparkleFormation, CoffeeFormation など、CloudFormationのテンプ
15
18
  * 複数のスタックの依存関係を考慮した操作
16
19
  * CloudFormationでバージョンコントロールシステムと連動した継続的インテグレーションのための基盤対応
17
20
  * Keypairの作成/削除
21
+ * コマンド、サブコマンド、冪統性を考慮したコマンドライン体系、オプションの整理、ヘルプの追加
22
+ * チェンジセットの作成/実行/削除/レポート
23
+ * Keypair/スタック毎のregionのサポート
24
+ * 512000バイト以上の大きなテンプレートファイルの場合に自動的にS3にテンプレートファイルをアップロードして処理する機能
25
+ * aws cloudformation package相当の機能(nested templateやlambda functionの自動アップロード) (experimental)
26
+ * cfndk全体での共通設定
18
27
 
19
- ## インストール
28
+ ## Install
20
29
 
21
30
  ```
22
31
  $ gem install cfndk
23
32
  ```
24
33
 
25
- ## 使い方
34
+ ## Usage
26
35
 
27
36
  ```
28
37
  $ mkdir cfn-project
@@ -31,11 +40,11 @@ $ cfndk init
31
40
  $ export AWS_REGION=ap-northeast-1
32
41
  $ export AWS_PROFILE=default
33
42
  $ cfndk create
34
- $ cfndk report-event
43
+ $ cfndk report
35
44
  $ cfndk destroy -f
36
45
  ```
37
46
 
38
- ## Credentials設定
47
+ ## Credentials configuration
39
48
 
40
49
  次の順番でCredentialsを評価して最初に有効なCredentialsを使用します。
41
50
 
@@ -50,57 +59,32 @@ $ cfndk destroy -f
50
59
  4. EC2/ECS Instance ProfileによるCredentials
51
60
  * AWS_CONTAINER_CREDENTIALS_RELATIVE_URI環境変数が設定された場合のみECSが使われます。
52
61
 
53
- ## コマンド
54
-
55
- ```
56
- cfndk [cmd] [options]
57
- ```
62
+ ## Command
58
63
 
59
- ### [cmd]
64
+ ### ```init```
60
65
 
61
- #### ```init```
62
-
63
- カレントディレクトリにcfndk.yamlのひな形を作成します。
66
+ カレントディレクトリにcfndk.ymlのひな形を作成します。
64
67
 
65
68
  ```
66
- cfndk init [option]
69
+ cfndk init
67
70
  ```
68
71
 
69
- #### ```create```
70
-
71
- cfndk.yamlで定義されているスタックを作成します。
72
-
73
- ```
74
- cfndk create [option]
75
- ```
72
+ ### ```create```
76
73
 
77
- #### ```update```
74
+ cfndk.ymlで定義されているキーペアとスタックを作成します。
78
75
 
79
- cfndk.yamlで定義されているスタックを更新します。
76
+ ```cfndk create [option]```
80
77
 
81
- ```
82
- cfndk update [option]
83
- ```
84
78
 
85
- #### ```create-or-changeset```
79
+ ### ```destroy```
86
80
 
87
- cfndk.yamlで定義されているスタックが存在しない場合は作成を、存在する場合はチェンジセットを作成します。
88
- チェンジセットの実行は行いません。
89
- コマンドを実行後に手動で実行する必要があります。
90
-
91
- ```
92
- cfndk create-or-changeset [option]
93
- ```
94
-
95
- #### ```destroy```
96
-
97
- cfndk.yamlで定義されているスタックを削除します。
81
+ cfndk.ymlで定義されているるキーペアとスタックを削除します。
98
82
 
99
83
  ```
100
84
  cfndk destroy [option]
101
85
  ```
102
86
 
103
- #### ```generate-uuid```
87
+ ### ```generate-uuid```
104
88
 
105
89
  UUIDを生成して標準出力に出力します。
106
90
 
@@ -117,67 +101,96 @@ cfndk destroy
117
101
  unset CFNDK_UUID
118
102
  ```
119
103
 
120
- #### ```validate```
104
+ ### ```report```
121
105
 
122
- cfndk.yamlで定義されているスタックのテンプレートをvalidationします。
106
+ cfndk.ymlで定義されているスタックについてレポートします。
123
107
 
124
- #### ```report-event```
108
+ ```
109
+ cfndk report [option]
110
+ ```
111
+ ### ```keypair```
125
112
 
126
- cfndk.yamlで定義されているスタックのイベント情報をレポートします。
113
+ cfndk.ymlで定義されているキーペアの作成/削除を行うサブコマンドです。
114
+
115
+ 詳細は
127
116
 
128
117
  ```
129
- cfndk report-event [option]
118
+ cfndk keypair help
130
119
  ```
131
120
 
132
- #### ```report-stack```
121
+ で確認できます。
122
+
123
+ ### ```stack```
124
+
125
+ cfndk.ymlで定義されているスタックの作成/更新/削除/レポート/テンプレート検証を行うサブコマンドです。
133
126
 
134
- cfndk.yamlで定義されているスタックの情報をレポートします。
127
+ 詳細は
135
128
 
136
129
  ```
137
- cfndk report-stack [option]
130
+ cfndk stack help
138
131
  ```
139
132
 
140
- #### ```report-stack-resource```
133
+ で確認できます。
141
134
 
142
- cfndk.yamlで定義されているスタックのリソース情報をレポートします。
135
+
136
+ ### ```changeset``` (experimental)
137
+
138
+ cfndk.ymlで定義されているスタックのチェンジセットの作成/実行/削除/レポートを行うサブコマンドです。
139
+
140
+ 詳細は
143
141
 
144
142
  ```
145
- cfndk report-stack-resource [option]
143
+ cfndk changeset help
146
144
  ```
147
145
 
148
- ### [option]
146
+ で確認できます。
147
+
148
+ ### option
149
149
 
150
150
  #### ```-v --verbose```
151
151
 
152
152
  実行時に詳細な情報を表示します。
153
153
 
154
- #### ```-c, --config_path cfndi.yml```
154
+ #### ```-c, --config-path=cfndk.yml```
155
155
 
156
156
  カレントディレクトリのcfndi.ymlの代わりに、ファイルを指定します。
157
157
 
158
- #### ```-p, --properties name=value```
158
+ #### ```-p, --properties=name:value```
159
159
 
160
160
  プロパティを追加します。
161
161
  cfndi.ymlのparametersのerb内で値で参照することができます。
162
162
 
163
- #### ```-a, --auto-uuid```
163
+ #### ```-u, --uuid uuid```
164
164
 
165
- UUIDを自動生成し使用します。
166
- UUIDが指定されるとスタック名に付加されます。
165
+ スタック名、チェンジセット名に指定されたUUIDを使用します。
166
+ UUIDが指定されるとスタック名、チェンジセット名に付加されます。
167
167
  またcfndi.ymlのparametersの値で参照することができます。
168
- ```-a```と```-u```は最後に指定されたものが有効になります。
169
168
 
170
- #### ```-u, --uuid uuid```
169
+ スタック名は下記のようになります。
170
+ 何も指定されない場合はcfndk.ymlで定義されたスタック名がそのまま使われます。
171
171
 
172
- 指定されたUUIDを使用します。
173
- UUIDが指定されるとスタック名に付加されます。
174
- またcfndi.ymlのparametersの値で参照することができます。
175
- ```-a```と```-u```は最後に指定されたものが有効になります。
172
+ ```[Stack Original Name]-[Stack's UUID]```
173
+
174
+ #### ```--change-set-uuid uuid```
175
+
176
+ チェンジセット名に指定されたUUIDを使用します。
177
+ UUIDが指定されるとチェンジセット名に付加されます。
178
+
179
+ このオプションが指定された場合チェンジセット名は下記のようになります。
180
+ 何も指定されない場合はチェンジセット名にはスタック名がそのまま使われます。
176
181
 
177
- #### ```-s, --stack-names name1,name2```
182
+ ```[Stack Name]-[Changeset's UUID]```
183
+
184
+
185
+ #### ```--stack-names=name1 name2```
178
186
 
179
187
  指定されたスタック名のみを操作します。
180
188
 
189
+ #### ```--keypair-names=name1 name2```
190
+
191
+ 指定されたキーペア名のみを操作します。
192
+
193
+
181
194
  #### ```--no-color```
182
195
 
183
196
  メッセージ出力でカラーを抑制します。
@@ -186,29 +199,45 @@ UUIDが指定されるとスタック名に付加されます。
186
199
 
187
200
  動作の確認メッセージと入力をスキップします。
188
201
 
189
- ## 環境変数
202
+ 他にもオプションはあります。
203
+ 詳細はコマンドヘルプを参照してください。
204
+
205
+ ## Environment Variables
190
206
 
191
207
  ### ```CFNDK_UUID```
192
208
 
193
209
  この環境変数が指定されている場合、```--uuid $CFNDK_UUID```が指定されたものとして動作します。
194
- ```-a```や```-u```のほうが優先されます。
210
+ ```--uuid```のほうが優先されます。
211
+
212
+ ### ```CFNDK_CHANGE_SET_UUID```
195
213
 
214
+ この環境変数が指定されている場合、```--change-set-uuid $CFNDK_CHANGE_SET_UUID```が指定されたものとして動作します。
196
215
 
197
- ## cfndk.yaml
216
+ ## cfndk.yml
198
217
 
199
218
  * example
200
219
 
201
220
  ```
221
+ global:
222
+ region: ap-northeast-1
223
+ s3_template_bucket: cfndk-templates
224
+ timeout_in_minutes: 10
225
+ role_arn: arn:aws:iam::XXXXXXXXXXX:role/XXXXXXXXXXXXX
226
+ package: true
227
+ default_profile: profile_name
202
228
  keypairs:
203
229
  Key1:
230
+ region: us-east-1
204
231
  Key2:
205
232
  key_file: key/key2<%= append_uuid %>.pem
206
233
  stacks:
207
234
  Stack1:
235
+ region: us-east-1
208
236
  template_file: stack1/stack1.yaml
209
237
  parameter_input: stack1/env.json
210
238
  parameters:
211
239
  VpcName: Prod<%= append_uuid %>
240
+ package: true
212
241
  Stack2:
213
242
  template_file: stack2/stack2.yaml
214
243
  parameter_input: stack2/env.json
@@ -218,16 +247,29 @@ stacks:
218
247
  - CAPABILITY_IAM
219
248
  - CAPABILITY_NAMED_IAM
220
249
  depends:
221
- - Stack1
250
+ - Stack1
222
251
  timeout_in_minutes: 10
223
252
  ```
224
253
 
225
254
  ```
255
+ global:
256
+ region: [String]
257
+ s3_template_bucket: [String]
258
+ timeout_in_minutes: [Integer]
259
+ package: [Boolean]
260
+ default_profile: [String]
261
+ pre_command: [String]
262
+ post_command: [String]
226
263
  keypairs:
227
264
  [String]:
265
+ region: [String]
228
266
  key_file: [String]
267
+ enabled: [Boolean]
268
+ pre_command: [String]
269
+ post_command: [String]
229
270
  stacks:
230
271
  [String]:
272
+ region: [String]
231
273
  template_file: [String]
232
274
  parameter_input: [String]
233
275
  parameters:
@@ -239,8 +281,74 @@ stacks:
239
281
  timeout_in_minutes: [Integer]
240
282
  depends:
241
283
  - [String]
242
- - [String]
284
+ - [String]
285
+ package: [Boolean]
286
+ enabled: [Boolean]
287
+ pre_command: [String]
288
+ post_command: [String]
289
+ ```
290
+
291
+ ### ```global:```
292
+
293
+ 全体設定を定義します。
294
+
295
+ #### region (デフォルト: us-east-1)
296
+
297
+ 全体で利用するリージョンを指定します。
298
+ 指定されない場合は、AWS_REGION環境変数の値をリージョンとして使用します。
299
+ AWS_REGIONも指定されない場合はus-east-1を利用します。
300
+
301
+ #### timeout_in_minutes (デフォルト: 1)
302
+
303
+ 全体で利用するタイムアウト時間を分で指定します。
304
+
305
+ #### role_arn
306
+
307
+ 利用するロールのARN
308
+
309
+ #### s3_template_bucket (デフォルト: cfndk-templates)
310
+
311
+ スタックのCloudFormationテンプレートファイルをアップロードするS3のバケット名を指定します。
312
+
313
+ 実際のバケット名は
314
+ ```
315
+ [region]-[s3_template_bucket]
243
316
  ```
317
+ が使用されます。
318
+ regionはスタック毎で指定されたものを利用します。
319
+
320
+ S3バケットは一日で自動的に中身のオブジェクトが削除されるように設定されます。
321
+
322
+ #### package (デフォルト: false)
323
+
324
+ trueを指定した場合に、
325
+ スタックのテンプレートで、ネステッドスタックや、CloudFormationのコードがローカルパス形式で指定されている場合に
326
+ ```aws cloudformation package```
327
+ 相当の処理を行います。
328
+
329
+ yaml、jsonの意図しない加工がされる可能性があるためデフォルトではfalseとなっています。
330
+
331
+ 例えば、```package: true```を指定して下記の様に記述すると、 ```./lambda_function``` フォルダをzipアーカイブしてS3にアップロードし、Codeを適切なS3のパスに更新します。
332
+
333
+ ```
334
+ LambdaFunction:
335
+ Type: AWS::Lambda::Function
336
+ Properties:
337
+ Code: ./lambda_function
338
+ ```
339
+
340
+ #### default_profile
341
+
342
+ default_profileで指定されたAWSプロファイルを利用してスタックを作成します。
343
+ AWS_PROFILE環境変数が指定された場合にはAWS_PROFILE環境変数が優先して使用されます。
344
+
345
+ #### pre_command
346
+
347
+ スタックのcreate、updateやチェンジセットのcreateで、処理の開始前に実施するコマンドを指定します。
348
+
349
+ #### post_command
350
+
351
+ スタックのcreate、updateやチェンジセットのcreateで、処理の完了後に実施するコマンドを指定します。
244
352
 
245
353
  ### ```keypairs:```
246
354
 
@@ -254,6 +362,11 @@ cfndkで管理するキーペアを定義します。
254
362
  通常は、キーペアを作成するとこの名称が利用されます。
255
363
  UUIDを利用すると、```[Keypair Original Name]-[UUID]```のような形式のキーペア名が利用されます。
256
364
 
365
+ #### region
366
+
367
+ キーペアのリージョンを指定します。
368
+ globalのregionより優先されます。
369
+
257
370
  #### key_file
258
371
 
259
372
  キーペア作成時にキーペアのファイルを指定された相対パスに作成します。
@@ -265,6 +378,17 @@ erbの記法が利用できます。
265
378
  key_file: key/key<%= append_uuid %>.pem
266
379
  ```
267
380
 
381
+ #### enabled (デフォルト: true)
382
+
383
+ falseを指定した場合、そのkey pairを無視します
384
+
385
+ #### pre_command
386
+
387
+ ker pairのcreateの処理の開始前に実施するコマンドを指定します。
388
+
389
+ #### post_command
390
+
391
+ key pairのcreateの処理の完了後に実施するコマンドを指定します。
268
392
 
269
393
  ### ```stacks:```
270
394
 
@@ -278,13 +402,18 @@ stacksの配下には、管理するスタックのオリジナル名を定義
278
402
  通常は、stackを作成するとこの名称が利用されます。
279
403
  UUIDを利用すると、```[Stack Original Name]-[UUID]```のような形式のスタック名が利用されます。
280
404
 
405
+ #### region
406
+
407
+ スタックのリージョンを指定します。
408
+ globalのregionより優先されます。
409
+
281
410
  #### template_file
282
411
 
283
- 必須。CloudFormationテンプレートファイルのパスをcfndk.yamlからの相対パスで指定します。
412
+ 必須。CloudFormationテンプレートファイルのパスをcfndk.ymlからの相対パスで指定します。
284
413
 
285
414
  #### parameter_input
286
415
 
287
- 必須。CloudFormationのパラメータJSONファイルをcfndk.yamlからの相対パスで指定します。
416
+ 必須。CloudFormationのパラメータJSONファイルをcfndk.ymlからの相対パスで指定します。
288
417
 
289
418
  #### parameters
290
419
 
@@ -327,7 +456,7 @@ Parameter Valueではerbの記法が利用できます。
327
456
  スタックに依存している別のスタックを指定します。
328
457
  複数指定することができます。
329
458
  dependsを指定すると、create,update,create-or-changeset,destoryのコマンドを実行する際に、依存関係に従ってスタックを処理します。
330
- dependsが循環するような指定をすることはできません。
459
+ 存在しないタスタックやdependsが循環するような指定をすることはできません。
331
460
 
332
461
  ```
333
462
  depends:
@@ -335,7 +464,29 @@ dependsが循環するような指定をすることはできません。
335
464
  - Stack2
336
465
  ```
337
466
 
338
- #### timeout_in_minutes (デフォルト: 1)
467
+ #### package (デフォルト: false)
468
+
469
+ trueを指定した場合に、
470
+ スタックのテンプレートで、ネステッドスタックや、CloudFormationのコードがローカルパス形式で指定されている場合に
471
+ ```aws cloudformation package```
472
+ 相当の処理を行います。
473
+
474
+ yaml、jsonの意図しない加工がされる可能性があるためデフォルトではfalseとなっています。
475
+
476
+ 例えば、```package: true```を指定して下記の様に記述すると、 ```./lambda_function``` フォルダをzipアーカイブしてS3にアップロードし、Codeを適切なS3のパスに更新します。
477
+
478
+ ```
479
+ LambdaFunction:
480
+ Type: AWS::Lambda::Function
481
+ Properties:
482
+ Code: ./lambda_function
483
+ ```
484
+
485
+ #### enabled (デフォルト: true)
486
+
487
+ falseを指定した場合、そのスタックを無視します
488
+
489
+ #### timeout_in_minutes
339
490
 
340
491
  スタックを作成する際などのタイムアウト時間を分で指定します。
341
492
 
@@ -343,20 +494,62 @@ dependsが循環するような指定をすることはできません。
343
494
  timeout_in_minutes: 5
344
495
  ```
345
496
 
497
+ #### pre_command
498
+
499
+ スタックのcreate、updateやチェンジセットのcreateで、処理の開始前に実施するコマンドを指定します。
500
+
501
+ #### post_command
502
+
503
+ スタックのcreate、updateやチェンジセットのcreateで、処理の完了後に実施するコマンドを指定します。
504
+
346
505
 
347
506
  ### erbで使用できるメソッド
348
507
 
349
508
  * ```append_uuid(glue='-')```
350
509
 
351
- UUIDガ指定されている場合、```[glueの文字列] + [UUID]```を返します。
510
+ スタックのUUIDガ指定されている場合、```[glueの文字列] + [Stack's UUID]```を返します。
352
511
  UUIDが指定されてい無い場合は空文字が返ります。
353
512
  glueで接続文字を置き換えることができます。
354
513
 
355
514
  * ```uuid```
356
515
 
357
- UUIDを返します。
516
+ スタックのUUIDを返します。
358
517
  UUIDが指定されてい無い場合は空文字が返ります。
359
518
 
360
519
  * ```properties(key)```
361
520
 
362
521
  オプション```--properties```で指定したキーに対応する値を参照することができます。
522
+
523
+ ## Execution Environment
524
+
525
+ ### Vagrant
526
+
527
+ Vagrantを利用してLinux環境とcfndkのインストールを行うリファレンス環境を用意しました。
528
+
529
+ ```
530
+ cd vagrant
531
+ vagrant up
532
+ vagrant ssh
533
+ ```
534
+
535
+ ### Docker
536
+
537
+ gemで直接インストールする代わりに、Dockerコンテナを利用して、cfndkコマンドを実行できるようにします。
538
+
539
+ ```
540
+ cp docker/cfndk.sh /usr/local/bin/cfndk.sh
541
+ chmod +x /usr/local/bin/cfndk.sh
542
+ AWS_PROFILE=default cfndk.sh help
543
+ ```
544
+
545
+ ## Test
546
+
547
+ cfndkコマンドのテストを行うことができます。
548
+ CFNDK_COVERAGE環境変数に1を設定することで、カバレッジを取ることができます。
549
+
550
+ ```
551
+ export AWS_REGION=ap-northeast-1
552
+ export AWS_PROFILE=default
553
+ export CFNDK_COVERAGE=1
554
+ bundle exec rspec
555
+ ```