LoginSignup
9
3

More than 3 years have passed since last update.

CloudFormationでEC2の初期構築の工数削減

Last updated at Posted at 2019-12-02

構築目的と背景

お断り:目新しい情報はないかと思います。

業務でCloudFormationを活用するようになりました。
その中で単にEC2を作成した場合、作成後の手作業が多く自動化のありがたみが薄いと感じました。
そこでcfn-init ヘルパースクリプトを活用したいと思います。
※AmazonLinux2では上記のヘルパースクリプトが標準でインストールされている為、前準備は不要です。

できること

  • コマンドの実行
  • ファイル作成
  • ユーザー/グループの作成
  • パッケージのインストール
  • サービスの起動設定
  • ソース(アーカイブファイルをダウンロード)

活用内容

私が活用したのはパッケージのインストールとコマンドの実行です。

パッケージ

  • yumでインストールが可能なものはパッケージ名を記載
    • バージョンに関しては[]であればOSがインストールできる最新版がインストールされます。
    • 指定のバージョンがあればリストの書式で記載してください。
    • 更に新しいバージョンを指定したい場合はrpmにURLを記載することでインストールが可能となります。
  EC2:
    Type: AWS::EC2::Instance
    Metadata: 
      AWS::CloudFormation::Init: 
        config:
          packages:
            rpm:
              mysql80-community-release: https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
            yum: 
              python3: []
              mysql-community-client: []
              git: 
                - "2.20.1"

コマンド

Amazon Linux2であればamazon-linux-extrasを使ってインストールすることもありますし、
Pythonであればpip installもあります。他にもyum以外の手段はあるかと思います。
それらは上記パッケージのインストールでは対応できない(と思ってます)のでコマンドにて対応します。

また、名前のアルファベット順にコマンドが実行される為、順番に考慮が必要な場合は
コマンド名に数字を付けておくと良いです。

  EC2:
    Type: AWS::EC2::Instance
    Metadata: 
      AWS::CloudFormation::Init: 
        config:
          commands: 
            01php73:
              command: "amazon-linux-extras install php7.3"
            02pytest:
              command: "pip3 install pytest"
            03mount:
              command: "mkdir -p /home/storage"
            04mount:
              command: "echo \"xxx.xxx.xxx.xxx:/storage /home/storage nfs nolock,hard 0 0\" >> /etc/fstab"
            05mount:
              command: "mount -a"

適用方法

上記をCloudFormationのテンプレートに記載しただけでは適用されません。
UserDataへcfn-init ヘルパースクリプトを実行する手順の記載が必要です。

      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash
          yum -y update
          /opt/aws/bin/cfn-init --stack ${AWS::StackName} --resource EC2 --region ${AWS::Region}

まとめ

上記を駆使すると工数が削減でき、手作業よりも結果にブレがなく良いのではないでしょうか。

余談

ユーザー作成ですがuidが選ぶことが可能ですが、強制で/sbin/nologinとして作成する為、用途が限定されてしまいます。
コマンドにて対応するとCloudFormationのテンプレートにパスワードが記載されてしまうので、ユーザー作成は別途検討が必要だと感じました。

参考

9
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
3