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

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

  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
    継続的デプロイメント

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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アカウントだけ別アカウントにすることも可能)

    View full-size slide

  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

    View full-size slide

  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)
    リポジトリ
    構築

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide