Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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