今回の課題
既存のリソースをCloudFormationを使って、コードで管理できるようにしたい。
これまで、下記の記事の投稿したようにデータ基盤の構築に挑戦した。
次は、AWSのインフラをコードで管理するということに挑戦してみる。
◼︎これまで実装してきたインフラやデータ基盤など
・RDSのスナップショットをlambdaでS3にエクスポート
・S3のデータをSnowflakeにロード
・SnowflakeのデータをRedashで可視化
[追記]簡単に既存リソースをコード化する方法があった
なぜCloudFormationを使うのか
CloudFormation(IaC)を使うメリットを調べてみた。
これまでAWSのインフラをGUIで構築してしまっていたので、
今後はCloudFormationを使用して構築するようにしようと思う。
-
作業の効率化ができる
コードでインフラの環境の構築や管理を自動化することで、手作業よりも工数を削減できて作業効率が上がる。
また、同じ構成のサーバーを複数用意したい場合、1から構築する手間が省ける。 -
人的ミスを削減できるため
コードに基づいて自動的にインフラが構築されるので人的ミスを避けることができる。
上記でも記述した、同じ構成のサーバーを複数用意したい場合に、ミスが発生することを避けたりできる。 -
Gitなどでコードのバージョン管理ができるため
コード履歴を保存することができるので、管理やメンテナンスがしやすくなる。
進めた手順:既存VPCをCloudFormationのスタックにインポートしてみる
これまで、AWSのリソースをGUIで構築してしまっていたので、
既存VPCをCloudFormationのスタックにインポートしてみることにした。
1)テンプレートファイルを用意する
既存リソースをインポートする場合、
事前にリソースに合ったテンプレートファイルを用意しなければいけないようだった。
なので、まずはymlで既存VPCのテンプレートファイルを用意することにした。
※vscodeでテンプレートファイルを用意する場合は、こちらを併せて使うと便利。
◼︎用意したテンプレート(VPCを構築する用)
AWSTemplateFormatVersion: 2010-09-09
Description: Existing VPC Stack
Resources:
VPC:
Type: AWS::EC2::VPC
DeletionPolicy: Retain
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: Rails-EC2-RDS-20230327-vpc
InternetGateway:
Type: AWS::EC2::InternetGateway
DeletionPolicy: Retain
Properties:
Tags:
- Key: Name
Value: Rails-EC2-RDS-20230327-igw
PublicSubnet1:
Type: AWS::EC2::Subnet
DeletionPolicy: Retain
Properties:
VpcId: !Ref VPC
AvailabilityZone: ca-central-1
CidrBlock: 10.0.0.0/20
MapPublicIpOnLaunch: true
Tags:
- Key: Name
Value: Rails-EC2-RDS-20230327-subnet-public1-ca-central-1a
PublicSubnet2:
Type: AWS::EC2::Subnet
DeletionPolicy: Retain
Properties:
VpcId: !Ref VPC
AvailabilityZone: ca-central-1
CidrBlock: 10.0.16.0/20
MapPublicIpOnLaunch: true
Tags:
- Key: Name
Value: Rails-EC2-RDS-20230327-subnet-public2-ca-central-1b
PublicRouteTable:
Type: AWS::EC2::RouteTable
DeletionPolicy: Retain
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value: Rails-EC2-RDS-20230327-rtb-public
SecurityGroup:
Type: AWS::EC2::SecurityGroup
DeletionPolicy: Retain
Properties:
GroupDescription: "Security group with no ingress rule"
VpcId: !Ref VPC
2)作成したテンプレートをCloudFormationのスタックにインポートする
2)-1.作成したテンプレートをインポートする
CloudFormationのコンソールの、スタックの作成
>既存のリソースを使用(リソースをインポート)
からステップ2のテンプレートの指定
まで飛ぶ。
下記のテンプレート指定
のページにて、1)
で作成したテンプレートを選択する。
2)-2.リソースを識別するためのIDを入力する
次にリソースを識別
ページに飛ぶので、
ここでCloudFormationで管理したい既存リソースのIDを一つ一つ埋めていく。
入力が終わったら次へ
をクリックする。
※こちらをきちんと入力できていなくてエラーに苦しんだので、既存リソースのIDの入力に間違いがないかは、きちんと確認するようにする
2)-3.あとはスタック名
を設定すればOK
ステップ4のスタックの詳細を指定
ページに飛び、パラメータを変更する。
次へ
をクリックし、ステップ5のレビュー
ページでスタック名
を設定して登録完了。
まとめ
以上で、既存VPCをコードで管理することができるようになった。
参考記事
いろいろな記事を見て、CloudFormationについて勉強しながら、
今回の記事の内容の実装に挑戦した。