DevOps

自動テスト、継続的デリバリー、サービス統合と監視、およびSDLCインフラストラクチャーの構築に取り組んでいるソフトウェアエンジニアのためのQ&A

2
一度に1つのホストでansibleを実行し、障害でブレークする方法
Ansible Playbookを手に入れて、いくつかの不安定なデバイスを順番に更新したいと思っています。を使用できますserial:1が、エラーが発生した場合はプレイブックを完全に停止し、エラーを蓄積する代わりに続行する前に修正できるようにします。 また、停止したホストと同じホストでプレイブックを再起動したいと思います。現在Ansible v2.0を使用していますが、そのような機能が新しいバージョンでのみ使用可能な場合は、新しいバージョンに切り替えることもできます。
15 ansible 

3
Mythical Man Monthの影響を軽減する方法は何ですか?
ブルックスの法則: 後期ソフトウェアプロジェクトに人員を追加すると、後の作業になります。 彼の本「No Silver Bullet —ソフトウェアエンジニアリングの本質と事故」で、フレデリックブルックスは「神話の男月」の概念を定義しています。 ブルックスの仮定は、複雑なプログラミングプロジェクトを、作業者間のコミュニケーションがなく、タスクとそれを実行する作業者間の複雑な相互関係を確立せずに作業できる個別のタスクに完全に分割できないことです。 1982年以来、私たちは確かに前進し、この問題を緩和するためのさらなる経験を集めてきました。より多くの問題を作成せずにプロジェクトにリソースを追加するために、仕事で正常に適用したソリューションにはどのようなものがありますか。

1
ChefでSSL交換を検証するために内部CA証明書を含めるにはどうすればよいですか?
私たちは社内の認証局を使用して、私の会社でサーバー証明書を作成しています。 また、SSLインターセプト(MITM)を実行する透過プロキシにも対処する必要があります。 ChefがCA証明書を知らないためにSSL検証エラーが定期的に発生し、時にはツール12 質問:有効なSSL交換を取得するために、CA証明書をChefに認識させるにはどうすればよいですか?
15 chef  ssl 

4
複雑な分岐現実から単一分岐モデルに移行する方法は?
大規模な組織では、ウォーターフォール手法を使用すると、通常、非常に複雑な分岐構造(ブランチスパゲッティ)が発生します。 複雑な分岐現実からトランクベースの開発のような単一分岐モデルへの移行に使用できる分岐戦略は何ですか? 更新: 明確にするために、質問は移行/移行自体に関するものであり、前後の方法論に関するものではなく、かなり明確です。 「今日のEOBでは、まだ数十億のブランチがある滝ですが、明日はトランクベースの単一ブランチCIに切り替えます」とは言えません。

3
SnowFlakesサーバー、Phoenixサーバー、Immutableサーバーの長所と短所は何ですか?
私は、各タイプのサーバーのセキュリティ/管理の容易さ/法医学能力の比較のようなマトリックスに興味があります。また、各タイプのいくつかの主要な機能を忘れる場合があります。 私は型について一般的な考えを持っていますが、場合によっては(たとえばアプリケーションの自動化が複雑になった場合)型を選択するときに参照行列が役立ちます。 それが広すぎるという懸念を避けるために、それを複数の質問に分割すると情報が散らばり、セキュリティ比較に関する質問も各タイプを比較する必要があると感じています。


1
「すべての製品用の1つの大きなVCSリポジトリ」組織モデルから「多数の小さなVCSリポジトリ」モデルへのスムーズな移行を実現する方法
いくつかのVCSシステムのリポジトリに保持されている製品のコードベースが、そのコードベースがほぼ間違いなくいくつかの製品を含んでいると見なされるポイントに進化するという一般的なシナリオです。それぞれが単一の製品専用の複数のVCSリポジトリにコードベースを分割すると、いくつかの利点を活用できます(以下の肥大化リポジトリモデルよりもVCSリポジトリごとに製品を持っている利点を参照)。技術的な面では、ほとんどのVCSがこの操作をサポートしているため、コードベースの分割はかなり簡単な手順です。ただし、この分割により、自動化されたテスト、継続的な配信、サービスの統合または監視に関連するエンジニアリングの問題が発生する可能性があります(分割によって発生した問題を参照してください)。)したがって、このような分割の実行を計画している組織は、この移行をできるだけスムーズに、つまり、配信を中断せずにパイプラインを監視する方法を知る必要があります。これの最初のステップは、おそらくプロジェクトの概念と、モノリシックコードベースでの分割の詳細を理解することです。 この質問への回答では、私は見たいです: 製品とは何かを実際に定義する試み。これは、既存のコードベースで製品を実際に描写するための実用的な基準を提供します。 この作業定義に従って、実際に分割を実行する計画を作成します。コードベースがContinuous-IntegrationおよびContinuous-Deliveryを実装する完全に自動化されたsdlcによって処理されるという単純な仮定を立てることができます。つまり、各ブランチは現在のコードベースに実装された自動化されたテストスイートによって検証され、各「マジック」ブランチにマージされるたびに、テストおよびデプロイされる製品アーティファクトが生成されます。(製品のアーティファクトは、たとえばソースtarball、ドキュメント、バイナリソフトウェアパッケージ、Dockerイメージ、AMI、unikernelです。) そのような計画は、それを回避する方法を説明すれば満足です 分割によって提起された問題 自動化されたテスト手順は、既存のモノリシックリポジトリとスプリットリポジトリにどのように関連していますか? 自動化された展開手順は、既存のモノリシックリポジトリと分割リポジトリにどのように関連していますか? 自動展開手順自体のコードはどこに保存されていますか? 保存されたインフラストラクチャ、監視、および高可用性戦略はどこにありますか? 開発者が一度に1つのコードベースのみを必要とすることを保証する方法(ただし、他のコードベースのアーティファクトを使用可能)。 git-bisectのようなツールはどのようにできますか 限界メモ:肥大化したリポジトリモデルよりもVCSリポジトリごとに製品を持つことの利点 特定の製品のコードベースを保持するいくつかの小さなリポジトリがあると、「肥大化したリポジトリ」アプローチに比べて次の利点があります。 肥大化したリポジトリでは、製品が不安定なときにリリースをロールバックすることは困難です。これは、履歴が他の製品履歴と混在しているためです。 肥大化したリポジトリでは、プロジェクトの履歴やプルを確認するのが難しく、小さなリポジトリでは、この情報を読む可能性が高くなります。(これは、svnとは異なり、サブツリーをチェックアウトできないgitのようなVCSに固有の場合があります!) 肥大化したリポジトリを使用すると、開発時にさらに多くのブランチダンスを行う必要があります。N個のリポジトリがある場合、N個のブランチで並行して作業できます。リポジトリが1つしかない場合は、1つのブランチでしか作業できません。または、処理が面倒な作業コピーがたくさんあります。 いくつかの小さなリポジトリを使用すると、ログはプロジェクトのヒートマップを提供します。開発チームの知識普及のプロキシとして使用することもできます:3か月間レポXにコミットしなかった場合、レポXに取り組んでいるチームに私を割り当てて、開発を常に把握しておくとよいでしょうそのコンポーネントで。 小さなリポジトリを使用すると、コンポーネントの明確な概要を簡単に取得できます。すべてが単一の大きなリポジトリに格納されている場合、各コンポーネントの輪郭を示す明確なアーティファクトはなく、コードベースは泥の大きな塊に向かって簡単にドリフトできます。 小さなリポジトリにより、コンポーネント間のインターフェイスで作業する必要があります。しかし、私たちは良いカプセル化を望んでいるので、これはとにかくやるべき仕事なので、私はこれを小さなリポジトリの利点として数えます。 いくつかの小さなリポジトリを使用すると、複数の製品所有者を持っている方が簡単です。 いくつかの小さなリポジトリを使用すると、完全なリポジトリに関連し、自動的に検証できる単純なコード標準を簡単に作成できます。

3
機能フラグの切り替えの使用方法
アプリケーションで機能フラグの切り替えを使用するさまざまな方法は何ですか? 完全に機能フラグが切り替えられたアプリケーションに到達するために行うべき正確なことを開発者に説明する場合、それらの手順はどうなりますか?

4
debパッケージを、アプリケーションを展開するコンテナであるかのように使用することの欠点はありますか?
私のチームは現在、NodekerアプリをDockerなどのコンテナーで実行するのではなく、debパッケージとして展開するかどうかを決定しようとしています。 私はこのブログ読んでからこのアイデアを得た、ここで既存のPythonアプリケーション用のdebパッケージを使用するためのいくつかの良い引数になります。私たちにとって魅力的なこのブログの主なポイントは、Dockerエコシステムの維持の問題です(ポート共有、アクセス許可、Dockerイメージのホスティングなど)。 「元のコンテナとしてのdep-packages」は、ポートの競合の心配がなく、すべての依存関係が仮想環境内で維持される小規模なサービスにとって非常に理にかなっているようです。 しかし、私の腸は、debパッケージが適切であれば、より一般的であり、ドッカーはより言語固有のソリューションとして宣伝されるだろうと言っています。Dockerなどのフルシステムを使用する代わりに、debパッケージなどを使用してサービスを展開することの欠点はありますか?

6
Dockerは私のユースケースに適していますか?
私の会社には、基本的にUbuntu 12.04を実行しているミニコンピューター「Smartbox」で構成されるシステムがあります。このボックスは、Djangoアプリケーションとそれに関連するいくつかの異なる起動プロセスを実行します。他にあまりない。私たちはこれらの箱をフィールドに何千も持っています。パッケージの依存関係、プロセスの登録などを、debパッケージを介して管理しますが、成功の度合いはさまざまです。 現場でユーザーに更新を効率的かつ堅牢にプッシュする方法が必要です。また、OSをアップグレードするときに(おわかりのようにUbuntuのアップグレードが遅れているので)、パッケージが "正常に動作している"ことについて比較的安心できることも必要です。 私はDockerについてあまり知りませんが、私たちの問題について初めて聞いたとき(私は新入社員です)、Dockerが私の最初の考えでした。しかし、それについて考えれば考えるほど、そうではないのではないかと感じました。これらのボックスは、Dockerの価値提案の大きな部分であるOSを制御する私たちのものだからです。それで、ボックスが常にUbuntuであり、基本的にDjangoアプリと実行するいくつかのプロセスがあるだけだとしたら、Dockerはdebパッケージよりも優れているでしょうか? TL; DR:常にUbuntuを実行する分散アプライアンスのDocker vs debパッケージ。プラットフォームの独立性はそれほど重要ではありません。
14 docker 

5
Dockerコンテナの内部へのアクセスを禁止するにはどうすればよいですか?
Dockerイメージの形式で顧客にアプリを配信したい。ただし、エンドユーザーがコンテナ内の何かを変更しないようにすることが重要です。ユーザーは、コンテナを実行/停止し、ネットワーク経由でコンテナとやり取りすることのみが可能です。 コンテナの内部へのアクセスを禁止することは可能ですか?コンテナが作成したイメージの整合性を検証することは可能ですか?
14 docker  security 

3
Gitから単一のリビジョンを取得する
Gitの完全な改訂履歴があることは、開発プロセスの一部として多くの利点があります。 しかし、当社の製品はソースコードであり、コンパイルや処理を必要としないスクリプト言語を使用しているため、Gitの履歴が展開の負担になります。この例では、変更ごとにクリーンな仮想環境を展開し、単一のマシン。 履歴の量を減らす方法がいくつかあります。例えば、効率がブランチのリビジョンの深さに依存する浅いクローン、クローンの代わりにフェッチを実行しますが、リビジョンから履歴を取得して戻す、または完全に取得するリポジトリは一度必要に応じてプルしますが、これはディスク容量の点で無駄であり、信頼性が低くなる傾向があります。 Gitから履歴なしで1つのリビジョンを取得する方法はありますか?
14 git 

3
AWSのシンプルなCI / CDコンテナー
AWS Code Pipeline、Code Buildを使用して新しいDockerコンテナーを作成し、ECRにプッシュしています。 私のアプリケーションは、シンプルで単純な単一コンテナーベースです。現在実行中のコンテナをプルダウンし、ECSレジストリから新しいコンテナを再起動するための摩擦の少ないアプローチ(コードパイプラインを介したコードビルドの出力)。 EC2ユーザーデータを使用してCloudFormationを試し、一方にカスタムスクリプトを、もう一方にECSを使用してCloudFormationを試しました(まだ成功していません)。もっと明確でシンプルなアプローチが必要だと強く感じています。

2
分散タスクの優れたロギングプラクティスは何ですか?
次の設定があります。 複数のワーカーを作成し、計算を実行し、計算が完了した後に終了します。 そのため、毎回異なるインスタンスがタスクを実行するため、各ホストには独自のログファイルがあり、ファイルの膨大なリストが作成されます。 それは良い習慣ですか?そうでない場合、この特定のユースケースでタスク処理を記録するより良い方法は何でしょうか? PS:私のインフラストラクチャはサーバーレスです。したがって、今のところ、(AWS)CloudWatchにログインしています。ただし、AWSとは独立して質問に回答し、可能な限りサーバーレス設定に合わせてください。

4
AWS Lambda関数のパフォーマンスをテストするにはどうすればよいですか?
AWS Lambdaのコストは、関数の実行時間と、ある程度のメモリフットプリントに依存します。より速く終了し、より少ないメモリを使用する関数を使用すると、かなりのお金を節約できます。特に、そのような機能が頻繁に実行される場合。 Node.js Lambda関数を調整して、コストを節約するために速度とメモリフットプリントを小さくするにはどうすればよいですか? 改善するのに有利なLambdaの他の側面はありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.