Skip to content

Commit

Permalink
Copied manually modification from ja-05-intermediate branch
Browse files Browse the repository at this point in the history
  • Loading branch information
cmick-aws committed Aug 22, 2023
1 parent 76cdbcb commit 3110902
Show file tree
Hide file tree
Showing 14 changed files with 531 additions and 535 deletions.
6 changes: 3 additions & 3 deletions content/intermediate/index.ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ title: "中級"
weight: 40
---

ワークショップの**中級**の部分へようこそ。このパートでは、より高度なCloudFormationの概念を紹介します
ワークショップの**中級編**へようこそ。このパートでは、より高度な CloudFormation の概念を紹介します

**ネストされ、階層化されたスタック**を作成する方法と、Lambda関数を**パッケージ化してデプロイ**する方法を学びます
**ネストされたスタックや階層化されたスタック**を作成する方法、Lambda 関数を**パッケージ化してデプロイ**する方法等を学びます

ワークショップの**中級**の他のセクションでは、あなたが書いたルールに従い、JSONやYAML形式のPolicy as Code検証を行う[AWS CloudFormation Guard](https://github.com/aws-cloudformation/cloudformation-guard) などのトピックについて学びます
**中級編ワークショップ**の各セクションでは、独自で書いたルールに従い、JSON や YAML 形式の Policy as Code 検証を行う [AWS CloudFormation Guard](https://github.com/aws-cloudformation/cloudformation-guard) 等のトピックについて学びます
46 changes: 23 additions & 23 deletions content/intermediate/operations/drift-detection/index.ja.md

Large diffs are not rendered by default.

76 changes: 38 additions & 38 deletions content/intermediate/operations/resource-importing/index.ja.md

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

128 changes: 64 additions & 64 deletions content/intermediate/templates/architecting-templates/index.ja.md

Large diffs are not rendered by default.

118 changes: 59 additions & 59 deletions content/intermediate/templates/conditions/index.ja.md

Large diffs are not rendered by default.

118 changes: 59 additions & 59 deletions content/intermediate/templates/dynamic-references/index.ja.md

Large diffs are not rendered by default.

69 changes: 34 additions & 35 deletions content/intermediate/templates/layered-stacks/index.ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,45 +4,44 @@ weight: 500
---

### 概要
前のラボでは、`Outputs` セクションと `Fn::GetAtt` 関数を使って子スタックから親スタックへ値を渡す方法について学びました。これにより、VPC と IAM ロール専用のテンプレートを用意できました
再利用可能なテンプレートを作成できます。しかし、**スタック** を再利用したい場合はどうでしょうか?
前のラボでは、`Outputs` セクションと `Fn::GetAtt` 関数を使って子スタックから親スタックへ値を渡す方法について学びました。そして、再利用可能なテンプレートを作成することができるようになりました。例えば、ネストされたスタックを利用すると、VPC と IAM ロール専用のテンプレートを用意することができます
しかし、**スタック** を再利用したい場合はどうでしょうか?

例えば、多数のテンプレートを使用して多数のワークロードをデプロイする計画があっても、すべての EC2 インスタンスが Systems Manager Session Manager によるすべての EC2 インスタンスへのアクセスを有効にします
同様に、1 つのスタックで VPC をデプロイし、それを将来の複数のスタックやワークロードで使用したい場合があります
例えば、多数のテンプレートを使用して多数のワークロードをデプロイする計画があったとします。すべての EC2 インスタンスが Systems Manager Session Manager によるすべての EC2 インスタンスへのアクセスを有効にする必要があります
同様に、1 つのスタックで VPC をデプロイし、それを将来、複数のスタックやワークロードで使用したい場合があります
このような一対多の関係は、ネストされたスタックのシナリオでは実現できません。
ここで階層化されたスタックの出番です。


私たちは [Export](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-exports.html) を使用し、任意の CloudFormation スタックに
[Import](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html) できるグローバル変数を作成します。
私たちは [Export](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/using-cfn-stack-exports.html) を使用し、任意の CloudFormation スタックに [Import](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html) できるグローバル変数を作成します。

### 取り上げるトピック
このラボでは、以下を作成します。

1. **VPC スタック**: これには、前のラボで使用したものと同じシンプルな VPC テンプレートが含まれていますが、出力に Export が追加されています。
2. **IAM インスタンスロールスタック**: これには、前のラボで使用したのと同じ IAM インスタンスロールが含まれていますが、出力に Export が追加されています。
3. **EC2 スタック**: ここには前のラボで定義した EC2 インスタンスが含まれていますが、ここでは Fn::ImportValue 関数を使用します。
1. **VPC スタック**: 前のラボで使用したものと同じシンプルな VPC テンプレートが含まれていますが、出力に Export が追加されています。
2. **IAM インスタンスロールスタック**: 前のラボで使用したのと同じ IAM インスタンスロールが含まれていますが、出力に Export が追加されています。
3. **EC2 スタック**: 前のラボで定義した EC2 インスタンスが含まれていますが、ここでは Fn::ImportValue 関数を使用します。

> 以下は、階層化されたスタックの階層を示す図です。
> 階層化されたスタックの階層を示す図
![layered-stack-hierarchy.png](/static/intermediate/templates/layered-stacks/layered-stack-hierarchy.ja.png)

> 以下の図は、導入されるインフラストラクチャの大まかな概要を示しています。
> 導入されるインフラストラクチャの概要
![layered-stack-hierarchy.png](/static/intermediate/templates/layered-stacks/ls-architecture.png)

### ラボを開始

作業ファイルは `code/workspace/layered-stacks` にあります。このラボの残りの部分では、ここのテンプレートにコードを追加する必要があります。ソリューションは `code/solutions/layered-stacks` フォルダにあります。これらをコードと照合して参照できます
作業ファイルは `code/workspace/layered-stacks` にあります。このラボの残りの部分では、テンプレートにコードを追加する必要があります。なお、解決策は `code/solutions/layered-stacks` フォルダにありますので、こちらを参照することも可能です

#### VPC スタックの作成
VPC テンプレートは自動的に作成されました。タイトルは `vpc.yaml` です。このテンプレートは、2 つのパブリックサブネット、1 つのインターネットゲートウェイ、およびルートテーブルを含む VPC スタックを作成します
VPC テンプレートは既に作成されており、タイトルは `vpc.yaml` です。このテンプレートは、2 つのパブリックサブネット、1 つのインターネットゲートウェイ、および、ルートテーブルを含む VPC スタックを作成することができます

##### 1. VPC テンプレートを準備する
##### 1. VPC テンプレートの準備

::alert[このラボで参照されているファイルはすべて `code/workspace/layered-stacks` 内にあります]{type="info"}
::alert[このラボで参照されているファイルはすべて `code/workspace/layered-stacks` 内にあります]{type="info"}

`vpc.yaml` ファイルを見ると、テンプレートの **Outputs** セクションにいくつかの出力があることがわかります。次に、これらそれぞれにエクスポートを追加して、他の CloudFormation スタックから使用できるようにします。
`vpc.yaml` ファイルを見ると、テンプレートの **Outputs** セクションにいくつかの出力があることがわかります。次に、Export を追加して、他の CloudFormation スタックから使用できるようにします。

以下の [4-5、9-10、14-15] 行目をテンプレートファイルに追加します。

Expand Down Expand Up @@ -72,16 +71,16 @@ Outputs:
4. `vpc.yaml` ファイルを選択します。
5. **スタック名**を入力します。例えば、`cfn-workshop-vpc` と入力します。
6. **AvaliabilityZone** パラメータには、**2 つの AZ** を選択します。
7. 残りのパラメータは **デフォルト** のままとします。
7. 残りのパラメータは**デフォルト**のままとします。
8. すべてデフォルトのままウィザード内を移動します。
9. レビューページで一番下までスクロールし、**送信**をクリックします。

#### IAM スタックの作成

##### 1. IAM ロールテンプレートを準備する
##### 1. IAM ロールテンプレートの準備

1. `iam.yaml` ファイルを開きます。
2. 以下の[4~5] 行目をテンプレートの **Outputs** セクションにコピーします。
2. 以下の [4~5] 行目をテンプレートの **Outputs** セクションにコピーします。
```yaml {hl_lines=[4,5]}
Outputs:
WebServerInstanceProfile:
Expand All @@ -99,19 +98,19 @@ Outputs:
5. **スタック名**を入力します。例えば、`cfn-workshop-iam` と入力します。
6. **次へ**をクリックします。
7. すべてデフォルトのままウィザード内を移動します。
8. **Acknowledge IAM capabilities**をクリックし、**送信**をクリックします。
8. **Acknowledge IAM capabilities** をクリックし、**送信**をクリックします。

#### EC2 階層化されたスタックの作成

##### 1. EC2 テンプレートを準備する
**階層化されたStack**のコンセプトは、**Paramaters** を使用する代わりに、組み込み関数を使用して、以前にエクスポートされた値をインポートすることです。
したがって、`ec2.yaml` に最初に加えるべき変更は、今後使用されなくなる `SubnetId`、`VpcID`、`WebServerInstanceProfile`のパラメータを削除することです。
##### 1. EC2 テンプレートの準備
**階層化された Stack** のコンセプトは、**Paramaters** を使用する代わりに、組み込み関数を使用して、以前にエクスポートされた値をインポートすることです。
従って、`ec2.yaml` に最初に加えるべき変更は、今後使用されなくなる `SubnetId`、`VpcID`、`WebServerInstanceProfile` のパラメータを削除することです。


##### 2. Parameters セクションを更新
##### 2. Parameters セクションの更新

次の例のような形で、**Parameters**セクションを更新します。
つまり、**Parameters**セクションから、`VpcId`、`SubnetId`、`WebServerInstanceProfile` の項目を削除します。
次の例のような形で、**Parameters** セクションを更新します。
つまり、**Parameters** セクションから、`VpcId`、`SubnetId`、`WebServerInstanceProfile` の項目を削除します。

```yaml
Parameters:
Expand All @@ -131,10 +130,10 @@ Parameters:
Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
```

##### 3. WebServerInstanceリソースの更新
##### 3. WebServerInstance リソースの更新

次に、テンプレートの`Ref`を更新して、以前に作成した VPC と IAM スタックからエクスポートされた値をインポートする必要があります。
このインポートは [Fn::ImportValue](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html) 組み込み関数を使用して実行します。
次に、テンプレートの `Ref` を更新して、以前に作成した VPC と IAM スタックからエクスポートされた値をインポートする必要があります。
このインポートは [Fn::ImportValue](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html) 組み込み関数を使用して実行します。

`ec2.yaml` テンプレートのリソースセクションにある WebServerInstance リソースを更新します。

Expand All @@ -151,7 +150,7 @@ WebServerInstance:
```

##### 4. セキュリティグループの更新
最後に、セキュリティグループリソースを更新します。`ec2.yaml` テンプレートの**Resources** セクション`WebServerSecurityGroup` リソース [19] 行目を更新します。
最後に、セキュリティグループリソースを更新します。`ec2.yaml` テンプレートの **Resources** セクション `WebServerSecurityGroup` リソース [19] 行目を更新します。

```yaml {hl_lines=[19]}
WebServerSecurityGroup:
Expand Down Expand Up @@ -199,22 +198,22 @@ WebServerSecurityGroup:

Session Manager を使用してインスタンスにログインできることを確認します。

方法が不明な場合は、[Session Manager](/basics/operations/session-manager#challenge)ラボの指示に従ってください
やり方がわからない場合は、[Session Manager](/basics/operations/session-manager#challenge) ラボをご参照ください

### クリーンアップ

::alert[スタックが出力値をインポートした後は、出力値をエクスポートしているスタックを削除したり、エクスポートされた出力値を変更したりすることはできません。エクスポートするスタックを削除したり、出力値を変更したりする前に、すべてのインポートを削除する必要があります。]{type="info"}

例えば、**EC2 スタック**を削除する前に**VPC スタック**を削除することはできません。次のエラーメッセージが表示されます。
例えば、**EC2 スタック**を削除する前に **VPC スタック**を削除することはできません。次のエラーメッセージが表示されます。

![delete-export-before-import.png](/static/intermediate/templates/layered-stacks/delete-export-before-import.ja.png)

1. [CloudFormation コンソール](https://console.aws.amazon.com/cloudformation) で、**EC2 スタック** を選択します (例:`cfn-workshop-ec2`)。
1. [CloudFormation コンソール](https://console.aws.amazon.com/cloudformation) で、**EC2 スタック** を選択します (例: `cfn-workshop-ec2`)。
2. 右上の**削除**をクリックします。
3. ポップアップウィンドウで、**スタックの削除**をクリックします。
4. **DELETE_COMPLETE** のステータスが表示されるまで、**更新**ボタンを数回クリックします。
5. 依存関係がなくなったため、**IAM****VPC**スタックが削除できます。
5. 依存関係がなくなったため、**IAM****VPC** スタックが削除できます。

---
### まとめ
**階層化されたスタック**では、複数のスタックで繰り返し使用できるリソースを作成できます。全てのスタックには、**エクスポート**名が必要です。この機能を利用することで、役割と責任を分けることができます。例えば、ネットワークチームは、承認された VPC デザインをテンプレートとして作成して提供できます。それをスタックとしてデプロイし、必要に応じて、エクスポートを参照するだけです。同様に、セキュリティチームは IAM ロールや EC2 セキュリティグループについても同じ操作を行うことができます。
**階層化されたスタック**では、複数のスタックで繰り返し使用できるリソースを作成できます。利用する全てのスタックで、**Export** で指定した名前を知る必要があります。この機能を利用することで、役割と責任を分けることができます。例えば、ネットワークチームは、承認された VPC デザインをテンプレートとして作成して提供できます。必要に応じて、VPCスタックの Export を参照すれば良いです。同様に、セキュリティチームは IAM ロールや EC2 セキュリティグループについても同じ操作を行うことができます。
Loading

0 comments on commit 3110902

Please sign in to comment.