From f1b813a73053d8030f05f6e174dcbee8ba3d62b0 Mon Sep 17 00:00:00 2001 From: ttymt Date: Wed, 23 Aug 2023 13:39:30 +0900 Subject: [PATCH] add advanced modules section --- content/advanced/index.ja.md | 10 + content/advanced/modules/cleanup/index.ja.md | 28 ++ .../modules/consume-example/index.ja.md | 308 ++++++++++++++++++ .../modules/create-example/index.ja.md | 255 +++++++++++++++ content/advanced/modules/index.ja.md | 38 +++ .../modules/prerequisites/index.ja.md | 18 + 6 files changed, 657 insertions(+) create mode 100644 content/advanced/index.ja.md create mode 100644 content/advanced/modules/cleanup/index.ja.md create mode 100644 content/advanced/modules/consume-example/index.ja.md create mode 100644 content/advanced/modules/create-example/index.ja.md create mode 100644 content/advanced/modules/index.ja.md create mode 100644 content/advanced/modules/prerequisites/index.ja.md diff --git a/content/advanced/index.ja.md b/content/advanced/index.ja.md new file mode 100644 index 000000000..3ab3d8c46 --- /dev/null +++ b/content/advanced/index.ja.md @@ -0,0 +1,10 @@ +--- +title: "上級" +weight: 50 +--- + +ワークショップの**上級**パートへようこそ。 + +このパートでは、開発した拡張機能を使用して [AWS CloudFormation](https://aws.amazon.com/jp/cloudformation/) の作成、プロビジョニング、管理に関する機能を拡張する方法に焦点を当てます。 + +[AWS CloudFormation レジストリ](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/registry.html)を活用し、AWS アカウントで使用することができる拡張機能を管理します。拡張タイプはパブリックとプライベートが存在し、[モジュール](https://docs.aws.amazon.com/ja_jp/cloudformation-cli/latest/userguide/modules.html)、[リソースタイプ](https://docs.aws.amazon.com/ja_jp/cloudformation-cli/latest/userguide/resource-types.html)、[フック](https://docs.aws.amazon.com/ja_jp/cloudformation-cli/latest/userguide/hooks.html)で構成されます。 diff --git a/content/advanced/modules/cleanup/index.ja.md b/content/advanced/modules/cleanup/index.ja.md new file mode 100644 index 000000000..da08a33a5 --- /dev/null +++ b/content/advanced/modules/cleanup/index.ja.md @@ -0,0 +1,28 @@ +--- +title: "クリーンアップ" +weight: 340 +--- + +## クリーンアップ + +このモジュールで作成したリソースをクリーンアップするには、次の手順に従います。 + +サンプルモジュールを使用したサンプルスタックを削除します。 + +:::code{language=shell showLineNumbers=false showCopyAction=true} +aws cloudformation delete-stack --stack-name cfn-workshop-modules +aws cloudformation wait stack-delete-complete --stack-name cfn-workshop-modules +::: + +:::alert{header="チャレンジを完了した場合にのみ必要" type="warning"} +モジュールのバージョン `00000001` を CloudFormation レジストリから登録解除します。登録したモジュールのバージョン毎に、この手順を繰り返す必要があります (登録解除できないデフォルトバージョンは例外)。 + +:::code{language=shell showLineNumbers=false showCopyAction=true} +aws cloudformation deregister-type --type MODULE --type-name CFNWORKSHOP::EC2::VPC::MODULE --version-id 00000001 +::: + +CloudFormation レジストリからモジュールを登録解除します。 + +:::code{language=shell showLineNumbers=false showCopyAction=true} +aws cloudformation deregister-type --type MODULE --type-name CFNWORKSHOP::EC2::VPC::MODULE +::: diff --git a/content/advanced/modules/consume-example/index.ja.md b/content/advanced/modules/consume-example/index.ja.md new file mode 100644 index 000000000..4c9d50820 --- /dev/null +++ b/content/advanced/modules/consume-example/index.ja.md @@ -0,0 +1,308 @@ +--- +title: "サンプルモジュールの利用" +weight: 330 +--- + +#### サンプルモジュールの使用 + +AWS アカウントで指定した AWS リージョンのプライベートレジストリに、新しい CloudFormation モジュールを作成して登録しました。つまり、モジュールを CloudFormation テンプレートで他のAWS リソースと同じように使用できるようになりました。 + +どのように利用できるのか見てみましょう。 + +新しい YAML ファイルを作成します。 + +:::code{language=shell showLineNumbers=false showCopyAction=true} +touch use-module.yaml +::: + +テキストエディターでこのファイルを開き、以下の CloudFormatoin YAML コードを貼り付けます。 + + +:::code{language=yaml showLineNumbers=false showCopyAction=true} +AWSTemplateFormatVersion: 2010-09-09 + +Resources: + + Vpc: + Type: CFNWORKSHOP::EC2::VPC::MODULE + Properties: + VpcCidr: 10.1.0.0/16 +::: + + +この短いコードで終了です。モジュールの便利さについてご理解いただけると思います。 + +以下のコマンドを実行して、テンプレートから新しいスタックを作成しましょう。 + +:::code{language=shell showLineNumbers=false showCopyAction=true} +aws cloudformation deploy --template-file use-module.yaml --stack-name cfn-workshop-modules +::: + +### さらに詳しく見る + +スタックをデプロイしたので、実際に何が起こったのかを詳しく見てみましょう。CloudFormation でモジュールがどのように機能するのかをより理解しやすくなるでしょう。 + +AWS コンソールを開き、CloudFormation サービスに移動します。作成したスタックを見つけて、`Resources` タブを選択します。 +スタックには 23 個のリソースがあることが示されていることに注目します。 + +![stack-resources](/static/advanced/modules/StackResources.png) + +このリソースの数は、スタックの処理済みのテンプレートを見れば説明できます。CloudFormation が実際にデプロイするテンプレートは、モジュールの内容に基づいていることがわかります。 +CloudFormation テンプレートでモジュールが使用されると、モジュールリソースはモジュールテンプレートで定義されたリソースに置き換えられます。 + +![stack-template](/static/advanced/modules/StackTemplate.png) + +### チャレンジ + +作成されたリソースを簡単に識別できるように、モジュールフラグメントで説明されているリソースに `Name` タグを追加します。ユーザーは、モジュールを使用するときに `NameTag` という新しい関連モジュールプロパティの値を指定できるはずです。 + +:::expand{header="ヒントが必要ですか?"} +* `module.yaml` ファイルを更新して、`Name` タグをサポートするすべてのリソースに追加します。VPC にタグを追加するためのドキュメントは[こちら](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html#cfn-ec2-vpc-tags)です。テンプレート内の他のリソースタイプについては、それぞれのリソースタイプがタグをサポートしているかどうか、また、その利用方法を確認してください。詳細については [AWS リソースおよびプロパティタイプのリファレンス](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html)をご参照ください。完了したら、フラグメントに指定する新しい `NameTag` 入力パラメーターで、タグをサポートする各リソースに追加した `Name` タグの値を参照します。 + +* 変更を送信し、新しいモジュールバージョンをデフォルトバージョンとして設定します。詳細については、CloudFormation CLI command reference の `submit` [コマンド](https://docs.aws.amazon.com/ja_jp/cloudformation-cli/latest/userguide/resource-type-cli-submit.html) をご参照ください。 + +* `use-module.yaml` テンプレートを更新して、新しい `NameTag` モジュールプロパティを含めます。 + +* `cfn-workshop-modules` スタックの更新を実行します。 +::: + +:::expand{header="解決策を確認しますか?"} + +`module.yaml` ファイルの内容を次のように更新します。 + + +```yaml +AWSTemplateFormatVersion: 2010-09-09 + +Description: A full VPC Stack + +Parameters: + + VpcCidr: + Type: String + + NameTag: + Type: String + +Resources: + + Vpc: + Type: AWS::EC2::VPC + Properties: + CidrBlock: !Ref VpcCidr + EnableDnsHostnames: true + EnableDnsSupport: true + InstanceTenancy: default + Tags: + - Key: Name + Value: !Ref NameTag + + InternetGateway: + Type: AWS::EC2::InternetGateway + Properties: + Tags: + - Key: Name + Value: !Ref NameTag + + VPCGatewayAttachment: + Type: AWS::EC2::VPCGatewayAttachment + Properties: + VpcId: !Ref Vpc + InternetGatewayId: !Ref InternetGateway + + EIP1: + Type: AWS::EC2::EIP + Properties: + Domain: vpc + Tags: + - Key: Name + Value: !Sub ${NameTag}/PublicSubnet1 + + EIP2: + Type: AWS::EC2::EIP + Properties: + Domain: vpc + Tags: + - Key: Name + Value: !Sub ${NameTag}/PublicSubnet2 + + NATGateway1: + Type: AWS::EC2::NatGateway + Properties: + SubnetId: !Ref Public1Subnet + AllocationId: !GetAtt EIP1.AllocationId + Tags: + - Key: Name + Value: !Sub ${NameTag}/PublicSubnet1 + + NATGateway2: + Type: AWS::EC2::NatGateway + Properties: + SubnetId: !Ref Public2Subnet + AllocationId: !GetAtt EIP2.AllocationId + Tags: + - Key: Name + Value: !Sub ${NameTag}/PublicSubnet2 + + Public1Subnet: + Type: AWS::EC2::Subnet + Properties: + VpcId: !Ref Vpc + AvailabilityZone: !Select [0, !GetAZs ''] + CidrBlock: !Select [0, !Cidr [!GetAtt Vpc.CidrBlock, 4, 14 ]] + MapPublicIpOnLaunch: true + Tags: + - Key: Name + Value: !Sub ${NameTag}/PublicSubnet1 + + Public2Subnet: + Type: AWS::EC2::Subnet + Properties: + VpcId: !Ref Vpc + AvailabilityZone: !Select [1, !GetAZs ''] + CidrBlock: !Select [1, !Cidr [!GetAtt Vpc.CidrBlock, 4, 14 ]] + MapPublicIpOnLaunch: true + Tags: + - Key: Name + Value: !Sub ${NameTag}/PublicSubnet2 + + Private1Subnet: + Type: AWS::EC2::Subnet + Properties: + VpcId: !Ref Vpc + AvailabilityZone: !Select [0, !GetAZs ''] + CidrBlock: !Select [2, !Cidr [!GetAtt Vpc.CidrBlock, 4, 14 ]] + MapPublicIpOnLaunch: false + Tags: + - Key: Name + Value: !Sub ${NameTag}/PrivateSubnet1 + + Private2Subnet: + Type: AWS::EC2::Subnet + Properties: + VpcId: !Ref Vpc + AvailabilityZone: !Select [1, !GetAZs ''] + CidrBlock: !Select [3, !Cidr [!GetAtt Vpc.CidrBlock, 4, 14 ]] + MapPublicIpOnLaunch: false + Tags: + - Key: Name + Value: !Sub ${NameTag}/PrivateSubnet2 + + Public1RouteTable: + Type: AWS::EC2::RouteTable + Properties: + VpcId: !Ref Vpc + Tags: + - Key: Name + Value: !Sub ${NameTag}/PublicSubnet1 + + Public2RouteTable: + Type: AWS::EC2::RouteTable + Properties: + VpcId: !Ref Vpc + Tags: + - Key: Name + Value: !Sub ${NameTag}/PublicSubnet2 + + Private1RouteTable: + Type: AWS::EC2::RouteTable + Properties: + VpcId: !Ref Vpc + Tags: + - Key: Name + Value: !Sub ${NameTag}/PrivateSubnet1 + + Private2RouteTable: + Type: AWS::EC2::RouteTable + Properties: + VpcId: !Ref Vpc + Tags: + - Key: Name + Value: !Sub ${NameTag}/PrivateSubnet2 + + Public1RouteTableAssociation: + Type: AWS::EC2::SubnetRouteTableAssociation + Properties: + RouteTableId: !Ref Public1RouteTable + SubnetId: !Ref Public1Subnet + + Public2RouteTableAssociation: + Type: AWS::EC2::SubnetRouteTableAssociation + Properties: + RouteTableId: !Ref Public2RouteTable + SubnetId: !Ref Public2Subnet + + Private1RouteTableAssociation: + Type: AWS::EC2::SubnetRouteTableAssociation + Properties: + RouteTableId: !Ref Private1RouteTable + SubnetId: !Ref Private1Subnet + + Private2RouteTableAssociation: + Type: AWS::EC2::SubnetRouteTableAssociation + Properties: + RouteTableId: !Ref Private2RouteTable + SubnetId: !Ref Private2Subnet + + Public1DefaultRoute: + Type: AWS::EC2::Route + DependsOn: + - VPCGatewayAttachment + Properties: + RouteTableId: !Ref Public1RouteTable + DestinationCidrBlock: 0.0.0.0/0 + GatewayId: !Ref InternetGateway + + Public2DefaultRoute: + Type: AWS::EC2::Route + DependsOn: + - VPCGatewayAttachment + Properties: + RouteTableId: !Ref Public2RouteTable + DestinationCidrBlock: 0.0.0.0/0 + GatewayId: !Ref InternetGateway + + Private1DefaultRoute: + Type: AWS::EC2::Route + Properties: + RouteTableId: !Ref Private1RouteTable + DestinationCidrBlock: 0.0.0.0/0 + NatGatewayId: !Ref NATGateway1 + + Private2DefaultRoute: + Type: AWS::EC2::Route + Properties: + RouteTableId: !Ref Private2RouteTable + DestinationCidrBlock: 0.0.0.0/0 + NatGatewayId: !Ref NATGateway2 +``` + + +次のコマンドを実行し、この新しいバージョンをデフォルトバージョンとします。 + +```shell +cfn submit --set-default +``` + +`use-module.yaml` ファイルの内容を次のように更新します。 + + +```yaml +AWSTemplateFormatVersion: 2010-09-09 + +Resources: + + Vpc: + Type: CFNWORKSHOP::EC2::VPC::MODULE + Properties: + VpcCidr: 10.1.0.0/16 + NameTag: VPCModule +``` + + +deploy コマンドを実行し、スタックを更新します。 + +```shell +aws cloudformation deploy --template-file use-module.yaml --stack-name cfn-workshop-modules +``` +::: diff --git a/content/advanced/modules/create-example/index.ja.md b/content/advanced/modules/create-example/index.ja.md new file mode 100644 index 000000000..2cb1055ff --- /dev/null +++ b/content/advanced/modules/create-example/index.ja.md @@ -0,0 +1,255 @@ +--- +title: "サンプルモジュールの作成" +weight: 320 +--- + +### 概要 + +このラボでは、AWS アカウントで指定した AWS リージョンの AWS CloudFormation レジストリに、サンプルの CloudFormation モジュールをプライベート拡張で登録する手順を実施します。 + +この例では、デフォルト設定の関連リソースを含む [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/what-is-amazon-vpc.html) (Amazon VPC) 全体をデプロイするモジュールを作成します。この例を選定した理由は、VPC のように複雑な設定を中央集権的役割のチームがベストプラクティスな方法で定義し、他のチームが簡単に利用できるようにする方法を示すためです。 + +### 対象トピック + +このラボを修了すると、次のことができるようになります。 + +* モジュールを開発する際に活用すべき重要な概念を理解します。 +* [CloudFormation コマンドラインインターフェイス (CLI)](https://docs.aws.amazon.com/ja_jp/cloudformation-cli/latest/userguide/what-is-cloudformation-cli.html) を使用して新しいプロジェクトを作成し、そのモジュールをプライベート拡張として、AWS アカウント内で指定した AWS リージョンの CloudFormation レジストリに送信します。 +* CloudFormation テンプレートでモジュールを使用する方法を理解します。 + +### ラボを開始 + +#### サンプルモジュールに関するチュートリアル + +さあ、始めましょう!新しいディレクトリを作成し、そのディレクトリ内から以下のコマンドを実行します。 + +:::code{language=shell showLineNumbers=false showCopyAction=true} +mkdir module +cd module +cfn init +::: + +いくつかの質問に対し、回答を入力します。 + + Initializing new project + Do you want to develop a new resource(r) or a module(m) or a hook(h)?. + >> m + What's the name of your module type? + (::::::MODULE) + >> CFNWORKSHOP::EC2::VPC::MODULE + Directory /home/user/cfn101-workshop/module/fragments Created + Initialized a new project in /home/user/cfn101-workshop/module + +コマンドを実行することで、ディレクトリ内に何が作成されたのかを見てみましょう。 + +* `fragments/`: 自動生成された `sample.json` CloudFormation テンプレートファイル。 +* `.rpdk-config`: 上記の init コマンドを実行したときに指定した詳細を格納する設定ファイル。 +* `rpdk.log`: cfn cli によって実行されたアクションのログファイル。 + +まずは、不要なものを削除しましょう。このワークショップでは YAML 形式を使用するので、`sample.json` ファイルを削除します。このファイルは必要ありません。 + +:::code{language=shell showLineNumbers=false showCopyAction=true} +rm fragments/sample.json +::: + +CloudFormation モジュールは、このワークショップで既に作成しているものと同様に、標準のCloudFormationテンプレートを使用して作成されます。ただし、モジュールで使用できるテンプレートファイルは 1 つだけで、ネストされたスタックはサポートされていません。詳細については、[モジュール構造](https://docs.aws.amazon.com/ja_jp/cloudformation-cli/latest/userguide/modules-structure.html) ドキュメントの _Creating the module template fragment_ と _Considerations when authoring the template fragment_ をご参照ください。 + +次の図は、サンプルモジュールに含める VPC リソースを示しています。 + +![vpc-diagram](/static/advanced/modules/vpc.png) + +`fragments` フォルダー内にモジュール用の新しい YAML ファイルを作成します。 + +:::code{language=shell showLineNumbers=false showCopyAction=true} +touch fragments/module.yaml +::: + +テキストエディターでこのファイルを開き、以下の CloudFormatoin YAML コードを貼り付けます。 + + +:::code{language=yaml showLineNumbers=false showCopyAction=true} +AWSTemplateFormatVersion: 2010-09-09 + +Description: A full VPC Stack + +Parameters: + + VpcCidr: + Type: String + +Resources: + + Vpc: + Type: AWS::EC2::VPC + Properties: + CidrBlock: !Ref VpcCidr + EnableDnsHostnames: true + EnableDnsSupport: true + InstanceTenancy: default + + InternetGateway: + Type: AWS::EC2::InternetGateway + + VPCGatewayAttachment: + Type: AWS::EC2::VPCGatewayAttachment + Properties: + VpcId: !Ref Vpc + InternetGatewayId: !Ref InternetGateway + + EIP1: + Type: AWS::EC2::EIP + Properties: + Domain: vpc + + EIP2: + Type: AWS::EC2::EIP + Properties: + Domain: vpc + + NATGateway1: + Type: AWS::EC2::NatGateway + Properties: + SubnetId: !Ref Public1Subnet + AllocationId: !GetAtt EIP1.AllocationId + + NATGateway2: + Type: AWS::EC2::NatGateway + Properties: + SubnetId: !Ref Public2Subnet + AllocationId: !GetAtt EIP2.AllocationId + + Public1Subnet: + Type: AWS::EC2::Subnet + Properties: + VpcId: !Ref Vpc + AvailabilityZone: !Select [0, !GetAZs ''] + CidrBlock: !Select [0, !Cidr [!GetAtt Vpc.CidrBlock, 4, 14 ]] + MapPublicIpOnLaunch: true + + Public2Subnet: + Type: AWS::EC2::Subnet + Properties: + VpcId: !Ref Vpc + AvailabilityZone: !Select [1, !GetAZs ''] + CidrBlock: !Select [1, !Cidr [!GetAtt Vpc.CidrBlock, 4, 14 ]] + MapPublicIpOnLaunch: true + + Private1Subnet: + Type: AWS::EC2::Subnet + Properties: + VpcId: !Ref Vpc + AvailabilityZone: !Select [0, !GetAZs ''] + CidrBlock: !Select [2, !Cidr [!GetAtt Vpc.CidrBlock, 4, 14 ]] + MapPublicIpOnLaunch: false + + Private2Subnet: + Type: AWS::EC2::Subnet + Properties: + VpcId: !Ref Vpc + AvailabilityZone: !Select [1, !GetAZs ''] + CidrBlock: !Select [3, !Cidr [!GetAtt Vpc.CidrBlock, 4, 14 ]] + MapPublicIpOnLaunch: false + + Public1RouteTable: + Type: AWS::EC2::RouteTable + Properties: + VpcId: !Ref Vpc + + Public2RouteTable: + Type: AWS::EC2::RouteTable + Properties: + VpcId: !Ref Vpc + + Private1RouteTable: + Type: AWS::EC2::RouteTable + Properties: + VpcId: !Ref Vpc + + Private2RouteTable: + Type: AWS::EC2::RouteTable + Properties: + VpcId: !Ref Vpc + + Public1RouteTableAssociation: + Type: AWS::EC2::SubnetRouteTableAssociation + Properties: + RouteTableId: !Ref Public1RouteTable + SubnetId: !Ref Public1Subnet + + Public2RouteTableAssociation: + Type: AWS::EC2::SubnetRouteTableAssociation + Properties: + RouteTableId: !Ref Public2RouteTable + SubnetId: !Ref Public2Subnet + + Private1RouteTableAssociation: + Type: AWS::EC2::SubnetRouteTableAssociation + Properties: + RouteTableId: !Ref Private1RouteTable + SubnetId: !Ref Private1Subnet + + Private2RouteTableAssociation: + Type: AWS::EC2::SubnetRouteTableAssociation + Properties: + RouteTableId: !Ref Private2RouteTable + SubnetId: !Ref Private2Subnet + + Public1DefaultRoute: + Type: AWS::EC2::Route + DependsOn: + - VPCGatewayAttachment + Properties: + RouteTableId: !Ref Public1RouteTable + DestinationCidrBlock: 0.0.0.0/0 + GatewayId: !Ref InternetGateway + + Public2DefaultRoute: + Type: AWS::EC2::Route + DependsOn: + - VPCGatewayAttachment + Properties: + RouteTableId: !Ref Public2RouteTable + DestinationCidrBlock: 0.0.0.0/0 + GatewayId: !Ref InternetGateway + + Private1DefaultRoute: + Type: AWS::EC2::Route + Properties: + RouteTableId: !Ref Private1RouteTable + DestinationCidrBlock: 0.0.0.0/0 + NatGatewayId: !Ref NATGateway1 + + Private2DefaultRoute: + Type: AWS::EC2::Route + Properties: + RouteTableId: !Ref Private2RouteTable + DestinationCidrBlock: 0.0.0.0/0 + NatGatewayId: !Ref NATGateway2 +::: + + +この CloudFormation テンプレートには、CloudFormation を使用して VPC をデプロイしたことのある人ならご存知の 23 個のリソースがあります。コンポーネントが非常に多いため、デプロイするすべての VPC が標準的な方法で行われ、間違いや相違がないことを確認することが難しい場合があります。 + +これは CloudFormation モジュールの優れたユースケースです。リソースを 1 つのモジュールにまとめることができ、多くのチームが何度でも使用できるため、複雑さが解消され、何度も必要になった場合でもエラーや相違が生じる可能性がなくなります。 + +テンプレートには `VpcCidr` というパラメーターがあります。これはモジュールを使用する際に使用できるようになるため、ユーザーは標準デプロイを使用しながらも、ユースケースに合わせてカスタマイズすることができます。 + +`YAML` ファイルが完成したので、モジュールとして CloudFormation レジストリに送信する準備ができました。以下のコマンドを実行し、モジュールをデフォルトリージョンに登録します。リージョンを指定したい場合は、`--region` オプションをコマンドに追加します (例: `--region us-east-2`)。 + +:::code{language=shell showLineNumbers=false showCopyAction=true} +cfn submit +::: + +次のような出力が表示されます。 + +``` +Module fragment is valid. +Successfully submitted type. Waiting for registration with token '{token}' to complete. +Registration complete. +{'ProgressStatus': 'COMPLETE', 'Description': 'Deployment is currently in DEPLOY_STAGE of status COMPLETED', ... +... +``` + +これで [AWS CloudFormation コンソール](https://console.aws.amazon.com/cloudformation/) にアクセスすると、関連するレジストリページの `Activated extensions` セクションに新しいモジュールが表示されるはずです。 + +![activated-extensions](/static/advanced/modules/ActivatedExtensions.png) diff --git a/content/advanced/modules/index.ja.md b/content/advanced/modules/index.ja.md new file mode 100644 index 000000000..cac0f8085 --- /dev/null +++ b/content/advanced/modules/index.ja.md @@ -0,0 +1,38 @@ +--- +title: "モジュール" +weight: 300 +--- + +### はじめに + +このパートでは、開発したモジュールを使用して [AWS CloudFormtaion](https://aws.amazon.com/jp/cloudformation/) の作成、プロビジョニング、管理に関する機能を拡張する方法に焦点を当てます。 + +これまでは、CloudFormation を使用して AWS が公開しているリソースタイプを使用してアプリケーションを構築する方法を見てきました。このラボでは、[AWS CloudFormation モジュール](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/modules.html)を活用し、同じ AWS アカウントとリージョンを利用するユーザーが何度も使用できる再利用可能なテンプレートスニペットを作成します。 + +CloudFormation モジュールの一般的な使用例は、企業内での利用の際、企業固有であったり、独自のロジックを含んだベストプラクティスや一般的な構成コンポーネントを体系化することです。 + +モジュールは CloudFormation の第一級オブジェクトです。CloudFormation では、あらゆる AWS リソースを管理するのと同様にモジュールを管理できます。モジュールのソフトウェア開発ライフサイクル (SDLC) プロセスは次のように要約できます。 + +1. モジュールの開発とテストの利用に必要なツールをインストールします。 +2. モジュールの開発を開始します。 +3. 準備ができたら、モジュールを [AWS CloudFormtaion レジストリ](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/registry.html) に送信します。 +4. CloudFormation を使用してモジュールを管理します。他の AWS リソースタイプと同様に、CloudFormation テンプレートにモジュールとそのプロパティを記述します。 + +::alert[モジュールを CloudFormation レジストリにプライベート拡張として登録するか、パブリック拡張として登録するかを選択できます。このラボでは、プライベート拡張の例を取り上げます。]{type="info"} + +プライベート拡張を登録すると、AWS アカウントの AWS CloudFormation レジストリで利用できるようになります。プライベート拡張を使用すると、お客様が所有し、テストや実験に使用している AWS アカウントなどのサンドボックス環境でリソースタイプの動作をテストできます。 + +必要に応じて、モジュールを、他の [AWS CloudFormation StackSets を使用する AWS リージョン](https://docs.aws.amazon.com/ja_jp/cloudformation-cli/latest/userguide/publish-extension-stacksets.html)にデプロイすることができます。 + +プライベート拡張の詳細については、[CloudFormation でのプライベートエクステンションの使用](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/registry-private.html) をご参照ください。パブリック拡張については、[Publishing extensions to make them available for public use](https://docs.aws.amazon.com/ja_jp/cloudformation-cli/latest/userguide/publish-extension.html) をご参照ください。 + +::alert[モジュールの使用には追加料金はありません。お支払いいただくのは、モジュールがスタック内で解決するリソース分のみです。]{type="info"} + +::alert[スタックで許可される最大リソース数やテンプレート本体の最大サイズなどの CloudFormation のクォータは、そのテンプレートに含まれるリソースがモジュールからのものであるかどうかにかかわらず、処理されたテンプレートに適用されます。]{type="info"} + +### モジュールの構造 + +モジュールは次の 2 つの主要部分で構成されています。 + +* [テンプレートフラグメント](https://docs.aws.amazon.com/ja_jp/cloudformation-cli/latest/userguide/modules-structure.html#modules-template-fragment)。定義したモジュールパラメータを含め、モジュールを使用してプロビジョニングするリソースと関連情報を定義します。 +* テンプレートフラグメントに基づいて生成される[モジュールスキーマ](https://docs.aws.amazon.com/ja_jp/cloudformation-cli/latest/userguide/modules-structure.html#modules-schema)。モジュールスキーマは、テンプレートフラグメントで定義したコントラクトを宣言し、CloudFormation レジストリ内のユーザーに表示します。 diff --git a/content/advanced/modules/prerequisites/index.ja.md b/content/advanced/modules/prerequisites/index.ja.md new file mode 100644 index 000000000..f5f20bd49 --- /dev/null +++ b/content/advanced/modules/prerequisites/index.ja.md @@ -0,0 +1,18 @@ +--- +title: "前提条件" +weight: 310 +--- + +### モジュール開発ツール + +次のセクションに進む前に、以下のツールをマシンにインストールしてください。 + +* [CloudFormation コマンドラインインターフェイス (CLI)](https://docs.aws.amazon.com/ja_jp/cloudformation-cli/latest/userguide/what-is-cloudformation-cli.html) をインストールします。 + + `pip` を使用して CloudFormation CLI をインストールします。 + + :::code{language=shell showLineNumbers=false showCopyAction=true} + pip install cloudformation-cli + ::: + +::alert[CloudFormation CLI のバージョン 1.0 が既にインストールされている場合は、バージョン 2.0 にアップグレードすることをお勧めします。アップグレードには、`pip install` コマンドの `--upgrade` オプションを使用できます。詳細については、こちらの[ページ](https://docs.aws.amazon.com/ja_jp/cloudformation-cli/latest/userguide/what-is-cloudformation-cli.html#resource-type-setup) の下部に記載の *Upgrading to CFN-CLI 2.0* をご参照ください。]{type="info"}