2
0

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 5 years have passed since last update.

AWS Hands-on for Beginners #2 でサーバーレス環境自動構築チャレンジ

Last updated at Posted at 2020-05-13

オンデマンドハンズオン「AWS SAM を使ってテンプレートからサーバーレスな環境を構築する」に参加しました。
前回に当たる「サーバーレスアーキテクチャで翻訳 Web API を構築する」のレポートについては以下の記事をどうぞ。
AWS「さぁ!サーバーレスを始めよう!サーバーレスハンズオンもくもく会」レポート
注意:前回同様に知識がなくても参加できますが、今回のハンズオンはCloudFormation・Linuxの仕様とコマンドを学んでいないと難しい部分があります。

前提知識① - AWS Serverless Application Model(SAM)とは?

「AWS Serverless Application Model(SAM)」は「AWS CloudFormation」の拡張機能です。
そもそもの「AWS CloudFormation」は、AWSのインフラサービスをコードで作成できる機能です。提携リソースを一度構築すれば使い回しができ、作成時にミスや不足が起きずに済む……と非常に便利です。
しかし、LambdaやAPI Gatewayなどのリソースを作成しようとすると、どうしてもテンプレートが長文化するのが難点でした。
AWS SAMはそういったリソースのテンプレートを、簡潔に記述可能にしたものです。
(処理としては、デプロイされたSAMテンプレートはAWS側でCloudFormation形式に変換されています)

前提知識② - AWS Cloud9 とは?

サーバーレスと直接関係はないのですが、Infrastructure as Codeに役立つ環境として「AWS Cloud 9」を利用します。
Cloud 9とは、ブラウザ上でコードの記述(コードエディタ)・実行(ターミナル)・デバッグ(デバッガー)が可能な、クラウドベースの統合開発環境です。
複数人でリアルタイムの共同コーディングを行え、チャット機能が付随しているのでペアプログラミングも行えます。
今回利用するうえで嬉しいのは、AWS Lambdaとの連携です。簡単なサーバーレスアプリケーション(Lambda関数)を、Cloud 9上で構築したり実行したりデプロイしたりできます。
また、AWS CLI(ただし2020年4月現在はv1)やDockerが最初からインストールされており、便利に利用することができます。

ハンズオン

はじめの小目標は「Cloud 9に慣れる」ことです。せっかくなので仕様をいろいろと確認してみます。
今回のスペックは以下の通りです。

  • Environment type:Create a new instance for environment
     (※選択したリージョンでEC2インスタンスを立て、Cloud 9環境を実行)
  • Instance type:t2.micro (1 GiB RAM + 1 vCPU)
  • Platform:Amazon Linux
  • VPC,subnet:default

Pythonのバージョンを確認します。(2020年4月現在)3.6.10です。

$ python --version
Python 3.6.10

デフォルトでAWS CLIも入っています。

$ aws --version
aws-cli/1.18.40 Python/3.6.10 Linux/4.14.171-105.231.amzn1.x86_64 botocore/1.15.40

アップグレードも可能です。

$ sudo pip install --upgrade pip
Cache entry deserialization failed, entry ignored
    ...
Successfully installed pip-20.1

一通り使用方法に慣れたら、SAMファイル(YAML形式)を作成します。
公式ドキュメントを参考にすれば、記述方法についてそれほど困ることはありません(といってもCloudFormationの知識がないと少し難しいです)。
前回のハンズオン同様、API GatewayやDynamoDBとの連携も行います。この辺りは目新しいこともないので省略します。

オプションとして、SAM CLIも使用してみました。
sam initsam buildsam deploy --guided のたった3コマンドでデプロイができます(要Docker環境/Cloud 9なら最初からインストールされているので気にしなくて大丈夫です)。詳細は公式ドキュメント中のチュートリアルを参考にしてください。

XXXXXXXX:~/environment $ sam deploy --guided

Configuring SAM deploy
======================

        Looking for samconfig.toml :  Not found

        Setting default arguments for 'sam deploy'
        =========================================
        Stack Name [sam-app]: AWSserverlesshandson
        AWS Region [us-east-1]: ap-northeast-1
        #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
        Confirm changes before deploy [y/N]: y
        #SAM needs permission to be able to create roles to connect to the resources in your template
        Allow SAM CLI IAM role creation [Y/n]: Y
        Save arguments to samconfig.toml [Y/n]: Y
    ...

加えてSAM テンプレートを事前検証するならsam validatesam local start-lambdaでモック環境でのテストも可能です。
さらに大元がCloudFormationなので、CloudFormationコンソールからまとめて削除できます。
SAM.png
上から順にSAMテンプレートで作ったリソース、S3 bucket(内にアップロードしたsam-appフォルダ)、Lambda関数、Cloud 9です。
Cloud 9もCloudFormationスタックなんだという新たな気づきも得ました。
便利ですね。
短所があるとすれば、まだβ版なので本番運用はできない点でしょうか。

おわりに

  • サーバーレス環境もコード化できる!
  • サーバーレス環境をコード化してコマンド形式で実装できる!
  • サーバーレス環境をデプロイしなくてもローカルでテスト実行ができる!
  • SAM CLIもある!(まだβ版だけど……)

AWS SAMは、サーバーレスって結局コンソールをぽちぽちやる必要があるからめんどくさい!……という意見に応えられる画期的なサービスだと思います。
ハンズオンをはじめて、今日からIaCの世界へと飛び込みましょう。

弊社WebサイトではAWSを含むさまざまな技術記事を公開しています。ぜひご覧ください。

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?