Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS SAMを使ったIaC and CI/CD

BulBulPaul
April 28, 2022

AWS SAMを使ったIaC and CI/CD

nakanoshma.dev #25 で発表したAWS SAMの概要やSAM Pipelinesを使ったCI/CDパイプライン構築に関する資料です。

BulBulPaul

April 28, 2022
Tweet

More Decks by BulBulPaul

Other Decks in Technology

Transcript

  1. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. © 2022, Amazon Web Services, Inc. or its affiliates. AWS SAMを使った IaC and CI/CD ポール N A K A N O S H I M A . D E V # 2 5 Solutions Architect Amazon Web Services Japan
  2. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. 自己紹介 ȃȞȑ 4WITTER BULBULPAUL LjȄǤșnjǍǼǛȞǹǟǞȉǷșΛΟɹॅ ǣȐȋȞǝȍșLjȞǓǬǕǮ ;೓օƝűƺ׺ା= +OTLIN 0YTHON 3ERVERLESS 
  3. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. 本日お話すること/しないこと [お話すること] • サーバーレスアプリケーションでのIaCやCI/CDの必要性 • AWS SAMを使った時のIaCやCI/CD [しないこと] • 他フレームワークやツールとの比較 • 各CI/CD関連サービスの紹介 →これはBlackBelt等の動画を参照ください 3
  4. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. アジェンダ • なぜサーバーレスでのCI/CDが重要なのか • AWS SAM を使ったサーバーレスアプリケーションのIaC • SAM Pipelines でのCI/CD構築 • まとめ 4
  5. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. © 2022, Amazon Web Services, Inc. or its affiliates. なぜサーバーレスでの IaCやCI/CDが重要なのか 5
  6. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. あらためて…なぜサーバーレス使っていますか?? • サーバーやミドルウェアの運用/管理をできる限りしたくない? • ビジネスロジック等の開発に集中したい? • 柔軟なスケーリングをよしなにやりたい? 6 本来の価値提供に注力したい
  7. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. アプリケーションはサーバーレスを活用 では、そのアプリーケーションのリソース作成や変更の反映は? 価値提供を素早く行えるリリースプロセスになっていますか? 再現性のある安全なデプロイがされている? 7 より早く/安全に価値提供をしていく事が重要 →そこでIaCやCI/CDを活用する
  8. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. © 2022, Amazon Web Services, Inc. or its affiliates. あらためて… What is CI/CD? 8
  9. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. CI/CDとは? Continuous Integration Continuous Delivery or Continuous Deployment 9 継続的インテグレーション 継続的デリバリー or 継続的デプロイメント
  10. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. システムのリリースプロセス Continuous Deployment Continuous Integration Continuous Delivery 自動デプロイ 承認してリリース 自動化 自動化 自動化 ソース管理 ビルド テスト環境 本番環境 10
  11. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. AWS CodePipeline CI/CDの実現を容易にするAWS Code サービス MONITOR DEPLOY TEST BUILD SOURCE / ARTIFACT AUTHOR AWS CodeBuild + Third Party AWS CodeCommit AWS CodeBuild AWS CodeDeploy AWS X-Ray AWS Cloud9 AW IDE Toolkits Amazon CloudWatch AWS CodeArtifact Amazon CodeGuru AWS CodeStar
  12. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. © 2022, Amazon Web Services, Inc. or its affiliates. AWS SAM 12
  13. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. AWS SAM - Serverless Application Model - サーバーレスアプリケーション構築用の OSSフレームワーク [主な構成要素] • SAM CLI • SAM Transform • SAM Pipeline 13
  14. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. SAM Transform サーバーレスアプリケーション構築におけるInfrastructure as a Code の機能を提供 リソースとイベントソースマッピングを表現する為の短縮構文 → CloudFormation をベースとして定義詳細を抽象化 14 AWS CloudFormation AWS SAM
  15. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. AWS SAM templates AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Resources: GetProductsFunction: Type: AWS::Serverless::Function Properties: CodeUri: src/ Handler: app.handler Runtime: python3.9 Policies: - DynamoDBReadPolicy: TableName: !Ref ProductTable Events: GetProductsEvent: Type: Api Properties: Path: /products Method: get ProductTable: Type: AWS::Serverless::SimpleTable AWS Lambda 関数 IAM Role Amazon API Gateway Amazon DynamoDB table Transform 宣言 15
  16. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. AWS SAM templates AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Resources: GetProductsFunction: Type: AWS::Serverless::Function Properties: CodeUri: src/ Handler: app.handler Runtime: python3.9 Policies: - DynamoDBReadPolicy: TableName: !Ref ProductTable Events: GetProductsEvent: Type: Api Properties: Path: /products Method: get ProductTable: Type: AWS::Serverless::SimpleTable AWS Cloud API Gateway Lambda function Table Role コードで表現 コードから作成 16
  17. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. AWS SAM templates { "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "GetProductsFunction": { "Properties": { "Code": { "S3Bucket": "bucket", "S3Key": "value" }, "Handler": "app.lambda_handler", "Role": { "Fn::GetAtt": [ "GetProductsFunctionRole", "Arn" ] }, "Runtime": "python3.9", "Tags": [ { "Key": "lambda:createdBy", "Value": "SAM" } ] }, "Type": "AWS::Lambda::Function" }, "GetProductsFunctionRole": { "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Action": [ "sts:AssumeRole" ], "Effect": "Allow", "Principal": { ... CloudFormation 188 lines AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Resources: GetProductsFunction: Type: AWS::Serverless::Function Properties: CodeUri: src/ Handler: app.handler Runtime: python3.9 Policies: - DynamoDBReadPolicy: TableName: !Ref ProductTable Events: GetProductsEvent: Type: Api Properties: Path: /products Method: get ProductTable: Type: AWS::Serverless::SimpleTable 20 lines 17
  18. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. SAM が提供するリソース・テンプレート SAM サーバーレスリソース § AWS::Serverless::Function § AWS::Serverless::Api § AWS::Serverless::HttpApi § AWS::Serverless::SimpleTable § AWS::Serverless::LayerVersion § AWS::Serverless::Application § AWS::Serverless::StateMachine 18 他にも… • ポリシーテンプレート • イメージリポジトリ https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/sam-specification.html
  19. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. SAM CLI 提供機能 • プロジェクト作成 • ローカル実行 • ビルド • パッケージ化 • デプロイ 19 サーバーレスアプリケーション開発を支援するCLIツール
  20. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. SAM Overview 20 20 SAM template CloudFormation ロード/ 依存関係 の解決 作成/変更/削除 トランスパイル SAM CloudFormation Stack $ sam init $ sam build $ sam deploy package package ソースコード $ sam package
  21. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. © 2022, Amazon Web Services, Inc. or its affiliates. SAM Pipelines 22
  22. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. CI/CDパイプライン SAM利用時: これまでの開発フロー Build ソースコード 開発者 コードリポジトリ template.yaml (SAMテンプレート) Source sam build Deploy Test sam deploy はパイプライン内の要素 sam local SAMを組み込んだCI/CDパイプラインが必要な場合、その整備は別途必要 CI/CDパイプライン 開発者 パイプライン開発 SAM
  23. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. CI/CDパイプライン この時のお悩み Build ソースコード 開発者 コードリポジトリ template.yaml (SAMテンプレート) Source sam build Deploy Test sam deploy sam local CI/CDパイプラインの開発/構築作業が必要に… CI/CDパイプライン 開発者 パイプライン開発 SAM
  24. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. CI/CDパイプライン SAM Pipelinesがひな形を自動生成 ソースコード 開発者 コードリポジトリ CI/CDパイプライン用雛形ファイルを生成 (例:CodePipeline用CFnテンプレート) template.yaml (SAMテンプレート) > sam pipeline bootstrap > sam pipeline init SAMがパイプライン 自体も構成(雛形を生成) CloudFormation Build Source sam build Deploy Test sam deploy SAM sam local →CI/CDパイプラインを含めた開発の立ち上げを加速 SAM
  25. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. SAM Pipelinesでの CI/CD 構築環境対応 リポジトリ 26 • AWS CodeCommit • BitBacket • Github • GithubEnterprise CI/CDプロバイダ • AWS CodePipeline • GitLab CI/CD • Github Actions • Jenkins
  26. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. SAM Pipelines 構成イメージ 27 CI/CDプロバイダ AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY Dev パイプライン 実行ロール Dev CloudFormation 実行ロール Dev Artifact バケット Prod パイプライン 実行ロール Prod CloudFormation 実行ロール Prod Artifact バケット Dev環境 Prod環境 Dev ECR リポジトリ Prod ECR リポジトリ assumeRole可能な信頼関係 ※アカウントを全て同一とすることも可能 (Prodアカウントだけ別アカウントにすることも可能)
  27. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. © 2022, Amazon Web Services, Inc. or its affiliates. Demo : SAMでのCI/CD SAM Pipelinesでの構築 28
  28. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. SAM Pipelines デモイメージ 29 CI/CDパイプライン(Dev) Build Source sam build Deploy Test sam deploy SAM sam local Github IAM Role S3バケット IAM Role S3バケット CI/CDパイプライン (Prod) リポジトリ 構築
  29. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. まとめ • サーバーレスのメリットをより活かす為にCI/CDが重要 • SAM Pipelines を活用して開発時における CI/CDパイプライン構築を容易に実現可能 • AWSサービスに限らず、Github等の環境を活用することが可能 30
  30. NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©

    2022, Amazon Web Services, Inc. or its affiliates. Thank you! © 2022, Amazon Web Services, Inc. or its affiliates. ポール @bulbulpaul