Share
Embed
AWS SAMを使ったIaC and CI/CD
nakanoshma.dev #25 で発表したAWS SAMの概要やSAM Pipelinesを使ったCI/CDパイプライン構築に関する資料です。
BulBulPaul
April 28, 2022
Transcript
30 slides
-
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 -
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 -
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 -
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 -
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 -
NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©
2022, Amazon Web Services, Inc. or its affiliates. あらためて…なぜサーバーレス使っていますか?? • サーバーやミドルウェアの運用/管理をできる限りしたくない? • ビジネスロジック等の開発に集中したい? • 柔軟なスケーリングをよしなにやりたい? 6 本来の価値提供に注力したい -
NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©
2022, Amazon Web Services, Inc. or its affiliates. アプリケーションはサーバーレスを活用 では、そのアプリーケーションのリソース作成や変更の反映は? 価値提供を素早く行えるリリースプロセスになっていますか? 再現性のある安全なデプロイがされている? 7 より早く/安全に価値提供をしていく事が重要 →そこでIaCやCI/CDを活用する -
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 -
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 継続的デプロイメント -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
NAKANOSHIMA.DEV #25 – IAC AND CI/CD USING AWS SAM ©
2022, Amazon Web Services, Inc. or its affiliates. SAM CLI 提供機能 • プロジェクト作成 • ローカル実行 • ビルド • パッケージ化 • デプロイ 19 サーバーレスアプリケーション開発を支援するCLIツール -
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 -
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 -
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 -
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 -
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 -
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 -
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アカウントだけ別アカウントにすることも可能) -
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 -
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) リポジトリ 構築 -
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 -
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