継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

「AWS Cloud Development Kit」に対応した Python コードを実践!

タダです.

以前,「AWS Cloud Development Kit」(以下、CDK)の記事を書きました.当時は対応言語に Python がサポートされてませんでしたが, AWS Developer Blog で CDK の Python コードやドキュメントが公開されていました.早速, Python で CDK を使ってみます。

AWS Developer Blog の記事

aws.amazon.com

関連記事

sadayoshi-tada.hatenablog.com

チュートリアルプロジェクトの実行

初期設定

下記のチュートリアルに沿って CDK を実行します. プロジェクトを初期化し、pip install -r requirements.txtでライブラリをインストールします.

docs.aws.amazon.com

$ mkdir hello-cdk && cd hello-cdk
$ cdk init --language python sample-app
Applying project template sample-app for python
Initializing a new git repository...
Executing Creating virtualenv...

# Welcome to your CDK Python project!

You should explore the contents of this template. It demonstrates a CDK app with two instances of
a stack (`HelloStack`) which also uses a user-defined construct (`HelloConstruct`).

The `cdk.json` file tells the CDK Toolkit how to execute your app.

This project is set up like a standard Python project.  The initialization process also creates
a virtualenv within this project, stored under the .env directory.  To create the virtualenv 
it assumes that there is a `python3` executable in your path with access to the `venv` package.
If for any reason the automatic creation of the virtualenv fails, you can create the virtualenv
manually once the init process completes.

To manually create a virtualenv on MacOS and Linux:

$ python3 -m venv .env


After the init process completes and the virtualenv is created, you can use the following
step to activate your virtualenv.

$ source .env/bin/activate

If you are a Windows platform, you would activate the virtualenv like this:

% .env\Scripts\activate.bat

Once the virtualenv is activated, you can install the required dependencies.

$ pip install -r requirements.txt

At this point you can now synthesize the CloudFormation template for this code.

$ cdk synth

You can now begin exploring the source code, contained in the hello directory.
There is also a very trivial test included that can be run like this:

$ pytest

To add additional dependencies, for example other CDK libraries, just add to
your requirements.txt file and rerun the `pip install -r requirements.txt`
command.

# Useful commands

 * `cdk ls`          list all stacks in the app
 * `cdk synth`       emits the synthesized CloudFormation template
 * `cdk deploy`      deploy this stack to your default AWS account/region
 * `cdk diff`        compare deployed stack with current state
 * `cdk docs`        open CDK documentation

Enjoy!
$ python3 -m venv .env
$ source .env/bin/activate
(.env) $ pip install -r requirements.txt 
Obtaining file:///Users/tada/work/cdk_python_sample (from -r requirements.txt (line 1))
Collecting pytest (from -r requirements.txt (line 2))
〜中略〜
uccessfully installed atomicwrites-1.3.0 attrs-19.1.0 aws-cdk.assets-0.31.0 aws-cdk.aws-autoscaling-api-0.31.0 aws-cdk.aws-cloudwatch-0.31.0 aws-cdk.aws-ec2-0.31.0 aws-cdk.aws-events-0.31.0 aws-cdk.aws-iam-0.31.0 aws-cdk.aws-kms-0.31.0 aws-cdk.aws-lambda-0.31.0 aws-cdk.aws-logs-0.31.0 aws-cdk.aws-s3-0.31.0 aws-cdk.aws-s3-notifications-0.31.0 aws-cdk.aws-sns-0.31.0 aws-cdk.aws-sqs-0.31.0 aws-cdk.aws-stepfunctions-0.31.0 aws-cdk.cdk-0.31.0 aws-cdk.cx-api-0.31.0 aws-cdk.region-info-0.31.0 cattrs-0.9.0 hello jsii-0.10.5 more-itertools-7.0.0 mypy-extensions-0.4.1 pluggy-0.11.0 publication-0.0.3 py-1.8.0 pytest-4.4.2 python-dateutil-2.8.0 six-1.12.0 typing-extensions-3.7.2
You are using pip version 19.0.3, however version 19.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

因みにプロジェクトを作ると以下のようなディレクトリ構造が作成されます.Python のコードで構成されているのがわかります.

$ tree
├── README.md
├── app.py
├── cdk.json
├── hello_cdk
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-37.pyc
│   │   └── hello_cdk_stack.cpython-37.pyc
│   ├── hello_cdk.egg-info
│   │   ├── PKG-INFO
│   │   ├── SOURCES.txt
│   │   ├── dependency_links.txt
│   │   ├── requires.txt
│   │   └── top_level.txt
│   └── hello_cdk_stack.py
├── requirements.txt
└── setup.py

デプロイ

次にデプロイをしていきます。まずcdk synthで CloudFormation テンプレートを合成し,次にcdk deployでデプロイをします.

$ cdk synth
Resources:
  CDKMetadata:
    Type: AWS::CDK::Metadata
    Properties:
      Modules: aws-cdk=0.30.0,@aws-cdk/cdk=0.31.0,@aws-cdk/cx-api=0.31.0,jsii-runtime=Python/3.7.3


$ cdk deploy
HelloCdkStack: deploying...
HelloCdkStack: creating CloudFormation changeset...
 0/2 | 09:18:25 | CREATE_IN_PROGRESS   | AWS::CDK::Metadata | CDKMetadata 
 0/2 | 09:18:28 | CREATE_IN_PROGRESS   | AWS::CDK::Metadata | CDKMetadata Resource creation Initiated
 1/2 | 09:18:29 | CREATE_COMPLETE      | AWS::CDK::Metadata | CDKMetadata 
 2/2 | 09:18:31 | CREATE_COMPLETE      | AWS::CloudFormation::Stack | HelloCdkStack 

 ✅  HelloCdkStack

Stack ARN:
arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxx:stack/HelloCdkStack/6ef54dd0-744b-11e9-aada-0e842c318628

CloudFormationのスタックが完成していました.バージョニングと暗号化したS3バケットを作るのみですがサクッと作れました. f:id:sadayoshi_tada:20190512095953p:plain

後片付け

作成したリソースの削除はcdk destroyで完結します.

cdk destroy
Are you sure you want to delete: HelloCdkStack (y/n)? y
HelloCdkStack: destroying...
   0 | 01:27:57 | DELETE_IN_PROGRESS   | AWS::CloudFormation::Stack | HelloCdkStack User Initiated
   0 | 01:27:59 | DELETE_IN_PROGRESS   | AWS::CDK::Metadata | CDKMetadata 
   0 | 01:27:59 | DELETE_SKIPPED       | AWS::S3::Bucket    | HelloCdkBucket (HelloCdkBucketA63BB9B1) 

 ✅  HelloCdkStack: destroyed

Pulumi との利用比較

CDK」と似たようなツールとして「Pulumi」があります.「Pulumi」も JavaScript,Golang,TypeScriptの他に Python に対応したプログラミング言語でのプロビジョニングツールです.最後に2つのツールを使い分けていくにあたって利用比較を自分なりに調べてみたものをまとめます。

www.pulumi.com

Pulumi と CDK の比較

  • Pulumi」のプロビジョニングはマルチクラウド対応しているが, 「CDK」のプロビジョニングは AWS対応のみ
  • Pulumi」は利用形態に応じて利用料がかかるが, 「CDK」は利用料不要で利用可能
  • Pulumi」には独自 GUI 管理の画面があるが, 「CDK」は管理画面はなくターミナルでの操作中心 f:id:sadayoshi_tada:20190516011949p:plain

AWS を普段使うため僕は引き続き「CDK」でのプロビジョニングの勉強をしていきます💪

まとめ

CDK」の Python 対応したコードを試してみました.Python のコードの情報が出てきているのでこれは PythonAWS を利用している人にとっては朗報かと思います.僕もしっかり使いこなして Python でアプリケーションの開発,デプロイまで完結できるようにドキュメントを読み込んだり,実践していきたいです!

CDK の関連情報

公式ドキュメント(Get Started)

docs.aws.amazon.com

リファレンスドキュメント

docs.aws.amazon.com

Python のサンプルコード

github.com

「Python の基礎力を測る Python3 エンジニア検定」と題してLTしてきた

タダです。

Python 入門者の集い #8 で LT させていただいた資料を公開します。 python-nyumon.connpass.com

Python を始めたての方が多い勉強会ということで,入門者向けの内容として自分が受験した Python3 エンジニア検定試験の概要の紹介と受験後の所感をお話ししてきました.少しでも検定のことを知らなかった人が勉強のきっかけになれば嬉しいです.プログラミング言語の勉強会での発表は初だったので緊張しましたw

緊張して発表している模様です.

発表資料

発表資料はこちらです.

資料関連記事

sadayoshi-tada.hatenablog.com

note.mu

まとめ

LT 発表は緊張しましたがこういうところから Python の世界に馴染んでいきたいと思ったので機会をいただけてありがたかったです!PyCon JP の関わり方も教わったのでもっと Python の世界に勉強しながら飛び込んでいきたいと思います.

www.pycon.jp

Python の基礎力を証明する「Python3 エンジニア検定」を受験した

タダです。

5/11 に「Python3 エンジニア検定」を受験し,合格しました.受験前の勉強ログは,note に書きましたが今回は受験の振り返りをします.受験を考えている方や興味ある方が何か参考になれば嬉しいです.

note.mu

試験結果の振り返り

700 点の合格ラインに対し 750 点でした.ギリギリ合格ですw 分野別の得点率も出るのですが次の通りです. 5,6,9,11がイマイチですね...勉強し直します.

該当章 獲得率
1章 食欲をそそってみようか 100%
2章 Pythonインタープリタの使い方 100%
3章 気楽な入門編 100%
4章 制御構造ツール 67%
5章 データ構造 57%
6章 モジュール 50%
7章 入出力 100%
8章 エラーと例外 100%
9章 クラス 50%
10章 標準ライブラリめぐり 75%
11章 標準ライブラリめぐり─PartII 0%
12章 仮想環境とパッケージ 100%
14章 対話環境での入力行編集とヒストリ置換 100%

勉強法の振り返り

勉強法は,公式テキストのオライリー本を出題率の高い章を重点的に繰り返し読みました.GW中に受験日を決めて勉強し始めたので網羅的に本を理解するより得点率の高いところを狙う戦略でした.出題の割合が高いのは3,4,5,8,10章なので結果的には取りこぼしたものもあったものの,割合高い分野を中心に勉強して合格できたので戦略としてよかったのかなと思います.

Pythonチュートリアル 第3版

Pythonチュートリアル 第3版

また,プログラム言語の試験なので如何に本に書いている Python コードを実践した かが鍵ですね.僕は試験に近づくにつれてコードを書く時間が少なくなっていったので受験を考えている方は受験日に向けて手を動かして臨むことオススメします.

模擬試験

模擬試験は受験せずに終わりました.合格しましたが受験してみたかったので後日受験してみます.

diver.diveintocode.jp

次に受験したい試験

今年の夏にデータ分析試験がリリースされるとのことなので受験してみたいと思っています.リリース情報は 公式サイト,Twitter,Facebookなどで公開されるそうなので要チェックです.

www.pythonic-exam.com

公式サイト

www.pythonic-exam.com

Twitter

twitter.com

Facebook

www.facebook.com

まとめ

Python3 エンジニア検定」を受験した結果と勉強したことの振り返りました.普段業務で Python を扱わない僕で 約20時間 ほど勉強時間に充てました.今年の夏にリリースされるデータ分析試験にも臨みたいので引き続き Python の勉強を続けていきます!

参考情報

受験に関して以下にまとめます.

AWS と Terraform の実践力を磨ける「Pragmatic Terraform on AWS」

タダです。

以前、サンプル版で読んだ「Pragmatic Terraform on AWS」の製品版を読了しました.読了後の感想を今回まとめます.なお、本書の概要や章立ては下記の記事に書いているので気になる方は覗いてみてください.

sadayoshi-tada.hatenablog.com

本書で構成できる AWS 環境

本書は 以下の Docker コンテナの Web サービス環境を構成しながら AWS と Terraform の実装方法を学べます.

f:id:sadayoshi_tada:20190505194201p:plain

また、登場するサービスを列挙すると以下の通りで、構成図からもわかるように AWS のマネージドサービスが幅広く利用されています.

  • VPC,Subnet,RouteTable,Security Groups,NATGateway
  • ALB
  • ACM
  • ECS(Fargate),ECS Scheduled Tasks
  • RDS(MySQL),ElastiCache(Redis)
  • S3
  • Route53
  • IAM,KMS
  • CodePipeline,CodeBuild,CodeDeply
  • SSM Parameter Store,Session Manager
  • Kinesis Firehose
  • CloudWatch Logs

読了後の所感

製品版を読んでみての所感をまとめます.

  • 本書の特徴が、AWS,Terrform のパラメーターを詳細に把握できていなくても読み易く、140ページほどを僕は3時間ほどで読めました.僕は Terraform を少し触ったことがある程度だったので、丁寧な解説のおかげで手を動かしつつスルスル読めました.

    • 5章から16章でAWS のサービスの設定パラメーターを解説後、Terraform での定義方法を細かく解説してくれているため、AWS サービスの理解と、サンプルコードをもとに Terraform での実装を実戦形式で学べます.
  • Terraform の設計、運用管理の情報が17章からまとまっていて、普段 CloudFormation を使っているため Terraform での設計思想や実例を知れて勉強になりました.

    • モジュールの構造化,Terraform のベストプラクティス,Terraform Module Repository への登録が解説されています.
    • 特にモジュールの構造化で大規模サービスになった際のコードの分割の考え方,チーム開発でのtfstateファイルの管理等実戦で生かせる情報が揃っています.
  • Terraform は国内事例も多く便利なため今すぐ導入したくなるかと思いますが、導入することが目的にならないよう本書のコードの設計・管理の章を踏まえて検討するのにも役立つと感じました.

関連資料

  • 手持ちの環境の Terraform のバージョンがv0.11でしたが、次期バージョンのv0.12も入れて試してみたいと思います.著者の@tmknom さんがv0.12での対応も解説してくださっており、本当に丁寧な対応に感謝感謝です.

nekopunch.hatenablog.com

まとめ

Pragmatic Terraform on AWS」読了後の所感をまとめました.2019年5月時点でAWS と Terraform の組合せを学ぶなら本書が最適です.今後v0.12も出てきますので本書を足掛かりに CloudFormation だけでなく Terraform も使えるよう力をつけていければと思います.

【サービス概要編】AWS の運用をサポートする Systems Manager を理解する

タダです。

AWS では既存のシステムを Lift (移行)した後に Shift (最適化)していくことで AWSクラウドメリットを得られます。そのため、運用・管理系のサービスである、AWS Systems Manager(以下、Systems Manager)の機能を理解し、運用から AWS ライクにしていけるはずです。今回から Systems Manager の概要と各機能の特徴を理解して、運用時のユースケースを考えていく記事を書いていきます。本記事は Systems Manager のサービス概要をまとめます。

aws.amazon.com

サービスの概要

Systems Manager は EC2 だけでなくオンプレミスや仮想マシン、他の AWS リソースを設定・管理するためのサービスです。サーバーの運用に役立つ機能が集まっているのが特徴的です。

www.slideshare.net

Systems Manager の機能は大きく次の通りです。

  • リソースグループ機能
  • インサイト機能
  • アクション機能
  • 共有リソース機能

各機能の概要

リソースグループ機能

リソースグループ機能は、全て同じリージョンにあり、クエリで指定された条件に適合する AWS リソースのコレクションを指します。リソースグループを使うと、タグで指定指定した条件に従って AWS リソースの情報を整理できるので、後述の Automation をはじめとした機能で管理するタスクを容易にします。

インサイト機能

インサイト機能では、AWSリソースに関するデータを一元的に表示するための機能を提供します。

たとえば、CloudTrail ログ、Config ルールに関する評価結果やTrusted Advisor レポートなどのリソースグループ内のリソースに関する詳細情報が表示されます。また、CloudWatch ダッシュボード、インスタンスからのソフトウェア情報の収集プロセスを自動化する Inventory Management、インスタンスのパッチ適用管理に役立つ Configuraion Compliance も機能の中に含まれています。

アクション機能

アクション機能は、AWSリソースに対する各種運用のアクションを提供します。アクション機能で提供されるのは、次の機能です。

  • 運用自動化のための Automation
  • サーバーにログイン不要で、多数のサーバーに対してコマンドを実行できる Run Command
  • Linux サーバーに SSH 不要でログイン可能な Session Manager
  • インスタンスへのパッケージ適用やパッケージ化可能な Distributor
  • インスタンスへのパッチ適用の自動化のための Patch Management
  • OSの停止が発生したりする場合を定義する メンテナンスウィンドウ
  • インスタンスが起動時のブートストラップ処理を定義したりする State Management

共有リソース機能

共有リソース機能は、AWS リソースの管理及び設定のための機能を提供しています。Systems Manager が実行するアクションを定義している Systems Manager Documents や設定データ管理や君データの管理のための階層型ストレージである パラメーターストアが含まれています。

Systems Manager を利用するための条件

このサービスを利用するためには以下の条件があります。サポートされている OS のサーバーがインターネットアクセス可能な経路を持っていて、SSM Agent を導入していれば利用するための条件が整います。

  • OS がサポートされているか
  • Systems Manager API へアクセスするためのインターネットアクセスなネットワーク経路があるかどうか
  • Systems Manager にアクセス可能な IAM ロールを作成する
    • EC2 であれば、IAM ポリシーで「AmazonEC2RoleforSSM」をアタッチしておく
  • SSM Agent を導入できているかどうか

参考ドキュメント

docs.aws.amazon.com

料金 / リージョン

そして、サービスを利用する際の料金は、パラメーターストア、ディストリュビューター、オートメーション、オンプレミスの管理の場合は料金が発生します。また、リージョンは記事公開時点では大阪ローカルリージョンを除き全リージョンに展開されています。

参考ドキュメント

aws.amazon.com

aws.amazon.com

まとめ

2019年5月時点の Systems Manager のサービス概要をまとめてみました。次回から各機能の詳細な利用方法を踏まえつつ、ユースケースも考えていきます。Systems Manager を使いこなして AWS の活用が楽になるような情報を書いていけたらと思います!