cloudFormation
https://aws.amazon.com/jp/cloudformation/
クラウド環境内のすべてのインフラストラクチャリソースを記述してプロビジョニングするための共通言語を提供します。
jsonまたはyamlファイルに構築したい環境を記載して、AWSの各サービスを起動することができる。
メリットとしては、テキストファイル管理(Infrastructure as code)できるのでインフラの構造をversion管理できるようになる。
cloudFormationの記法
セクション名 | 役割 | 必須 |
---|---|---|
AWSTemplateFormatVersion | テンプレートのバージョンを記載する。 | × |
Description | テンプレートのコメントを記載する。 | × |
Metadata | テンプレートの詳細情報を記載する。 | × |
Parameters | 作成時に自由に指定できる値を記載する。 | × |
Mappings | Key, Valueを記載する。 | × |
Resources | 実行する処理を記載する。 | ○ |
Outputs | 実行後、出力したい値を記載する。 | × |
Parameter
parameterは、スタックを実行する際に自由に値を入力し指定することができる。
例えば、事前にVPCを作成していた場合にそのVPCのIDを入力することで、入力したVPC上で作成される。
Parameters:
vpcId:
Type: String
subnetId:
type: String
instanceType:
type: String
Default: t2.micro
AllowedValues:
- t2.micro
- t2.small
property名 | 役割 |
---|---|
type | 入力できるデータ型を指定する。 |
default | 初期値を指定する。 |
AllowedValues | 入力できる値を指定する。 |
Description | 値の説明を指定する。 |
上記の場合、vpcId
subnetId
はString型のみ有効で、instanceType
は初期値にt2.micro
が指定されており、String型のみ有効でt2.micro
かt2.small
しか入力できない。
その他、使用できるパラメーター
Resources
作成していくAWSの情報を記載する。
Resources:
ec2Instance:
Type: AWS::EC2::Instance
Properties:
AvailabilityZone: !Sub ${AWS::Region}a
InstanceType: !Ref instanceType
実行するリージョンのaで入力したインスタンスタイプのサーバーのインスタンスを作成させる。
type
大量にあるので、とりあえず一部だけ。
type名 | 役割 | 公式 |
---|---|---|
AWS::EC2::VPC | VPCを指定する。 | リファレンス |
AWS::EC2::Subnet | サブネットを指定する。 | リファレンス |
AWS::EC2::InternetGateway | インターネットゲートウェイを指定する。 | リファレンス |
AWS::EC2::VPCGatewayAttachment | インターネットゲートウェイをアタッチする。 | リファレンス |
AWS::EC2::SecurityGroup | セキュリティグループを指定する。 | リファレンス |
AWS::EC2::SecurityGroupIngress | リファレンス | |
AWS::EC2::SpotFleet | スポットフリートを指定する。 | リファレンス |
AWS::ECS::Service | ECSサービスを作成する。 | リファレンス |
AWS::ECS::Cluster | ECSクラスターを作成する。 | リファレンス |
AWS::ECS::TaskDefinition | ECSにタスクを定義を追加する。 | リファレンス |
AWS::ECR::Repository | Dockerイメージ用にリポジトリを指定する。 | リファレンス |
AWS::IAM::Role | IAMロールを作成する。 | リファレンス |
AWS::S3::Bucket | S3のバケットを作成する。 | リファレンス |
AWS::ElasticLoadBalancingV2::LoadBalancer | ALBまたは、NLBを指定する。 | リファレンス |
AWS::ElasticLoadBalancingV2::Listener | Load Balancerにリスナーを追加する。 | リファレンス |
AWS::ElasticLoadBalancingV2::TargetGroup | Load Balancerにターゲットを追加する。 | リファレンス |
AWS::Route53::RecordSetGroup | Route53を追加・設定する。 | リファレンス |
AWS::Logs::LogGroup | Logのグループを追加する。 | リファレンス |
AWS::CodeBuild::Project | build環境を作成する。 | リファレンス |
AWS::CodePipeline::Pipeline | ソースの変更方法を記述する。 | リファレンス |
Outputs
Resourcesが実行された後に、記載したデータを他のスタックに引き継ぐことができる。
Outputs:
vpcId:
Value: !Ref vpcId
Export:
name: vpc-dev
他のスタックで、vpc-dev
として呼び出すことができるようになる。
関数一覧
Fn名 | 役割 |
---|---|
Ref | 指定した名前のValueを返却する。 例) !Ref vpcId |
Sub | 変数に置き換えた値を返却する。 例) !Sub ${AWS:Region}a |
ImportValue | 他のスタックでOutputされた値を返却する。 例) !ImportValue vpc-dev |
!Refなどの書き方は、省略形です。他の書き方は下記の形式。
Ref : vpcId
Fn::Sub : ${AWS:Region}a
まとめ
cloudFormationでテンプレートを作っておけば、新しくプロジェクトを作成するときなど、コピペで少し変えるだけで使えるのでかなり便利。それにコンソールだと、以前した操作を辿れないので覚えておかないといけないが、テキストファイルだと、Version管理もできて、かなり楽になる。