AWS CodeStarで動くCloudFormationを知る

渡辺です。

AWS CodeStarは 最強最速 のアプリケーション開発環境を提供します。 しかし、実際に使うとなればどのように動いているかを理解しておく必要があります。 そこで、いきなりマニアックな話になりますが、CodeStarの裏側で動くCloudFormationについて解説します。

プロジェクト毎にスタックが作成される

CodeStarのトラブルシューティングで必須となるのはCloudFormationへの理解です。 なぜならば、CodeStarプロジェクトを作成するとCloudFormationで各リソースが構築されるからです。 なんらかの理由でプロジェクトの作成に失敗したならば、CloudFormationを確認しましょう。

作成されるリソース

例えば、Node.js / Elastic Beanstalkでプロジェクトを作成すると、これだけのリソースが作成されます。

cfn

簡単に解説します。

CodeStar

CodeStarのプロジェクトが作成されています。

  • CodeStarProject
  • SeedRepo
  • SyncInitialResources
  • SyncResources

CodeCommit

Gitリポジトリ(CodeCommit)関連として以下のリソースが作成されています。

  • CodeCommitRepo

CodeBuild

ビルド(CodeBuild)関連として以下のリソースが作成されています。

  • CodeBuildPolicy
  • CodeBuildProject
  • CodeBuildRole

CodeDeploy

EBではCodeDeployでデプロイを行わないため、CodeDeploy関連のリソースは作成されません。

CodePipeline

CodeCommit, CodeBuildを繋ぐパイプとしてCodePipelineのリソースが作成されます。

  • CodePipelineTrustRole
  • ProjectPipeline

ElasticBeanstalk

デプロイ先となるEB関連のリソースが作成されます。

  • EBApplication
  • EBApplicationVersion
  • EBConfigurationTemplate
  • EBEnvironment
  • EBInstanceProfile
  • EBWorkerRole
  • AWSEBAutoScalingGroup
  • AWSEBAutoScalingLaunchConfiguration
  • AWSEBBeanstalkMetadata
  • AWSEBEIP
  • AWSEBSecurityGroup
  • AWSEBSecurityGroupSSHIngress

プラットフォームをEC2とした場合はEC2インスタンスなどが作成されます。

スタック管理のリソースを変更する

CodeStarではCloudFormationでAWSリソースが作成されます。 CloudFormationでAWSリソースを作成した場合、一般的にCloudFormationでアップデートを行うべきと考えがちです。 しかし、CodeStarでは初期構築のブーストを行い、原則としてアップデートはCloudFormationで行わないようなイメージです。 まさに最速を意識したスキャホールドです。

どんなリソースが作成されているのか、どのような構成になっているのかについて理解し、適切に変更すると良いでしょう。

セキュリティグループ

AWSEBSecurityGroupなどセキュリティグループは、 SSHが全解放されていました(0.0.0.0/0) 。 これは望ましくないので、速攻で変更した方が良いでしょう。 また、それ以外のポートの解放なども同様です。

IAM Role

EC2インスタンスにアタッチされるIAM Role(インスタンスプロファイル)は必要最低限の権限しか与えられていません。 アプリケーション毎に必要に応じた権限を与える必要があります。

AutoScalingとELB

CodeStarで構築される環境は、最小限の構成になっています。 すなわちELBがなく、AutoScalingで1つのインスタンスが起動している状態です。 必要に応じてELBを追加し、AutoScalingでインスタンスを拡張してください。

プロジェクト削除時の注意

AWS CodeStarではCloudFormationでプロジェクトを含めたリソースを作成します。 このため、プロジェクトの削除メニューを選択すると、次のようなダイアログが表示されます。

delete

プロジェクトの作成と同時にAWSリソースを削除する場合、チェックボックスにチェックが必要です。 そして、チェックした場合、CloudFormationのスタックが削除されます。

リソースはスタックの削除で行う

CodeStarプロジェクトを削除してもチェックボックスをオンにしていなければ、リソースは残るので注意してください。 スタックが残っている場合は、後からCloudFormationのスタック一覧から削除しましょう。

スタックの削除に失敗する場合

プロジェクト(スタック)作成後、スタックで作成されたAWSリソースに依存するAWSリソースを作成した場合、スタックの削除が失敗します。 例えば、スタックで作成されたセキュリティグループを他のインスタンスに適用しているようなケースです。 先に、依存するAWSリソースを削除しましょう。

まとめ

AWS CodeStarは一撃構築で便利です。 しかし、そこからカスタマイズしていくにはCloudFormationの知識は必要不可欠になってくると思われます。 リソースの管理について、特に削除し忘れについては注意してください。