はじめに
最近、IaC(Infrastructure as Code)でAWS環境を構築する必要がありましたが、IaCの知見がない私は環境ごとにYAMLファイルを作成するという非効率な方法をとっていました…
正直環境ごとにファイル内の設定を書き換えるのは手間がかかるので、もっと便利な方法がないかと探していてこの方法にたどり着きました!
備忘録としてこの記事では、AWS CloudFormationテンプレートでパラメータを指定し、環境ごとに異なるリソースを作成する方法について説明します!
前提条件
- AWSアカウント
- AWS CloudFormationの基本的な知識
CloudFormationテンプレートの例
以下に示すのは、環境ごとに異なるリソースを作成するためのCloudFormationテンプレートの例です。
AWSTemplateFormatVersion: "2010-09-09"
Description: Prefix
Parameters:
Prefix:
Type: String
AllowedValues:
- dev
- stg
- prd
Description: Prefix
DevelopAccountId:
Description: Develop Account ID
MaxLength: 12
MinLength: 12
Type: String
Default: ************
StagingAccountId:
Description: Staging Account ID
MaxLength: 12
MinLength: 12
Type: String
Default: ************
ProductionAccountId:
Description: Production Account ID
MaxLength: 12
MinLength: 12
Type: String
Default: ************
Conditions:
CreateDevResources: !Equals [!Ref AWS::AccountId, !Ref DevelopAccountId]
CreateStagingResources: !Equals [!Ref AWS::AccountId, !Ref StagingAccountId]
CreateProdResources: !Equals [!Ref AWS::AccountId, !Ref ProductionAccountId]
CreateDevOrStagingResources:
!Or [Condition: CreateDevResources, Condition: CreateStagingResources]
パラメータの詳細
このテンプレートでは、以下のパラメータを使用しています。
- Prefix: 環境のプレフィックスを指定します。dev, stg, prdのいずれかの値を取得
- DevelopAccountId: 開発用のAWSアカウントIDを指定します。12文字の文字列
- StagingAccountId: ステージング用のAWSアカウントIDを指定します。12文字の文字列
- ProductionAccountId: 本番用のAWSアカウントIDを指定します。12文字の文字列
条件の詳細
このテンプレートでは、以下の条件を使用しています。
- CreateDevResources: 現在のAWSアカウントIDが開発アカウントIDと一致する場合にtrue
- CreateStagingResources: 現在のAWSアカウントIDがステージングアカウントIDと一致する場合にtrue
- CreateProdResources: 現在のAWSアカウントIDが本番アカウントIDと一致する場合にtrue
- CreateDevOrStagingResources: 現在のAWSアカウントIDが開発またはステージングアカウントIDと一致する場合にtrue
おわりに
この記事ではCloudFormationテンプレートでパラメータを使用し、環境ごとに異なるリソースを作成する方法を紹介しました。この方法を使用することで、開発、ステージング、本番環境ごとに異なる設定を1つのYAMLファイルで簡単に管理することができます。