最近ちょくちょくCloud9の環境を構築することがあったので、CloudFormationで構築することにしてみました。
先日のブログ記事で、VPCやSubnetの構築をCloudFormationで構築していたのですが、これを使います。
上で記したものは、OutputにVPC IDなどを出力させていましたが、Parameter Storeに保存させてみようと思い立ち、以下のように記述してみました。
# (略) Resources: # VPCの作成 VPC: Type: AWS::EC2::VPC Properties: CidrBlock: !Ref VPCCIDER InstanceTenancy: default EnableDnsSupport: true EnableDnsHostnames: true Tags: - Key: Name Value: !Sub ${ProjectName}-vpc SSMVPCId: Type: AWS::SSM::Parameter Properties: Name: !Sub /${ProjectName}/VPCId Type: String Value: !Ref VPC # 一つ目のPublic Subnetの作成 PublicSubnet1: Type: AWS::EC2::Subnet Properties: CidrBlock: !Ref PublicSubnet1CIDER VpcId: !Ref VPC AvailabilityZone: !Select [ 0, !GetAZs ] MapPublicIpOnLaunch: true Tags: - Key: Name Value: !Sub ${ProjectName}-public-subnet1 SSMPublicSubnet1Id: Type: AWS::SSM::Parameter Properties: Name: !Sub /${ProjectName}/PublicSubnet1Id Type: String Value: !Ref PublicSubnet1 # (以下略)
AWSのドキュメントは以下を参照しました。
これを実行することで、Paramater Storeに値が保存されます。
あとはCloud9を作成するYAMLファイルを書けばOK。以下のように書きました。
AWSTemplateFormatVersion: 2010-09-09 Description: Create Cloud9 Parameters: ProjectName: Type: String PublicSubnet1: Type: AWS::SSM::Parameter::Value<AWS::EC2::Subnet::Id> Resources: Cloud9: Type: AWS::Cloud9::EnvironmentEC2 Properties: AutomaticStopTimeMinutes: 30 ConnectionType: CONNECT_SSM Description: My Cloud9 ImageId: amazonlinux-2-x86_64 InstanceType: t2.micro Name: !Sub ${ProjectName}-Cloud9 SubnetId: !Ref PublicSubnet1
AWSのドキュメントは以下を参照。
Parameter Storeからの値の読み取りには、AWS::SSM::Parameter::Value<AWS-specific parameter type>
を使えば良いので、それをParametersの部分で使っています。
実行すると、無事Cloud9が構築できました。