re:inventで発表されたX-Rayを試そうとしてみた

プレビューを申し込んですぐに利用可能になったので、早速トライしてみました。
##TOPページ
![スクリーンショット 2016-12-01 10.01.28.png](https://qiita-image-store.s3.amazonaws.com/0/23936/9df3b2f2-e74d-0fbb-1ccb-7fd87603ab5a.png "スクリーンショット 2016-12-01 10.01.28.png")
previewついてますね。

##Get Started
ちゃんとガイド付きです。「Launch ~」を選択すると、サンプルアプリが起動します。
![スクリーンショット 2016-12-01 10.01.38.png](https://qiita-image-store.s3.amazonaws.com/0/23936/9935165a-f8aa-6dd0-8d61-a7c5d19ee573.png "スクリーンショット 2016-12-01 10.01.38.png")

ちゃんと削除する方法まで載っていて、CloudFormationあまり使わない人にも親切です。
![スクリーンショット 2016-12-01 10.05.58.png](https://qiita-image-store.s3.amazonaws.com/0/23936/4b6a46e1-e002-531c-4468-11b3b82604bc.png "スクリーンショット 2016-12-01 10.05.58.png")

ここから先は従来通りのCloudFormationでのスタック起動作業です。
![スクリーンショット 2016-12-01 10.06.10.png](https://qiita-image-store.s3.amazonaws.com/0/23936/dd85103b-ded7-dd53-d89d-0f2259a2932b.png "スクリーンショット 2016-12-01 10.06.10.png")

###既存アプリに採用する場合
言語が`node``Java``C++`の３つに限られる様子です。
![スクリーンショット 2016-12-01 10.01.47.png](https://qiita-image-store.s3.amazonaws.com/0/23936/99cb8583-8f1b-9c98-d9af-097deb303ba7.png "スクリーンショット 2016-12-01 10.01.47.png")

nodeを選びましたが、インスタンスにデーモンを入れるかsdkをアプリに組み込むかを求められます。
![スクリーンショット 2016-12-01 10.01.57.png](https://qiita-image-store.s3.amazonaws.com/0/23936/d1bd6fe3-d63e-61dd-dc8b-d04ed58cf428.png "スクリーンショット 2016-12-01 10.01.57.png")



###なお
テストのCloudFormationですが、基調講演に集中せずに使おうとしたバチがあたったのか、コケました。
![スクリーンショット 2016-12-01 10.13.49.png](https://qiita-image-store.s3.amazonaws.com/0/23936/0de85d81-1d83-9a2c-2e5d-f0b87f9ee72b.png "スクリーンショット 2016-12-01 10.13.49.png")

あとでちゃんとやりなおします。

とりあえずごめんなさいの気持ちと共に基調講演の話を聞く姿勢に戻ります。

###追記
default VPCがない状態になってるアカウントで試したために起きた問題っぽいです。
最近作ったアカウントで動かしたところ、問題なく動きました。


##[おまけ]X-RayサンプルアプリのCFN
CloudFormationでサンプルアプリ作るらしいので、そのテンプレートを引っこ抜いてみました。
以下がそれ。

```
AWSTemplateFormatVersion: '2010-09-09'
Resources:
  SampleInstanceProfileRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
        - Sid: ''
          Effect: Allow
          Principal:
            Service:
            - ec2.amazonaws.com
          Action: sts:AssumeRole
      ManagedPolicyArns:
      - arn:aws:iam::aws:policy/AWSElasticBeanstalkWebTier
  XRayWriteOnlyPolicy:
    Type: AWS::IAM::Policy
    Properties:
      PolicyName: AWSXRayWriteOnlyPolicy
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
        - Effect: Allow
          Action:
          - sns:Publish
          - xray:PutTelemetryRecords
          - xray:PutTraceSegments
          - dynamodb:PutItem
          Resource:
          - "*"
      Roles:
      - Ref: SampleInstanceProfileRole
  SampleInstanceProfile:
    Type: AWS::IAM::InstanceProfile
    Properties:
      Path: "/"
      Roles:
      - Ref: SampleInstanceProfileRole
  SampleEBServiceRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
        - Sid: ''
          Effect: Allow
          Principal:
            Service: elasticbeanstalk.amazonaws.com
          Action: sts:AssumeRole
          Condition:
            StringEquals:
              sts:ExternalId: elasticbeanstalk
      ManagedPolicyArns:
      - arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkService
      - arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkEnhancedHealth
  ElasticBeanstalkApplication:
    Type: AWS::ElasticBeanstalk::Application
    Properties:
      ApplicationName: 
        Ref: AWS::StackName
  ElasticBeanstalkApplicationVersion:
    Type: AWS::ElasticBeanstalk::ApplicationVersion
    Properties:
      ApplicationName:
        Ref: ElasticBeanstalkApplication
      SourceBundle:
        S3Bucket:
          Fn::Join:
          - "."
          - - aws-xray-assets
            - Ref: AWS::Region
        S3Key: samples/aws-xray-node-sample-app.zip
  ElasticBeanstalkEnvironment:
    Type: AWS::ElasticBeanstalk::Environment
    Properties:
      ApplicationName:
        Ref: ElasticBeanstalkApplication
      Description: AWS X-Ray Getting Started Sample Application
      EnvironmentName:
        Ref: AWS::StackName
      OptionSettings:
      - Namespace: aws:autoscaling:launchconfiguration
        OptionName: InstanceType
        Value: c4.large
      - Namespace: aws:autoscaling:launchconfiguration
        OptionName: IamInstanceProfile
        Value:
          Ref: SampleInstanceProfile
      - Namespace: aws:elasticbeanstalk:environment
        OptionName: ServiceRole
        Value: aws-xray-sample-eb-service-role
      - Namespace: aws:elasticbeanstalk:environment
        OptionName: EnvironmentType
        Value: SingleInstance
      - Namespace: aws:elasticbeanstalk:healthreporting:system
        OptionName: SystemType
        Value: enhanced
      SolutionStackName: 64bit Amazon Linux 2016.09 v3.1.0 running Node.js
      VersionLabel:
        Ref: ElasticBeanstalkApplicationVersion
Outputs:
  ElasticBeanstalkEnvironmentURL:
    Description: URL for the Elastic Beanstalk Getting Started Sample Application
    Value:
      Fn::GetAtt:
      - ElasticBeanstalkEnvironment
      - EndpointURL
  SampleInstanceProfileRole:
    Description: IAM Role used for AWS X-Ray Getting Started Sample Application
    Value:
      Fn::GetAtt:
      - SampleInstanceProfileRole
      - Arn
  SampleInstanceProfile:
    Description: Instance Profile used for AWS X-Ray Getting Started Sample Application
    Value:
      Ref: SampleInstanceProfile
  SampleEBServiceRole:
    Description: IAM Role used for AWS Elastic Beanstalk Service Role
    Value:
      Fn::GetAtt:
      - SampleEBServiceRole
      - Arn
```