15
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS CodeStarを試してみる

Posted at

はじめに

あるプロジェクトで初めてLambdaの開発を行った。
Eclipseで開発していたが、AWSと連携するわけでもなく、ローカルでの修正のたびに、AWSにログインして手動で上書きするという流れでやっていた。(非常に非効率的)
CodeStarを活用することで上記が解消されるらしいので試してみる。

本資料は大まかに以下を行っています

  • CodeStarでのプロジェクトの作成とローカルでの開発準備
  • コードを編集し、アプリケーションの自動ビルド、自動デプロイを実行
  • ユニットテストを追加して、自動テストを実行

前提

ルートユーザ、「AWSCodeStarFullAccess」管理ポリシーを持つユーザで実施してください。

プロジェクトの作成

  • 「プロジェクトを開始する」を押下
    2.png

  • CodeStar用のサービスロールを作成することを求められるので、「はい、ロールを作成します」を押下する。
    3.png

  • プロジェクトのテンプレートとして、Python + AWS lambdaを選択する。
    5.png

  • 名前は「CodeStarTest」に、リポジトリはCodeCommitを使ってみる。
    6.png

  • 「プロジェクトを作成する」を押下
    7.png

  • CodeStarのチーム画面などで使用する名前とメールアドレスを入力する
    8-1.png
    8-3.png

  • 後で確認できるため選択しなくてもいい。「スキップ」を押下
    9.png

  • 以上でプロジェクトの作成が完了。
    13.png
    アプリケーションのエンドポイントに記載れているURLをクリックするとAPI Gatewayに登録されているAPIが実行される。
    12.png

作成されたリソースの確認

AWS lambdaプロジェクト作成により、以下のようにAWSリソースが生成される。各サービス画面から確認する。
CodeStarLambda.png

  • CodePipeline
    22.png

  • CodeCommit
    21.png

ちなみに以下が生成されたコード群
27.png

  • CodeBuild
    25.png

  • CodeDeploy
    26.png

  • Lambda
    23.png

  • API Gateway
    24.png

ローカルツールに接続

Eclipseにつなげて、CodeCommitで管理されているソースをCloneしてみる。

  • Eclipseマーケットプレースで「AWS Toolkit for Eclipse」を検索し、インストールし、Eclipseの再起動を行う。
    31.png

  • 上部にAWSツールバーが表示されているので押下、「AWS CodeStarプロジェクトのインポート」を選択。
    32.png

  • 次工程ではGitの認証情報が必要。以下の手順で生成する

    • IAMでCodeStarプロジェクト作成時に使用したユーザの概要画面に行く
    • 認証情報タブを選択し、「AWS CodeCommit の HTTPS Git 認証情報」の「認証情報を生成」ボタンを押下する
      34.png
  • CodeStarプロジェクトの選択画面。スクショを参考に上記手順で作成したプロジェクト情報を入力する。
    35.png

  • ブランチ選択。masterしかないので、そのまま「次へ」を押下
    36.png

  • Cloneするパスを入力し、「完了」ボタン押下
    37.png

  • パッケージエクスプローラを確認すると、CodeCommitで管理しているコードをCloneできた。
    38.png

ローカルツールでコードを編集してみる

  • 新規lambda関数の追加
    Cloneしたプロジェクトに適当に新規ファイル(hello.py)を追加する。追加したファイルの中身は「参考」のチュートリアルを参考にしてほしい。
    40.png

  • template.ymlの編集
    Resourcesの子要素として以下を追加

template.yml
  Hello:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: !Sub 'awscodestar-${ProjectId}-lambda-Hello'
      Handler: hello.handler
      Runtime: python3.7
      Role:
        Fn::GetAtt:
        - LambdaExecutionRole
        - Arn
      Events:
        GetEvent:
          Type: Api
          Properties:
            Path: /hello/{name}
            Method: get
  • 上記変更をコミットし、masterにpushする
    41.png
    42.png

  • コミット結果の確認

    • CodePipeline
      CodeCommit,CodeBuild,CodeDeployが順に実行され、全て成功していることを確認
      43.png

    • Lambda
      lambda関数「awscodestar-codestartest-lambda-Hello」が追加されていることを確認
      46.png

    • API Gateway
      GET /hello/{name}が追加されていることを確認
      44.png
      追加したAPIを実行してみる
      47.png

ユニットテストを追加し、自動テストしてみる

  • ローカルツールにCloneしたプロジェクトにhello_test.pyを追加する。内容は以下の通り。
    GET /hello/{name} を実行し、そのレスポンスが期待値通りかを確認する。
hello_test.py

from hello import handler

def test_hello_handler():

  event = {
    'pathParameters': {
      'name': 'testname'
    }
  }

  context = {}

  expected = {
    'body': '{"output": "Hello testname"}',
    'headers': {
      'Content-Type': 'application/json'
    },
    'statusCode': 200
  }

  assert handler(event, context) == expected
  • CodeBuildのビルド仕様を記載しているbuildspec.ymlを変更する。変更部分は日本語でコメントしている
buildspec.yml
version: 0.2

phases:
  install:
    runtime-versions:
      python: 3.8
    commands:
      # (追加)ユニットテストツールのインストール
      - pip install pytest
      # Upgrade AWS CLI to the latest version
      - pip install --upgrade awscli

  pre_build:
    commands:
      # (追加)pytestの実行
      - pytest

      # Discover and run unit tests in the 'tests' directory. For more information, see <https://docs.python.org/3/library/unittest.html#test-discovery>
      - python -m unittest discover tests
  
  build:
    commands:

      # Use AWS SAM to package the application by using AWS CloudFormation
      - aws cloudformation package --template template.yml --s3-bucket $S3_BUCKET --output-template template-export.yml

      # Do not remove this statement. This command is required for AWS CodeStar projects.
      # Update the AWS Partition, AWS Region, account ID and project ID in the project ARN on template-configuration.json file so AWS CloudFormation can tag project resources.
      - sed -i.bak 's/\$PARTITION\$/'${PARTITION}'/g;s/\$AWS_REGION\$/'${AWS_REGION}'/g;s/\$ACCOUNT_ID\$/'${ACCOUNT_ID}'/g;s/\$PROJECT_ID\$/'${PROJECT_ID}'/g' template-configuration.json

artifacts:
  files:
    - template-export.yml
    - template-configuration.json
  • 上記変更をpushする

  • コミット結果の確認

    • CodeStarのダッシュボード画面を表示し、継続的デプロイメントが成功していることを確認する。続いて、BuildのCodeBuildのリンクを押下する。
      50.png

    • ビルド履歴の一番上に先ほど行ったビルド結果が表示されている。「ビルドの実行」列のリンクを押下する。
      51.png

    • ビルド結果の詳細が表示される。「ビルドログ」の「ログ全体の表示」を押下する。
      52.png

    • CloudWatchが表示される。「test session starts」で囲まれているログをみるとhello_test.pyで記述したユニットテストが自動実行され、成功していることが確認できる。
      53.png

終わりに

CodeStarを使用することで、Eclipseなどのローカルツールと連携してサーバレスアプリケーションを非常に簡単に素早く構築することができた。
不満なのは、CodeStarで選択できるリポジトリがCodeCommitかGithubしかないこと。(Gitlabでできたらな)

参考

15
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?