pythonとyamlでgcpをdeploy!「google cloud deployment manager」

Post on 09-Jan-2017

1.908 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

PythonとYAMLでGCPをDeploy! 「Google Cloud Deployment Manager」

2

3

Masashi Terui @ marcy_teruiI’m a developer and architect in the operators company (JIG-SAW Inc.)

I'm the organizer on the some of events in sapporo with the theme of "Infrastructure as Code”. I’m a member of JAWS-UG Sapporo and GCPUG Sapporo (Coming soon!)

I develop a IoT application (ServerSide) with Python and more. I’m a husband of my wife. I’m a father of my son and daughter.

ABOUT ME

4

ABOUT US

5

Coming soon!!

6

7

Cloud Deployment Managerは、複雑なクラウドプラットフォームのソリューションを

シンプルな宣言型のテンプレートを使用して、

開発者が容易に設計、共有、展開、管理することを可能とします。

簡単なWebサーバから複雑な高可用性クラスタまで、

Cloud Deployment Managerはチームがインフラの管理に費やす時間を少なくし、

より多くの時間を開発をに向けることができます。

- - 公式ページ(https://cloud.google.com/deployment-manager/) の英文訳(間違ってたらゴメンナサイ) -

つまり

8

複雑なクラウドプラットフォームのソリューション

シンプルな宣言型のテンプレート

容易に設計、共有、展開、管理

→ GCPを

→ YAMLで

→ アレコレできちゃうわけです

9

resources: - type: compute.v1.instance name: vm-my-first-deployment properties: zone: us-central1-b machineType: https://www.googleapis.com/compute/v1/projects/sunlit-arcade-100913/zones/us-central1-b/machineTypes/f1-micro disks: - deviceName: boot type: PERSISTENT boot: true autoDelete: true initializeParams: diskName: disk-my-first-deployment sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20140619 networkInterfaces: - network: https://www.googleapis.com/compute/v1/projects/sunlit-arcade-100913/global/networks/default accessConfigs: - name: External NAT type: ONE_TO_ONE_NAT

10

いいえ、違います

YAMLとかJSONとかは”Code”ではありません

あくまでデータ(リソース)の表現方法(フォーマット)

別にあ○しぼーをdisってるわけではありません

個人的見解です

11

12

JSON or YAML

CloudFormationはより細かく制御でき、

ほとんどのサービスや機能を網羅しているが表現が冗長

軽く1000行とかのJSONができあがるの、何か間違ってると思うんですよ…

Pythonで書ける

13

14

インフラのコード化

自動化

再現可能なインフラ

インフラの世界へ開発のプロセスを持ち込む(TDD, CI etc…)

バズワード・・・?

15

16

17

18

19

resources: - type: compute.v1.instance name: vm-my-first-deployment properties: zone: us-central1-b machineType: https://www.googleapis.com/compute/v1/projects/sunlit-arcade-100913/zones/us-central1-b/machineTypes/f1-micro disks: - deviceName: boot type: PERSISTENT boot: true autoDelete: true initializeParams: diskName: disk-my-first-deployment sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20140619 networkInterfaces: - network: https://www.googleapis.com/compute/v1/projects/sunlit-arcade-100913/global/networks/default accessConfigs: - name: External NAT type: ONE_TO_ONE_NAT

20

def GenerateConfig(context): return """ resources: - type: compute.v1.instance name: vm-my-first-deployment properties: zone: us-central1-b machineType: https://www.googleapis.com/compute/v1/projects/sunlit-arcade-100913/zones/us-central1-b/machineTypes/f1-micro <snip> sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20140619 networkInterfaces: - network: https://www.googleapis.com/compute/v1/projects/sunlit-arcade-100913/global/networks/default accessConfigs: - name: External NAT type: ONE_TO_ONE_NAT """

21

import helpers.common

def GenerateConfig(context): return """ resources: - type: compute.v1.instance name: %(name) properties: zone: %(zone) machineType: %(machine_type) disks: - deviceName: boot <snip> sourceImage: %(source_image) networkInterfaces: - network: %(metwork_project)/global/networks/default <snip> """ % {"name": (common.GenerateMachineName("myFrontend", context.env(“environment")), "zone": context.env("zone"),, "machine_type": common.GenerateMachineTypeURI(zone=context.env("zone"), type=context.env("type")), "project": common.GenerateProjectURI(context.env("project")), "source_image": common.GenerateProjectURI("debian-cloud", "ebian-7-wheezy-v20140619"), "metwork_project": common.GenerateProjectURI("sunlit-arcade-100913")}

22

こんな風に

23

よく使う記述をメソッドにまとめる

オブジェクトに属性を与えて、

メソッドコールするだけ的な感じにしたり

使い回しを考えて共通化・部品化

自分(達)のインフラ構築・管理フレームワークを作れる

24

25

26

gcloud deployment-manager deployments create <name> --config <yml>

27

公式ドキュメント(英語ですw)

https://cloud.google.com/deployment-manager/overview

28

29

30

32

33

Pythonでクラウド(特にGCP)を操りたい イケてるクラウドインフラ上でPythonでIoTサーバサイド開発したい方今のところAWSメイン(Kinesis, DynamoDBとか、コアなプロダクト触れます) GCPは具体的に活用計画有り、Azure他もベンダー問わずメリットあるなら使います。もちろんInfra as CodeやChatOps等も実践しています。

top related