Help us understand the problem. What is going on with this article?

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

構築目的と背景

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

業務で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のテンプレートにパスワードが記載されてしまうので、ユーザー作成は別途検討が必要だと感じました。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした