$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

あー憂鬱になってきたと思ったら

どうせまた時期だろうなと思って、自分のブログを検索したら異常にに正確なリズムで、逆に面白くなってしまった。

http://blog.shibayu36.org/search?q=憂鬱

一方で、今年は家に帰るたびに子供に癒されていて、いつもより全然しんどくなくてすごい。

CloudFormationのクロススタック参照を利用してネットワーク設定とWebサーバ設定を分ける

「Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版」でAWSサーバ構築とCloudFormationに入門した - $shibayu36->blog;で、サーバ構築を1ファイルで行い、CloudFormationの1スタックでネットワーク設定もWebサーバ設定もDBサーバ設定も書いていた。しかし考えてみると

  • ネットワーク設定はほぼ変わらないのであまり触りたくないはずだけど、Webサーバはぽこぽこ新しいのを作りたくなりそう
  • 全ての設定が1ファイル1スタックで行われているのは、管理が大変そう

と思った。

調べてみるとクロススタック参照というのを利用すると、スタックを分けて設定できるようだった。そこで、これを利用し、ネットワーク設定とWebサーバ設定を分けるようにしてみた。

スタック設定の分割を行う

参考になったのは AWS CloudFormation の更新 – YAML、クロススタック参照、簡略化された置換 | Amazon Web Services ブログ の記事。これによると、参照される側はOutputsを利用して設定をエクスポートし、参照する側はImportValueを利用して設定を読み込めば良いようだ。よって次の作戦で良い。

  • ネットワーク設定では、WebサーバのEC2インスタンス設定に利用するサブネットとセキュリティグループの設定をエクスポートする
  • Webサーバの設定では、!ImportValueを利用して、設定を読み込む

やってみた結果がこちら。

大体元々の全部入りの設定と同じ。違うところとしては二つ。一つ目はネットワーク側の以下の部分で、aws-network-basis:PublicSubnetやaws-network-basis:SecurityGroupForWebServerという名前で別スタックから参照できるようにしているところ。

Outputs:
  PublicSubnet:
    Value: !Ref PublicSubnet
    Export:
      Name: aws-network-basis:PublicSubnet
  SecurityGroupForWebServer:
    Value: !Ref SecurityGroupForWebServer
    Export:
      Name: aws-network-basis:SecurityGroupForWebServer

二つ目はWebサーバ側でImportValueを使って読み込んでいるところ。

      NetworkInterfaces:
        - AssociatePublicIpAddress: true
          DeviceIndex: 0
          DeleteOnTermination: true
          PrivateIpAddress: 10.0.1.10
          SubnetId: !ImportValue aws-network-basis:PublicSubnet
          GroupSet:
            - !ImportValue aws-network-basis:SecurityGroupForWebServer

これで設定ファイルの作成は完了。

設定を使ってスタックを作成する

コンソールのスタック作成から行う。ネットワークのスタック作成 -> Webサーバのスタック作成の順で。

f:id:shiba_yu36:20180417074102p:plain

画像のとおり、二つのスタックが出来て、aws-network-basis-networkの出力タブにはエクスポートされた値が載っている。これでネットワーク設定とWebサーバ設定を分割できた。

あとはWebサーバ側に設定を増やしたり、Parametersのような仕組みを使って、PrivateIpAddressだけ変えられるようにしておけば、ぽこぽこWebサーバを作成することができそうですね。

まとめ

今回はCloudFormationのクロススタック参照を利用してネットワーク設定とWebサーバ設定を分けるようにしてみた。スタック設定を分割しておくと、あまり変えたくないネットワーク設定側をいじらずに、Webサーバをぽこぽこ作れるようになったので良さそう。

「Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版」でAWSサーバ構築とCloudFormationに入門した

AWSのネットワークやサーバ構築の基本知識が欲しかったのと、CloudFormationでどうAWSの構成を作るかについて知りたかったので、「Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版」を読みながらCloudFormationの設定を作るということをやった。AWS CloudFormation への入門に「Amazon Web Services 基礎からのネットワーク&サーバー構築」を使ってみた - えいのうにっきのやり方を真似させてもらった感じ。

この本はAWSでのサーバ構築ハンズオンのような形で書かれているので、とにかく書かれている操作をやってみるとAWS上でサーバが構築されていって、AWSのサーバ構築の基本知識について学ぶことができた。これまでEC2については知っていたけど、VPC周りの知識は全くなかったが、この本によってAWSVPC、サブネット、ルートテーブル、インターネットゲートウェイ、セキュリティグループあたりの知識がだいぶ身に付いたと感じる。なので、AWSに入門したい!と思ったらまず読むものとして最適であった。


また、この本に従ってCloudFormationの設定も書いていった。書いたコードは https://github.com/shibayu36/aws-network-basis 。この本をトレースしながらCloudFormationで設定を書いていったのも非常に良かった。理由は

  • 今回使われるAWSコンポーネント達の仕組みをちゃんと理解しないと、CloudFormationの設定を書けないので、理解が進む
  • CloudFormationの入門を探すと、VPCを構築する設定例が出てくるが、そもそもVPCの設定自体が初心者にはとっかかりにくい。そのためVPCの設定と一緒に学ぶことで、CloudFormationの入門もしやすかった

PR形式でCloudFormationの設定を進めていって、https://github.com/shibayu36/aws-network-basis のREADME.mdにまとめたので、参考にどうぞ。


こんな感じで、この本を読みながらCloudFormationの設定を書いていくのが非常に勉強になった。非常に良い本だったのでおすすめです!!!

参考