CloudFormationでCloud9環境を構築する

最近ちょくちょくCloud9の環境を構築することがあったので、CloudFormationで構築することにしてみました。

先日のブログ記事で、VPCやSubnetの構築をCloudFormationで構築していたのですが、これを使います。

miyohide.hatenablog.com

上で記したものは、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のドキュメントは以下を参照しました。

docs.aws.amazon.com

これを実行することで、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のドキュメントは以下を参照。

docs.aws.amazon.com

Parameter Storeからの値の読み取りには、AWS::SSM::Parameter::Value<AWS-specific parameter type>を使えば良いので、それをParametersの部分で使っています。

docs.aws.amazon.com

実行すると、無事Cloud9が構築できました。