#oyasuminase

駆け出しオタクエンジニア

Jenkins+Python+unittest

(2020/05/06:追記)こっちを見たほうが良いです。

oyasuminase.hatenablog.com


Jenkinsでpythonのunittestを実行します。

  • jenkins: 2.234

Python周りの設定

Python3のインストール

EC2にはデフォルトでPython2系が入っているので3系を入れる。

$ sudo yum update
$ sudo yum install python3

venvは使いません。必要になったときにやる。

ShiningPanda Pluginのインストール

  1. Jenkinsの管理>プラグインの管理より「ShiningPandas Plugin」を検索してインストール。
  2. Jenkinsの管理>Global Tool ConfigurationよりPython3を追加する。

これでJenkinsでPython3系が使えます。

ジョブの作成

Python3読み込みテスト

Python3を使えるようになっているか確認します。

  1. フリースタイルプロジェクト>ビルド>ビルド手順の追加>Virtualenv Builderを追加。
  2. 先程追加したPython3を選択して下記のshellを書く。
python --version

これでジョブを保存してビルドを実行。

ジョブのコンソール出力を確認。

+ python --version
Python 3.7.6

OK。認識できてますね。

unittestジョブの作成

さて本題です。ジョブの構成は下記の通り。

  1. Githubからclone
  2. unittest実行

これだけ。今後はポーリングやフックスクリプトを起点に実行するつもり。ひとまずはジョブの作成。先程の確認用ジョブを書き換えていきます。

1. Githubからclone

ソースコード管理>gitからリポジトリURLを追加するだけ。

2. unittest実行

Virtualenv Builderのshellを下記の通り変更。

pip install -r requirements.txt
python -m unittest

Jenkinsとは関係ないんだけど__init__.pyディレクトリにないとtestが認識されないんですね。テスト結果の集計をしたいけどもう夜も更けているのでここまでで。

ジョブの実行

失敗しました。環境変数がとれなかったようです。外部APIのテストやるわけじゃないしここもMockにした方がいいのかな?今回はJenkinsの勉強を兼ねてGUIから環境変数を追加してみます。

Jenkinsの管理>システムの設定>グローバルプロパティより環境変数を追加。

再度ジョブを実行します。

+ python -m unittest
....
----------------------------------------------------------------------
Ran 4 tests in 0.134s

OK

OK。おやすみ〜

停止しているインスタンスにElastic IPアドレスを関連付けていると課金される

題名通り。知らなかった。

aws.amazon.com

Elastic IP アドレスを効率的に使用するため、これらの IP アドレスが実行中のインスタンスに関連付けられていない場合や、停止しているインスタンスやアタッチされていないネットワークインターフェイスに関連付けられている場合は、時間毎に小額の料金をご請求します。

Amazon Web Services 基礎からのネットワーク&サーバー構築

インフラ弱いのとAWSの基礎をやりたいなと思ったので購入しました。AWSは各種サービスを必要に応じてつまみ食いしてる感じです。

内容

目次

  1. システム構築をインフラから始めるには
    1. 開発者がネットやサーバーを構築するメリット
    2. ネットワークやサーバーを構築する
    3. WordPressでブログシステムを作る
    4. 物理的なネットワークとAWS
    5. 本書の流れ
  2. ネットワークを構築する
    1. ネットワークで用いるIPアドレス範囲を定める
    2. 実験用のVPCを作成する
    3. VPCをサブネットに分割する
    4. インターネット回線とルーティング
    5. まとめ
  3. サーバーを構築する
    1. 仮想サーバーを構築する
    2. SSHで接続する
    3. lPアドレスとポート番号
    4. ファイアウォールで接続制限する
  4. Webサーバーソフトをインストールする
    1. Apach HTTP Serverのインストール
    2. ファイアウォールを設定する
    3. ドメイン名と名前解決
    4. まとめ
  5. HTTPの動きを確認する
    1. HTTPとは
    2. ブラウザの開発者ツールでHTTPのやりとりをのぞいてみる
    3. Telnetを使ってHTTPをしゃべってみる
    4. まとめ
  6. プライベートサブネットを構築する
    1. プライベートサブネットの利点
    2. プライベートサブネットを作る
    3. プライベートサブネットにサーバーを登録する
    4. 踏み台サーバーを経由してSSHで接続する
    5. まとめ
  7. NATを構築する
    1. NATの用途と必要性
    2. NATゲートウェイを構築する
    3. NATゲートウェイを通じた疎通確認をする
    4. まとめ
  8. DBを用いたブログシステムの構築
    1. この章の内容
    2. DBサーバーにMariaDBをインストールする
    3. WebサーバーにWordPressをインストールする
    4. WordPressを設定する
    5. まとめ
  9. TCP/IPによる通信の仕組みを理解する
    1. TCP/IPとは
    2. UDPTCP
    3. まとめ

感想

名前の通り「基礎からのネットワーク&サーバー構築」でした。 VPCにWebサーバーとDBサーバーを立ててブログシステムを作るまでのハンズオン。200ページほどで図も多いため一日もかからず終わる内容です。

f:id:ppine:20200403162045p:plain

AWSは実地検証のために用いるのであって詳しく書かれている訳ではないです(アカウント作成から載っているのかと思った)ネットワーク&サーバーに関しても本当に基礎の基礎だけです。基礎を学ぶならもう一冊必要だと感じました。

一昔前はローカルにVirtualBoxなどで仮想環境を作成して学んでいたものがAWSに置き換わった感じなのかなあと。ハンズオンは有用だしAWSは学んで損はないので入門としては中々良いかも。

最後にひとつ気になったこと。サーバー2台立てるわけだけどこのままほっとくとEC2の無料枠超える気がする。停止した方がいいとは書いてなかった気がするけど見落としなのか手厳しいのか…

javascript:;

chromeのブックマークに後で読もうとか良かったなと思うページを保存しがちで溢れてきました(はてブも同様)一部をブログの記事として吐き出します。

ja.stackoverflow.com

覚えてないけど多分こういうコードに出会って調べた結果このQAにたどり着いたのかと。

<a href="javascript:;">hoge</a>

ハイパーリンクとして下線・青文字にするためにhref属性を設け、値に副作用のないjavascript:;を指定しているっぽいです。

以上。

AWS Amplifyのチュートリアルをやろうと思ったけど途中で辞めた

なんかやりたいなと思ったのでAWS Amplifyのチュートリアルをやります。

aws-amplify.github.io

サービスについてはよく知りません。バックエンドをいい感じにしてくれるらしいです。

以下、チュートリアルに沿って進めていくのですが途中で断念しました。設定を誤ってチュートリアルと違う内容になっていたようです。やり直す気もなかったので辞めてしまいましたが日記として記事には残しておきます。

セットアップ

macにNode.jsが入っていなかったのでまずはそこから。

Node.js

バージョン管理用のnodebrewをインストール。

$ brew install nodebrew

Node.jsをインストール…しようと思っらエラー。

$ nodebrew install-binary latest

Fetching: https://nodejs.org/dist/v13.12.0/node-v13.12.0-darwin-x64.tar.gz
Warning: Failed to create the file                                             
Warning: /Users/user/.nodebrew/src/v13.12.0/node-v13.12.0-darwin-x64.tar.gz: 
Warning: No such file or directory

こちらのサイトを参考にディレクトリを作成してなんとかなりました。

$ mkdir -p ~/.nodebrew/src
$ nodebrew install-binary latest
Fetching: https://nodejs.org/dist/v13.12.0/node-v13.12.0-darwin-x64.tar.gz
######################################################################### 100.0%
Installed successfully

パスを通して完了。

$ vim .zshrc
# 下記を追加
export PATH=$HOME/.nodebrew/current/bin:$PATH

$ source ~/.zshrc
$ node -v
v13.12.0

Amplify

$ npm install -g @aws-amplify/cli
$ amplify configure

このあと説明に沿ってリージョンとIAMユーザーの設定を行います。

Step 1. Create a New App

npxでローカルにないパッケージを実行できることを初めて知りました。create-react-appよりReactプロジェクトを作ります。

$ npx create-react-app amplify
$ cd amplify

作成したディレクトリ内にAmplifyをインストール。

$ npm install @aws-amplify/api @aws-amplify/pubsub
$ npm install aws-amplify-react

Step 2: Set Up Your Backend

$ amplify init 

いろいろ聞かれるので答えます。

? Enter a name for the project amplify
? Enter a name for the environment test
? Choose your default editor: Visual Studio Code
? Choose the type of app that you're building javascript
Please tell us about your project
? What javascript framework are you using react
? Source Directory Path: src
? Distribution Directory Path: build
? Build Command: npm run-script build
? Start Command: npm run-script start

何も分からずに進めていて早くも飽きてきました。

Step 3: Add API and Database

GraphQLのAPIを追加するっぽいです。GraphQLは名前聞いたことあるくらいで全く分かりません。

$ amplify add api

いろいろ聞かれるので答えます。

? Please select from one of the below mentioned services: GraphQL
? Provide API name: amplify
? Choose the default authorization type for the API API key
? Enter a description for the API key: 
? After how many days from now the API key should expire (1-365): 7
? Do you want to configure advanced settings for the GraphQL API No, I am done.
? Do you have an annotated GraphQL schema? No
? Do you want a guided schema creation? No
? Provide a custom type name MyType

これで設定を反映するのかな?もう分かりません。

$ amplify push

眠いです。今日やるべきではなかったかもしれない。

? Do you want to generate code for your newly created GraphQL API Yes
? Choose the code generation language target javascript
? Enter the file name pattern of graphql queries, mutations and subscriptions sr
c/graphql/**/*.js
? Do you want to generate/update all possible GraphQL operations - queries, muta
tions and subscriptions Yes
? Enter maximum statement depth [increase from default if your schema is deeply 
nested] 2

Step 4: Integrate into your app

コードが出てきて少しモチベーションが上がりました。久しぶりにReact触ります。

App.js

import React from 'react';

import API, { graphqlOperation } from '@aws-amplify/api';
import PubSub from '@aws-amplify/pubsub';

import { createTodo } from './graphql/mutations';

import awsconfig from './aws-exports';
import './App.css';

// Configure Amplify
API.configure(awsconfig)
PubSub.configure(awsconfig)

const createNewTodo = async () => {
  const todo = { name: "Use AWS Async", description: "Realtime and Offline"}
  await API.graphql(graphqlOperation(createTodo, {input: todo}))
}

const App = () => {
  return (
    <div className="App">
      <button onclick={createNewTodo}>Add Todo</button>
    </div>
  );
}

export default App;

最初の修正の段階でエラー。

Failed to compile.

./src/App.js
Attempted import error: 'createTodo' is not exported from './graphql/mutations'.

指摘されているファイルは自動生成したものなのでAPIを追加するとことかでチュートリアルと違う内容を設定してしまったのだと思います。

というわけでここで断念。ちゃんと理解しながらすすめるべきだなあという感じ。おしまい。