AWS CodeStarプロジェクトを本番稼働用に移行する

2021.07.31

いわさです。

CodeStarでクイックに開発パイプラインを用意することが可能ですが、その後運用環境・本番稼働環境に移行したい場合はどのようにしたら良いでしょうか。
AWSドキュメントにはタイトルのままの内容のページが用意されています。

ざっくりいうと、ドキュメントには「CodeStarでデプロイされたテンプレートを使って複製する」という内容が記載されています。
しかし、試してみるとそれだけだとうまくいきません。
これを行うためにはいくつかの下準備をしっかり行う必要がありますので本日はそのあたりを記事にしました。

下準備

CodeStarテンプレートの取得

CodeStarでプロジェクトを作成するとCloudFormationに新規スタックが作成されます。
ひとつはCodeStarが用意したパイプラインで、もうひとつはそのパイプラインによってデプロイされた実行環境です。
本番環境を作成するときには、このパイプラインテンプレートを使って、本番用パイプラインを複製します。

最新ソースコードの用意と配置

開発パイプラインで開発を進めたソースコード一式をどうやって本番環境へ反映させるのでしょうか。

CodeStarテンプレートを使う場合は、ソースコード一式をzip化しS3バケットへ配置します。
そして、パイプラインを作成する際にCodeCommitオブジェクトにバケット情報を渡すことでリポジトリの初期コードとして取り込まれる形となります。

デフォルトでは、パイプラインはtemplate.ymlを使ってデプロイを行います。
ただし、このYAMLはCodeStar用のTransformマクロが設定されており、CodeStarを使わない場合デプロイの際にこの記述が原因でエラーが発生してしまいます。

AWS CodeStar encountered an error while handling your request: The project ID was not found: starp. Make sure that the project ID is correct and then try again.. Try again with different parameters, or contact AWS Support.

Transformの記述は不要なので削除しましょう。

git clone済み環境でgit archiveを使ってzip化しましょう。
そして任意のS3バケットを作成しアップロードしておきます。

iwasa.takahito@hoge iwasa-codestart % ls
AspNetCoreWebApplication    README.md            requirements.txt        template.yml
AspNetCoreWebApplication.sln    appspec.yml            scripts
AspNetCoreWebApplicationTest    buildspec.yml            template-configuration.json
iwasa.takahito@hoge iwasa-codestart % git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
iwasa.takahito@hoge iwasa-codestart % git archive HEAD -o code.zip   

iwasa.takahito@hoge iwasa-codestart % ls
AspNetCoreWebApplication    README.md            code.zip            scripts
AspNetCoreWebApplication.sln    appspec.yml            codecommit.zip            template-configuration.json
AspNetCoreWebApplicationTest    buildspec.yml

ロールへの権限付与

まだありまして、デプロイに使うロールがあるのですが権限が不足しています。
ロールに以下の権限を追加してください。
また、PermissionsBoundaryはここでは不要なので削除します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "iam:PassRole",
                "ec2:RunInstances",
                "ec2:CreateTags",
                "kms:Decrypt",
                "kms:Encrypt",
                "cloudformation:CreateChangeSet",
                "cloudformation:ExecuteChangeSet",
                "kms:GenerateDataKey*"
            ],
            "Resource": "*"
        }
    ]
}

稼働用VPCとサブネットの用意

CodeStarプロジェクトを作成するときのVPCでも良いですが、移行先でネットワーク環境を分離する必要があると思いますので、新規にVPCを作成しアプリケーションをデプロイするサブネットを用意しておきましょう。
パイプラインスタックを作成する際にパラメータにVPCIDとサブネットIDを指定する必要があります。

移行

これらの下準備をちゃんとしておくと成功します。

CloudFormationスタックをデプロイするとパイプラインが作成され、自動でアプリケーションの展開処理が始まります。
パラメータのプロジェクトIDは任意の値で良いです。
S3のバケットとキーは以下のように格納したコードのバケット名とファイル名を入力します。

パイプラインスタックのデプロイに成功しました。
CodePipelineを見てみると作成したばかりのパイプラインが自動実行されていると思います。

アプリケーションデプロイも成功しました。
EC2コンソール画面からアクセスしてみましょう。
CodeStarデフォルトプロジェクトの場合はHTTPS化されていないのでそこだけ気をつけてください。

Webサイトへもアクセス出来ました。

まとめ

CodeStarのテンプレートを使ってデプロイを行う際に必要な下準備がいくつかあることを覚えておきましょう。
また、この方法で移行するとなると、CodeStarプロジェクトを使っている場合のパイプライン周りの変更はCloudFormationからの変更のみとしたほうが良いですね。
マネージメントコンソールから直接変更した場合に変更をテンプレートで追従できていないと、本番稼働へ切り替える際に不都合が起きそうです。

参考