$30 off During Our Annual Pro Sale. View Details »

CodePipelineにおいてネストされたスタックの子スタックに対して変更セットを有効にする...

 CodePipelineにおいてネストされたスタックの子スタックに対して変更セットを有効にするテクニック!

CodePipelineにおいてネストされたスタックの子スタックに対して変更セットを有効にするテクニック!

2024/10/11 豊洲会 AWS Jr. Champions LT大会 @株式会社JSOL

More Decks by ふくちーぬ(Takaya Fukuchi)

Other Decks in Technology

Transcript

  1. 1 Copyright © SCSK Corporation プロフィール紹介 名前:福地孝哉(ふくちーぬ) 所属:SCSK株式会社 クラウドサービス事業本部 対応案件:

    Webシステムの運用保守,クラウドへのサーバ移行,API基盤構築 住み:千葉に住んで10年目 経歴: 2023-2024 Japan AWS All Certifications Engineers 2024 Japan AWS Jr. Champions 好きなAWSサービス:AWS CodeBuild 趣味:Da-iCE,テニス,サウナ,熱波師
  2. 7 Copyright © SCSK Corporation ネストされたスタックとは CloudFormtionのスタックにおいて入れ子構造を作成すること 親Stack VPC SG

    子Stack Stack 通常のスタック ネストされたスタック Amazon Virtual Private Cloud (Amazon VPC) Amazon Virtual Private Cloud (Amazon VPC) Security group Security group
  3. 8 Copyright © SCSK Corporation 変更セットとは 変更を要求した箇所,その影響をデプロイ前に事前に確認できる機能 既存のStack Stack更新 直接更新

    変更セット の作成 運用変更 変更箇所を事前に確認できる Change set スタック更新のライフサイクル
  4. 9 Copyright © SCSK Corporation CodePipeline利用時の問題点 問題点:CodePipelineでは、ネストされたスタックの子スタックに対して変更セットがサポートさ れていません。 ①コードプッシュ AWS

    Cloud9 AWS CodeCommit AWS CodeBuild AWS CodePipeline Virtual private cloud (VPC) Public subnet Internet gateway Security group AWS CloudFormation Stack Change set Template ②パイプライン起動 ③ビルド・テスト Developer CI/CDパイプライン ④変更セットを実行 ⑤スタックのデプロイ
  5. 16 Copyright © SCSK Corporation 解決方法:CodeBuild内でCloudFormation APIを叩く CodeBuildから、aws-cliコマンド等でCloudFormationの変更セットに関する APIを叩くだけでOK。 #変更セットを作成する関数

    function create_changeset() { local stack_name="$1" local change_set_name="$2" local template_body="$3" local parameters="$4" local capabilities="$5" local change_set_type="$6" local role_arn="$7" aws cloudformation create-change-set ¥ --stack-name "$stack_name" ¥ --change-set-name "$change_set_name" ¥ --template-body "$template_body" ¥ --parameters "$parameters" ¥ --capabilities "$capabilities" ¥ --change-set-type "$change_set_type" ¥ --role-arn "$role_arn" ¥ --include-nested-stacks > output.json } buildspec.yaml
  6. 20 Copyright © SCSK Corporation 検証結果の確認 検証シナリオ ①既存のスタック(VPC,SG)をデプロイ済み ②子スタック(SG)内のセキュリティグループのルールを変更する ③変更セットにて変更内容を確認

    ④スタックの更新 子スタック セキュリティグループに修正が入っていることが分かる “JSONの変更”タブ内で、実際の差分も確認できる
  7. 21 Copyright © SCSK Corporation まとめ • CodePipelineでは、ネストされたスタックの子スタックに対して変 更セットがサポートされていません。 •

    CI/CDする際には、CodeBuildを使うことで、CloudFormation APIを呼び出して変更セットを作成し、従来通りネストされたス タックを安全にデプロイできます。 CloudFormation CreateChangeSetのAPIリファレンス
  8. 22 Copyright © SCSK Corporation 参考資料 • AWS公式ドキュメント: https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/action-reference- CloudFormation.html

    https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/action-reference- CloudFormation.html • 本発表に関する私のブログ記事: https://blog.usize-tech.com/aws-cfn-cicd-nestedstack-changeset/ ソースコードも 付いてます