🐵

AWS CloudFormation 入門

2022/09/12に公開約3,000字

CloudFormationとは

CloudFormationとはIaC(Infrastructure as Code)サービスの一つです。
AWSの構成をコードで管理して、CloudFormationに読み込ませることで、複数の環境に同様のインフラを高速かつ正確に展開できます。

CloudFormationの基本的な利用の流れ

図1

参照元:AWS CloudFormation の仕組み

1. CloudFormationのテンプレートを作成する。

テンプレートの実態はただのyaml形式のファイルです。
AWSリソースを定義したYAMLファイルをテンプレートと言います。

下記はS3バケットを作成するテンプレートの例です。

sample-template.yaml
AWSTemplateFormatVersion: 2010-09-09
Resources: 
  s3Bucket:
    Type: AWS::S3::Bucket
    Properties: 
      BucketName: zenn-kokorozashi-bucket

具体的な構文の説明は後ほどします。
また図1の②はただ「ファイルをローカル or S3に保存してね」というだけなので説明を割愛します。

2. CloudFormationのスタックを作成する。

先ほど作成したテンプレートファイルを用いて、スタックを作成します。
スタックとはAWSリソースを管理するユニットのようなものです。
「AWSリソースを管理する」だけだとわかりずらいので、もう少し説明します。

例えば、2つのS3バケットを定義した1つのテンプレートからは、2つのS3バケットを管理する1つのスタックが作成されます。
スタックを更新すると2つのS3バケットも更新されます。
スタックを削除すると2つのS3バケットも削除されます。

このようにスタックが各リソースに自動で設定を反映させることを、AWSリソースを管理すると言います。

後のチュートリアルでは、AWS CLIを用いてスタックの作成を行います。

チュートリアル

このチュートリアルでは実際にS3バケットをCloudFormationで作成していきます。

前提条件

  • MacOS Monterey@12.4
  • aws cli@2.7.2
  • awsのプロファイルが設定済み → 設定方法

1.テンプレート内でS3バケットを定義する。

template.yaml
AWSTemplateFormatVersion: 2010-09-09
Resources: 
  s3Bucket:
    Type: AWS::S3::Bucket
    Properties: 
      BucketName: sample-bucket #バケット名

構文解説

第一階層では以下のプロパティを指定できます。

  • AWSTemplateFormatVersion
  • Description
  • Metadata
  • Parameters
  • Mappings
  • Conditions
  • Resources
  • Outputs

この中で必須プロパティは「AWSTemplateFormatVersion」と「Resources」です。
今回は入門なので必須プロパティのみで作成します。
Resourcesセクションでは具体的なAWSリソースの定義を行います。

Resourcesセクションの第二階層では、テンプレート内でのAWSリソースの任意の名前を設定します。
例ではs3Bucketとなっていますが、sampleBucketに変えてもテンプレート内の変数なので実際に作成されるS3バケットには何も影響はありません。

Resourcesセクションの第三階層では、TypePropertiesを定義します。
Typeは具体的なAWSサービスや機能を指定します。
AWS::<サービス名>::<具体的な機能>のイメージです。
例えばS3だけでも以下のTypeがあります。

  • AWS::S3::AccessPoint
  • AWS::S3::Bucket
  • AWS::S3::BucketPolicy
  • AWS::S3::MultiRegionAccessPoint
  • AWS::S3::MultiRegionAccessPointPolicy
  • AWS::S3::StorageLens

PropertiesはAWSリソースの具体的な設定を定義します。
今回はTypeAWS::S3::BucketなのでBucketNameを指定することが可能で、
ここでS3バケット名を定義することができます。

2. テンプレートからスタックを作成し、S3バケットを自動生成させる。

template.yamlが保存されているディレクトリに移動して以下を実行します。

$ aws cloudformation create-stack --stack-name cfn-tutorial --template-body file://template.yaml
  • stack-name ・・・作成するスタックの名前を指定します。
  • template-body・・・テンプレートが格納されているファイルパスを指定します。

CloudFormationコンソールで作成したスタックのステータスがCREATE_COMPLETEになっていれば完了です!

あとは、AWSコンソール上からS3バケットが作成されていれば成功です!🎉

最後に

CloudFormationはどこの現場でもほぼ必須なサービスの一つです。
AWSエンジニアを目指している方はぜひ深く学習してみてください!
以上、CloudFormation入門でした!

Discussion

ログインするとコメントできます