Amazon Web Services ブログ

SAP用のAWS DevOpsツール, パート1: Cloud Foundryアプリケーション

この記事は、Marcel ToerpeとKenny Rajanによる投稿です。

Amazon Web Services (AWS)でミッションクリティカルなSAPワークロードを稼働するビジネス上の利点は、既に十分に証明されています。AWSでは、AWSサービスを使用してSAP環境を移行、そしてモダナイズするために、お客様と協力することを大切にしています。実際、私たちは、SAPブログで触れたAWSのモメンタムにあるように、SAPワークロードを稼働するためにAWSを採用し、SAP環境におけるイノベーションを加速させるために追加のAWSサービスを使用する方法について話し合いました。

お客様がSAPソリューションを稼働するためにAWSを稼働し続けると、AWS上で稼働する豊富なSAP Cloud Platform (SAP CP)サービスにも気づきます。これにより、強固なインフラストラクチャ基盤上でSAP拡張機能を実装するための深くて広がりのある比類なき機会が提供されています。この強力な技術基盤により、お客様は、AWSサービスとSAP CPの間で拡張および統合する選択肢を備えた、SAP CP上でのSAPビジネスアプリケーション開発の将来性を享受できます。様々な統合パターンについて知るには、ブログ「SAP Cloud Platform on AWSを使ったイノベーションの加速」を参照してください。

AWSによるDevOpsツールの範囲内での運用自動化

DevOpsとは、アプリケーションとサービスを高速でデリバリーする組織の能力を向上させる文化的な哲学、実践、ツールの組み合わせです。これには、従来のソフトウェア開発とインフラストラクチャ管理プロセスを使用している組織よりも速いペースで製品を進化と改善することが含まれています。このスピードにより、組織はお客様により良いサービスを提供し、市場でより効率的に競争することができます。AWSのDevOpsツールは、企業内でDevOpsを実践し、継続的インテグレーション (CI)と継続的デリバリーとデプロイメント (CD)を通じた手動タスクの自動化に役立ちます。

このブログシリーズでは、SAP CP Cloud Foundry (パート1)とSAP Fiori apps (パート2)における簡略化された継続的インテグレーションと継続的デリバリー (CI/CD)のパイプラインパターンの構築手順をお伝えします。Jenkinsのインスタンスやその他のインフラストラクチャを設定、管理することなく、また事前の投資もなく、これを実現します。これらのパイプラインは、オーケストレーターとしてのAWS CodePipeline、ビルドを実行するAWS CodeBuild、アプリケーションデプロイメントを自動化するAWS CodeDeploy、承認メカニズムのためのAmazon Simple Notification Service、ソース管理のためのAWS CodeCommitを使用して簡単に作成できます。

AWS DevOps連携によるSAP CP Cloud Foundryアプリケーション統合のアーキテクチャ概要

AWS CI/CDパイプラインサービスは、アプリケーションを頻繁に改善し、信頼できるデリバリープロセスを必要とする企業向けに設計されています。次の図は、サーバレスなCI/CDツールセットとして、AWS CodePipelineにAWS CodeBuildとAWS CodeDeployを組み合わせて使用する方法のハイレベルなアーキテクチャを示しています。クラウドベースの統合開発環境 (IDE)であるAWS Cloud9とソース管理リポジトリのAWS CodeCommitを使って、リポジトリをクローンし、SAP CPのプロジェクトを開発し、そのプロジェクトのアーティファクトを保存します。

Following diagram shows the high-level architecture of how to use AWS CodePipeline including AWS CodeBuild and AWS CodeDeploy as a serverless CI/CD toolset. AWS Cloud9 is used as development environment to clone the repository, develop the SCP project and store the project artifacts finally in AWS CodeCommit as source control repository

図1: AWS DevOps連携によるSAP CP Cloud Foundryアプリケーション統合のアーキテクチャ概要

前提条件

パイプラインを実装する前に、次の前提条件を満たしているとします。

CodeCommitリポジトリの作成

Creating CodeCommit Repository and Copy the repository url upon successful creation. Your connection type will be HTTPS

図2: CodeCommitリポジトリのgit clone url

新しいAWS Cloud9環境の作成

  • このブログでは、開発環境としてAWS Cloud9を使用します。AWS Cloud9のセットアップ手順を参照して、インスタンスタイプがt2.micro、基盤となるOSがUbuntuのEC2環境を作成します。Amazon Linuxが良い場合は、続行する前にAmazon CorrettoからOpenJDKに切り替える必要があります
  • CodeCommit環境から作成した空のリポジトリをクローンし、ディレクトリを辿ります
Cloning the empty repository created from the CodeCommit environment and enter the directory

図3: AWS Cloud9 クローンディレクトリ

  • SAPが提供するプロジェクトテンプレートと次のmvn archetypeコマンドを使って、SAP CP Cloud Foundryに新しいサンプルアプリケーションを作成します。SAP CP HelloWorld サンプルアプリケーションのプロジェクトを理解するには、SAPドキュメントを参照してください

$ mvn archetype:generate -DarchetypeGroupId=com.sap.cloud.s4hana.archetypes -DarchetypeArtifactId=scp-cf-tomee -DarchetypeVersion=RELEASE

  • mvnが次の情報を要求したら、通常のモジュールパラメータを入力します
    • groupId – グループ、会社、または組織を表す識別子 (例: com.mycompany.cloud)
    • artifactId – SAP Cloud Platformリージョン全体で一意のアプリケーションの識別子 (例: my-aws-sap-cf-app – このartifactIdは、他のSAP CPユーザーは使用不可)
    • version – アプリケーションのバージョン (例: 1.0-SNAPSHOT = default)
    • package – ソースコードが存在する最上位のパッケージの名前 (default = groupId, 例: com.mycompany.cloud)
    • Alerts – gitignoreとskipUsageAnalytics alertsにYを入力
  • プロジェクトの生成が成功したら、mvnプロジェクトフォルダーをAWS Cloud9フォルダーの階層で1つ上のノードに移動します。mvnプロジェクトのサブフォルダーとファイルを、前に作成した空のGitHubリポジトリフォルダーに移動します。AWS Cloud9では、コンテンツを1つのフォルダーから別のフォルダーにドラッグアンドドロップするだけです。次のスクリーンショットを参照してください
After project generation is successful, move the mvn project folders one node up in the AWS Cloud9 folder hierarchy. You move the mvn project sub folders and files to the empty GitHub repository folder created in the earlier. With AWS Cloud9 you can simply drag and drop the contents from one folder to another. As shown below organize the repo by moving the repo files one node up

図4: AWS Cloud9 ディレクトリパス

  • AWS Cloud9環境で、メニューから新しいファイルをクリックし、次のコードスニペットをコピーします。CI/CDパイプラインを実行するために、ファイルをbuildspec.ymlとしてGitHubリポジトリフォルダーに保存します。統合テストはopenjdk8でのみ正しく機能します => AWS CodeBuildイメージとしてUbuntuを選択します
version: 0.2
 
phases:
  install:
    runtime-versions:
      java: openjdk8
     
  build:
    commands:
       - mvn package
      
reports: #New
  SurefireReportsUnitTest: # CodeBuild will create a report group called "SurefireReports".
    files: #Store all of the files
      - '*.xml'
    base-directory: 'unit-tests/target/surefire-reports' # Location of the reports
  SurefireReportsIntegrationTest: # CodeBuild will create a report group called "SurefireReports".
    files: #Store all of the files
      - '*.xml'
    base-directory: 'integration-tests/target/surefire-reports' # Location of the reports
 
artifacts:
  files:
    - application/target/*
    - deployspec.yml
    - manifest.yml
  • AWS Cloud9環境で”新しいファイル”をクリックし、次のコードスニペットをコピーして、CI/CDパイプライン実行用のGitHubリポジトリフォルダーにymlファイルとして保存します
version: 0.2
 
env:
  parameter-store:
    SCP_USER: SCP_USER
    SCP_PW: SCP_PW
 
phases:
  install:
    runtime-versions:
      java: openjdk8
     
  build:
    commands:
       - wget -q -O - https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | apt-key add
       - echo "deb https://packages.cloudfoundry.org/debian stable main" | tee   /etc/apt/sources.list.d/cloudfoundry-cli.list
       - apt-get update
       - apt-get install cf-cli
       - cf api https://api.cf.eu10.hana.ondemand.com #SCP@AWS FRA - Adjust if required
       - echo "Deploying as"
       - echo $SCP_USER
       - cf login -u $SCP_USER -p $SCP_PW -o <OrgId> -s <SpaceId> #Adjust
       - cf push

  • APIエンドポイント、組織名、スペースをSAP CP Cloud Foundryアカウントからコピーします。コードスニペットのcf api、<OrgId> -s <SpaceId>パラメータを置き換え、CI/CDパイプライン実行用にファイルをdeployspec.ymlとして保存します
Copy the API endpoint, Org Name and space from your SCP Cloud Foundry account. Replace the cf api, -s parameter in code snippet and save the file as deployspec.yml for your CI/CD pipeline execution from your SCP account

図5: SAP CP Cloud Foundry アカウントビュー

  • AWS Cloud9環境のアプリケーションリポジトリフォルダーを検証して、deployspec.ymlとbuildspec.ymlのパスを確認します

AWS Systems Managerでパラメータストアを作成

AWS Systems ManagerパラメータストアにSAP CPテナントのシークレット (ユーザーとパスワード)を保存します。設定手順は、AWS Systems Managerのドキュメントを参照してください

CodeCommitリポジトリにプロジェクトコードを追加

  • EC2環境のプロジェクトフォルダーパスで、gitコマンドを実行してコードをプッシュします
$ git add *
$ git commit -m 'test'
$ git push
  • CodeCommitリポジトリを検証してください

SNSトピックとサブスクリプション

  • 新しいSNSトピックを作成し、目的の名前を選択します (同じAWSリージョンの必要があります)。設定手順は、SNSのドキュメントを参照してください
  • 関連するEメールサブスクリプションを作成します。サブスクリプションが作成されたら、サブスクライバーは、サブスクリプションがサブスクライブされたEメールに送信されたことを確認する必要があります

ビルドプロセスのAWS CodePipeline

  • ビルドプロセス用にCodePipelineを構成します。設定手順は、AWS CodePiplelineのドキュメントを参照してください
  • CodePipeline [SM1]の名前は、AWS Cloud9の手順で使用したアプリケーション/artifactIdのようにすることができます。サービスロール/ロール名称のデフォルト設定を保持し、CodePipelineがサービスロールを作成できるようにチェックボックスを使用して、この新しいパイプラインで使用できるようにします
  • 次をクリックして、ソースプロバイダーとしてAWS CodeCommitを選択します。前の手順でマスターからブランチとして作成したCloud Foundryリポジトリを選択します。次をクリックしてビルドステージを追加します
  • 適切なリージョンのビルドプロバイダーとしてAWS CodeBuildを選択します。プロジェクトの作成をクリックして、AWS Cloud9の手順で使用したアプリケーショ/artifactIdと同様のプロジェクト名を入力します。次に、Ubuntuイメージ、標準のランタイム、イメージバージョンにaws/codebuild/standard:2.0、環境変数にLinuxを選択します。CodePipelineに進むをクリックします
  • CodePipelineのウィザードを続行してビルドステージを追加します。次へをクリックし、 デプロイステージのスキップをクリックしてウィザードを完了します。デプロイステージは後で追加します
  • 次の画面で、パイプラインの作成をクリックします。パイプラインが正常に作成されると、最後のコミットに基づいて自動的にトリガーされます。ビルドステージ内の詳細リンクをクリックして、ビルドの出力を検証します
  • 最近発表したCodeBuildでのレポートを使用して、集約されたテストレポートを表示できます

デプロイプロセスのAWS CodePipeline

  • Cloud Foundryパイプラインを選択して、編集モードに進みます。ビルドステージの後に新しいステージを追加をクリックして、Deployという名前を付けます
  • 新しいアクショングループとアクション”承認”を追加します。このパイプライン用に作成したSNSトピックを選択します
  • 追加のアクションを作成し、Deployという名前を付けます。アクションプロバイダーとしてAWS CodeBuildを選択し、AWSリージョンを選択して、アーティファクトのインプットとしてアーティファクトをビルドします
    • プロジェクトの作成をクリックして、AWS Cloud9の手順で使用したアプリケーション <artifactId>-deployと同様のプロジェクト名を指定します。Ubuntuイメージ、標準のランタイム、イメージバージョンにaws/codebuild/standard:2.0、環境変数にLinuxを選択します
    • 新しいサービスロールのオプションを選択して、ロール名をコピーしてSSMポリシーをアタッチします
  • プロジェクトの作成画面のBuildspecセクションで、名前にdeployspec.ymlを入力して、CodeBuildのウィザードを終了します

デプロイプロセスでSSMパラメータにアクセスするためにAWS CodeDeployにポリシーを追加

  • 新しいブラウザを使用して、新しいAWSマネジメントコンソールの画面を開きます。IAMサービスを選択して、CodeBuildロールにSSMポリシーをアタッチします。設定手順は、IAM IDのアクセス許可の追加のドキュメントを参照してください
  • デプロイパイプラインの構成中に作成されたCodeDeployロールを見つけます。キーワードにロール名を使用して検索し、“AmazonSSMReadOnlyAccess”、または同様のポリシーを追加します。IAMポリシーをロールにアタッチします
  • CodePipelineの画面に戻って、ウィザードの手順を終了します。保存を押してください!

パイプラインのテストとビルドの検証

  • 新しいパイプラインの実行をトリガーするには、AWS Cloud9を使用してリポジトリ内の任意のファイルを編集し、変更をプッシュします。deployspec.ymlにコメント (#test)を入力し、AWS Cloud9で次のコメントを実行します
$ git add *
$ git commit -m 'test'
$ git push
  • パイプラインコンソールから、コードのビルドが正常に完了したかどうかを確認します。正常なデプロイメントメッセージが表示されます
  • 次に、ビルドプロジェクトのセクションに移動し、ビルドのログを検証して、SAP CPのルートURLをコピーします
Validate build logs and copy the SCP route url

図6: ビルドプロジェクトのログ

  • ブラウザでルートURLを開いて、アプリケーションを起動します
Launch the routes URL in your browser to open your application running in SCP as shown below

図7: アプリケーションページ

  • SAP CP Cockpitのアプリケーションのセクションにアプリケーションルートの情報が表示されるはずです

結論

このブログシリーズのパート1では、AWS CodePipeline、AWS CodeCommit、Amazon SNS、AWS CodeBuildなどのAWS DevOpsツールをサーバレスCI/CDツールセットとして活用した、オーケストレーション、ビルド、検証、承認、デプロイの方法を紹介しました。また、AWS CodePipelineの継続的デリバリーソリューションと連携したリッチなコード編集体験を提供する統合開発環境としてAWS Cloud9を使用しました。パート2では、SAP Fiori apps用のAWS DevOpsツールセットの使用を説明する予定です。

翻訳はPartner SA 河原が担当しました。原文はこちらです。