---
title: "AWS CodeDeployのクセ | grasys blog"
url: "https://blog.grasys.io/post/tsunoda/codedeploy/"
description: "こんにちはtsunodaです。 リモートMTGの時に部屋見られちゃうと思ってカメラon躊躇します。 警察がいると別に悪いことしてないのにソワソワするアレに近い気持ちです。 AWSのCodeDeployを使っていて、 これはクセだなーと思った事を紹介しようと思います。 CodeDeployとは CodeDeployとは…"
---

# AWS CodeDeployのクセ

-   ![](/_astro/noicon.CTHOhNiB_1HMs6A.webp)[tsunoda](/authors/tsunoda/)
-   公開日：2020年5月31日
-   カテゴリー：[Tech](/categories/tech/)
-   タグ：[#AWS](/tags/aws/)[#codedeploy](/tags/codedeploy/)

![AWS CodeDeployのクセ](/_astro/og-image.DDSiu2Ny_XHpDd.webp)

こんにちはtsunodaです。  
リモートMTGの時に部屋見られちゃうと思ってカメラon躊躇します。  
警察がいると別に悪いことしてないのにソワソワするアレに近い気持ちです。

AWSのCodeDeployを使っていて、  
これはクセだなーと思った事を紹介しようと思います。

## CodeDeployとは

[CodeDeploy](https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/welcome.html)とは、Amazon EC2 インスタンスやオンプレミスインスタンス、サーバーレス Lambda 関数、または Amazon ECS サービスに対するアプリケーションのデプロイを自動化するデプロイメントサービスです。  
デプロイを自動化できるので便利！

今回は、CodeCommitでgitを同期、CodeDeployでdeployを設定、CodePipelineを設定し、  
CodeCommitが同期した段階で自動的にEC2インスタンスへdeployするような設定をして検証してみました。  
この辺の設定はまた今度紹介しようと思います。

### クセ1 deployの挙動

最初のdeployの際に、対象のdirが既にdeploy先に存在すると、失敗します。  
CodeCommitにgitを同期、

![クセ1 deployの挙動の画面（1）](/_astro/01-111-1024x248-162f0350.B0p9JSdU_ZSn4g.webp)

CodeDeployを設定、

![クセ1 deployの挙動の画面（2）](/_astro/02-112-1024x299-69a38ec0.BmbuB4jn_ZAoBFw.webp)

CodePipeline設定

![クセ1 deployの挙動の画面（3）](/_astro/03-113-1024x225-d82c3f92.B_3XYD5o_1wKXAI.webp)

deploy先のCodeCommitと同様のgitが置かれているdirへdeploy開始！

Plain textcontent\_copy

```
deploy先: /usr/local/test/sample
$ ls /usr/local/test/sample
test sample-dir
```

するとdeployが失敗します。

![クセ1 deployの挙動の画面（4）](/_astro/04-114-1024x504-82104aef.BmXEJlcG_ZEx9Rm.webp)

初めてのdeployの際に、対象のdirが既にdeploy先に存在すると、コケます。  
初めて会うのになんで私のこと知ってるの!? えーむりむり!!  
とCodeDeployが思うわけです。  
なので、初めてdeployするなら、空にしてからdeployが良いです。  
初めましてこんにちはです。

Plain textcontent\_copy

```
rm -rf /usr/local/test/sample
mkdir /usr/local/test/sample
```

できた。

![クセ1 deployの挙動の画面（5）](/_astro/05-115-1024x506-5543581a.uKeBUiha_jIeSt.webp)

ちゃんとdeployされています。

### クセ2 appspec.ymlに書くhookスクリプトの場所

deployの際にpermissionや実行するスクリプトなどをappspec.ymlに書く事で設定できます。  
例えば以下のようにappspec.ymlに書くとします。

Plain textcontent\_copy

```
version: 0.0
os: linux
files:
  - source: /
    destination: /usr/local/test/sample
permissions:
  - object: /
    owner: daemon
    group: daemon
hooks:
  AfterInstall:
    - location: deploy.sh
      timeout: 180
```

そしてdeploy.shの中で以下のように書いてあるとします。

Plain textcontent\_copy

```
yarn install --production=false
yarn run build
```

これは期待通りに動いてくれません。  
スクリプト自体はdeploy先の `/usr/local/test/sample/` 直下にdeployされてます。  
ですが実際に実行される場所は、  
`/opt/codedeploy-agent/deployment-root/${deployment-group-id}/deployment-id/deployment-archive/deploy.sh`  
になります。 なので、上記のスクリプトの場合は、

Plain textcontent\_copy

```
cd /usr/local/test/sample && \
yarn install --production=false && \
yarn run build
```

という風に場所を指定しないと意図した通りには動いてくれないのです。

##### クセがすごい

これを知らないと指定したスクリプトがうまいこと機能せずにハマることになるやもしれません。。  
公式ドキュメントにもそれらしい事は書いてありますが、

Plain textcontent\_copy

```
DownloadBundle – このデプロイライフサイクルイベント中に、CodeDeploy エージェントはアプリケーションリビジョンファイルを一時的な場所にコピーします。

Amazon Linux、Ubuntu Server、および RHEL Amazon EC2 インスタンスの /opt/codedeploy-agent/deployment-root/deployment-group-id/deployment-id/deployment-archive フォルダ。
```

正直分かりづらす。。

### クセ3 codedeploy-agentディレクトリの容量

deployする内容にもよりますが、クセ2にあるように、  
`/opt/codedeploy-agent/deployment-root/deployment-group-id/deployment-id/deployment-archive`  
こちらに一時的にコピーされます。  
内容によっては容量食います。 結構な容量のリポジトリだったりすると、diskを圧迫します。  
なのでdeployする容量がデカい場合には `/opt/codedeploy-agent` はsymlinkにしといてattach-diskに逃すとかした方が良さげです。  
これは別にクセじゃなかった。

### まとめ

deploy先に既に対象のdirがあると初めはコケたり、  
appspec.ymlで設定したhookスクリプトがうまく動いてくれなかったり、  
初めて触るときは色々と調べながらになるかと思います。  
ただ、自動でdeployしてくれるしクセを掴めば便利です。  
失敗、成功もログが出るし、deployで失敗したのか、appspec.ymlに記載したスクリプトが失敗したのか、  
どのインスタンスで失敗したのかなど、ログもちゃんと出てくれるので便利です。

参考URL：  
[CodeDeploy agent Install](https://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent-operations-install-linux.html)  
[appspeckを読み解く](https://dev.classmethod.jp/articles/code-deploy-appspec/)  
[hookスクリプトの場所](https://sqlazure.jp/r/aws/1656/)

## この記事を書いた人

[![](/_astro/tsunoda.CrA_Wh9V_Z1aOeCP.webp)](/authors/tsunoda/)

### [tsunoda](/authors/tsunoda/)

tsunodaのプロフィールと執筆記事をご覧いただけます。

[プロフィールと記事一覧](/authors/tsunoda/)
