【CloudFormation入門】S3をコードで作成してみた!

AWS

はじめに

今回は、AWSにおけるIaCサービスであるCloudFormationを使用していきます。
CloudFormationは、AWSリソースをyamlコードで記述して、実行することで、自動構築できるサービスです。
CloudFormationを利用するメリットと具体例は主に以下の通りです。

  • 一度、コードにしたyamlは、そのまま他の環境に使い回すことができる
    • 開発環境用に記述したyamlが問題ないことを確認したら、本番環境で実行するだけで、本番用のリソースが作成される
  • 手順書の管理コストが削減される
    • GUI操作手順だと、リソースに修正が加わる度に更新が必要である。しかし、コードであれば、手順は同じでyamlの修正のみで対応可能である
  • パラメータ管理コストが削減される
    • 本来GUI操作手順の場合、リソース構築前にパラメータを定義しておくファイルやパラメータシートを必要とする。しかし、コードであれば、検証段階でコードにパラメータが記述されるので、別途用意するパラメータシートが不要になる

※yaml以外にjsonで記述することも可能

では、早速yamlを記述して、リソースを構築してみましょう。

今回は、以下の公式ドキュメントを参照します。

テンプレートの基礎に関する説明 - AWS CloudFormation
テンプレートでリソース、パラメーター、およびその他のコンポーネントを使用する方法とこれらがどのように連携するかについての基礎を学習します。

S3バケットを作成する

まずは、S3バケットを作成していきます。

最もシンプルな記述で単純作成する

以下は、S3バケットを作成するシンプルなyamlコードです。

  1. Resources: 配下に作成したいリソースを定義します。
  2. HelloBucket: 配下の作成したリソースを指す論理名を付与できる
  3. Type: 作成したいリソース種別
Resources: #1
  HelloBucket: #2
    Type: 'AWS::S3::Bucket' #3

こちらのコードは、細かいパラメータを指定していません。これは、AWS::S3::Bucketが必須のパラメータを要求しないため短いコードでデフォルト値のS3バケットを作成することができます。
オプション指定できるパラメータは多数あるので、詳細に指定したいケースでは細かく設定を記述します。

コードの実行

  • このコードをPCのローカル環境に保存
  • CloudFormation画面を開き、スタックの作成>新しいリソース(標準)を選択
  • テンプレートの準備完了>テンプレートファイルのアップロード>保存したyamlファイルを選択>次へを選択
  • 任意のスタック名を入力して次へを選択
  • スタックオプション画面では、何も変更せず次へを選択
  • 送信を選択

しばらくしてイベントタブを確認するとリソース作成が完了したことがわかります。
リソースタブから作成されたリソース画面を開くことができます。

複数リソースの作成と詳細パラメータを指定する

下記のコードでは、s3と併せてCloudFrontを作成します。
CloudFrontはユーザーに近いロケーションでhttpsなどでリクエストしたデータのキャッシュをして、webページ閲覧などの高速化を支援するサービスです。
S3にhtmlファイルなどを配置して配信する際に併用することがあります。

  • ポイント
    • istributionConfig: CloudFrontの作成単位であるディストリビューションにおけるパラメータを指定している
    • DomainName: myBucketという論理名で、前半で作成しているS3バケットを指定している
    • DefaultCacheBehavior: キャッシュを提供するうえでの許可するプロトコルを指定している。以下のコードは allのためhttpとhttpsを許可する
Resources:
  myBucket:
    Type: 'AWS::S3::Bucket'
  myDistribution:
    Type: 'AWS::CloudFront::Distribution'
    Properties:
      DistributionConfig:
        Origins:
          - DomainName: !GetAtt 
              - myBucket
              - DomainName
            Id: myS3Origin
            S3OriginConfig: {}
        Enabled: 'true'
        DefaultCacheBehavior:
          TargetOriginId: myS3Origin
          ForwardedValues:
            QueryString: 'false'
          ViewerProtocolPolicy: allow-all

前述の手順と同様にyamlテンプレートを作成して、CloudFormationで実行すると以下のように2つのリソースが作成されます。

リソースタブから作成されたリソースを確認すると、S3のほかにCloudFrontも作成されていることを確認できます。

まとめ

今回は、CloudFormation入門ということで最もシンプルな内容で体験してみました。GUIでの構築意外にもIaCにも取り組んでいきたいと思います!!

作成したリソースは、忘れずに削除しておきましょう!

コメント

タイトルとURLをコピーしました